MySQL注释注释符:
#,--,/**/注意这里
--后面的空格,在chrome中可能被吞掉,那么应该用%20来代替空格内联注释:
/*! sql语句 */,仅有MySQL可以识别,用来绕过WAF,例:1
SELECT *FROM user WHERE id=-1 /*!union*/ /*!select*/ 1,2,3,4
SQLmap获取目标
直连数据库
服务型数据库(如mysql,oracal,microsoft SQL server)
1
sqlmap -d DBMS://ADMIN:PASSWORD@DBMS_IP:DBMS:PORTS/DATABASE_NAME
文件型数据库(需要知道绝对路径)
1
sqlmap -d DBMS://DATABASE_FILEPATH
url探测-u/-url从文件读取目标
-l从burp中读取的http请求日志文件—>在Project options-misc-logging-Proxy选择requests-x从站点地图sitemap中读取慕白哦-m从文本格式文件中读取多行作为目标-r文本文件中读取http请求作为目标-c从配置文件sqlmap.conf读取目标
参数设置
http请求方法get向服务器请求资源post向服务器提交资源put全局更新资源delete删除在
sqlmap中,put请求不会自动使用,那么可以强制指定,但并不常用1
--method=PUT
设置
POST请求默认下执行
http请求的方法是GET,但可以通过提供仅在POST请求中发送的数据将其更改为POST方法1
--data="[截获的请求参数]"
当然,
--method在这里也可以使用
如图就是截获的
POST参数,对于GET请求的使用如此参数便可以POST方式设置参数分隔符
1
--param-del="[指定分隔符]"
sqlmap默认分隔符为&,而当特殊情况下截获的参数分隔符不为&时,需要手动设置与其相同的分隔符以便正常探测如截获的请求为
user=admin;pass=123时,分隔符为;,此时需要手动设置设置
cookie值1
--cookie [cookie]
当仅使用自己的
cookie而不用网站返回的set-cookie报头时,可以使用drop-set-cookie忽略网站返回的所有cookie注意:对
cookie进行探测时,需要设置level为 $2-5$设置
user-agent头默认情况下,
sqlmap使用的用户代理头容易被相关措施拦下,但可以自定义用户代理来伪造1
2--user-agent="[合法的useragent]"
--random-agent 从share/sqlamp/txt/user-agent.txt中随机选取一用
burp抓包即可得到合法的user-agent此时
level设置需为 $3$ 以上设置
host头$\sout{感觉没什么用的样子}$
关于
host一个
ip可对应多个域名,host参数用于识别将访问到哪个域名当服务器仅允许特定主机访问敏感资源时,可以伪造
host标头,使服务器误以为请求来自受信任的主机比如通过查看
robot.txt发现后台,将host改为localhost绕过当
level设置为 $5$ 时,sqlmap将对HTTP主机头进行注入探测
设置
referer关于
包含 “引荐页面” ,即用户在访问当前页面之前所在的位置
常用于用户跟踪,比如是否从特定网站访问,防盗链等,但值得注意的是
referer易被更改,不能用于关键部分。在
sqlmap中,默认不发送任何引用头。而当level在 $3$ 以上时,会对referer进行渗透测试
设置
http标头就是总结输入以上参数,以
\n分割不同参数,例1
--header="User-agent:[balabala]\ncookie:[balabala]\nhost:[balabala]"
设置
http认证关于认证
basic服务器收到敏感请求后返回 $401$ 状态,要求用户名与密码,客户端以
base64加密后明文发送至服务器,成功后服务器返回 $200$ 状态Digest客户端根据用户名密码加密生成响应码
response(默认下是md5加密), 服务器验证响应码值得注意的是,即使不再以明文传输密码,攻击者仍可截获响应码进行重放攻击。所以一般来说服务器会发送基于时间的随机数
nonce,并要求其与用户名密码一同加密,从而避免未随机化的摘要认证NTMLWindows下的单点验证。客户端发送用户名,并根据密码生成对应摘要,服务器返回一个随机数挑战Challenge,客户端使用摘要对随机数加密(HMAC-MD5)并返回给服务器,服务器检索用户名并进行根据其密码同样加密,若两者相符则认证成功
而在
sqlmap中,针对需要认证的页面,通过设置参数中的用户名和密码可以进行渗透测试1
2--auth-type [支持的认证方式:Basic,Digest,NTML]
--auth-cred "[username]:[password]"
设置代理
1
2
3
4--proxy http://[ip]:[port]
--proxy-cred [username]:[password]
--proxy-file 从文件中设置多条代理
--ignore-proxy 忽略系统代理设置测试参数
1
2
3
4
5--delay [time] //延迟发包时间
--timeout [double_time] //超时时间,默认30s,可设置小数
--retries count [num] //设置重试次数
--ignore 401 //忽略未验证错误
--skip-urlencode //关闭url编码设置随机参数
每次请求中随机更改指定值,长度与类型与原始值保持一致,如对
id进行随机,会随机提交id=1,2,3...的请求1
--randomize [参数名称]
设置安全模式
对于大型渗透中,当
sqlmap多次不成功访问时,服务器长时间不响应,会导致与sqlmap的连接中断,导致会话失效。所以应该一直保持最初的会话,即在每次请求数量达到预设时访问该url,因为不对该url进行任何注入,所以服务器一定会相应,从而达到保持会话的目的1
--safe-url [url]
绕过
CSRF网站一般在表单中添加随机值的
token为隐藏字段来防止CSRF攻击,sqlmap自动识别失效时需要手动添加参数1
2-csrf-token [字段名] 指定包含token的隐藏字段名,不过不是常见字段名则不能识别,需要手动指定
-csrf-url [url] 从任意url中回收token,当目标url不包含token而要求在其他网站提取token时可用
性能优化
1
-o //开启所有性能优化参数
HTTP持久连接此时
HTTP报文中显示Connection:keep alive1
--keep-alive
当扫描站点url较多时,如此能提高性能
不接受
HTTP body盲注时,只关心响应头
head部分,则设置空连接1
--null-connection
多线程
1
--thread=[num]
最大线程数为 $10$
指定位置注入
如
Submit为静态参数,id为动态参数,那么扫描时只需要指定id即可同理,可以跳过某些参数
1
2-p "id","[balabala],[balabala]"
--skip "referer,host"1
2--param-exclude="[],[]" //不对包含指定参数的请求进行探测
--skip-static //扫描时忽略非动态参数
sqlmap注入基础参数
- 本文链接: http://noone40404.github.io/2023/09/20/sql注入基础参数/
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!