sqlmap简介、支持的注入类型、常规使用方法、请求参数、常用参数优化。
一、简介:
sqlmap 是一款用来检测与利用SQL注入漏洞的免费开源工具,有一个非常棒的特性,即对检测与利用的自动化处理(数据库指纹、访问底层文件系统、执行命令)。
官方网站
注意:
sqlmap是由2.x版本Python语言编写的,所以在安装 sqlmap 之前应先搭建好相应的 Python环境 。
二、SQLMAP 支持的注入类型(5种):
1.基于布尔的盲注检测
(如果一个url的地址为 xxxx.php?id=1 ,那么我们可以尝试下加上 and1=1(和没加and 1=1结果保持一致)和and 1=2(和不加and 1=2结果不一致),则我们基本可以确定是存在布尔注入的)
2.基于时间的盲注检测
(和基于布尔的检测有些类似.通过 mysql 的 sleep(int) )来观察浏览器的响应是否等待了你设定的那个值,如果等待了,则表示执行了 sleep ,则基本确定是存在sql注入的。
3.基于错误的检测
(组合查询语句,看是否报错(在服务器没有抑制报错信息的前提下),如果报错则证明我们组合的查询语句特定的字符被应用了,如果不报错,则我们输入的特殊字符很可能被服务器给过滤掉(也可能是抑制了错误输出.))
4.基于union联合查询的检测
(适用于如果某个web项目对查询结果只展示一条而我们需要多条的时候则使用 union 联合查询搭配 group_concat 还可以获取更多的信息)
5.基于堆叠查询的检测
(首先看服务器支不支持”多语句查询”,一般服务器sql语句都是写死的,某些特定的地方用占位符来接受用户输入的变量,这样即使我们加and 也只能执行select(也不一定select,主要看应用场景,总之就是服务端写了什么,你就能执行什么)查询语句,如果能插入分号;则我们后面可以自己组update,insert,delete等语句来进行进一步操作) 。例:
1 | http ://192.168.1.63/sqli-labs/Less-38/?id=1';insert into users(id,username,password) values ('66','root','kdkid')--+ |
三、常规使用:
①kali中检查sqlmap版本信息:
1 | sqlmap -h |
②探测单个目标:
1 | sqlmap -u "http://192.168.1.63/sqli-labs/Less-1/?id=1" |
③探测多个目标:
1 | # vim sqliurl.txt |
④从文件加载 HTTP 请求进行探测:
1 | # vim Cookie.txt |
⑤从 burpsuite 日志记录中进行探测:
1 | Burpsuite 开启日志记录: |
⑥检测 SQL 注入漏洞存在的技术类型(BEUSTQ):
1 | B: Boolean-based blind(布尔盲注) |
⑦枚举数据库信息
1 | --dbs #枚举数据库名称 |
四、SQLMAP 请求参数
1、默认的请求参数
1 | 打开 WireShark 关闭混杂模式进行抓包,捕获过滤器:host 192.168.43.63 |
2、修改默认请求参数
1 | 例 1:手动指定请求参数 |
3、使用代理进行探测
使用代理进行探测时,是不能够探测内网目标的,除非目标在公网也能够正常访问。
1 | └─# sqlmap -u "http://xxx.xxxx.com/forum.php?gid=100" --proxy "http://14.20.235.129:34100" --delay="1" --random-agent --batch |
结果是,虽然使用了代理,但是我们还是被服务器屏蔽了,所以我们这个时候就不能使用单一代理的方式进行探测,我们需要使用代理文件来指定多个代理进行探测。
例 :使用多个代理地址进行探测
新建代理列表文件,填写多个代理地址。
1 | └─# vim proxy.txt |
1 | sqlmap -g "google 语法" --dump-all --batch |
4、忽略未验证错误
参数:
–ignore-401 #忽略未验证错误
5、sqlmap安全模式
如果执行了一定数量的不成功请求,则Web应用程序或其间的检查技术会破坏会话。这可能发生在sqlmap的检测阶段或利用任何SQL盲注类型时。原因是SQL有效负载不一定返回输出,因此可能被应用程序会话管理或检查技术检测到从而破坏会话。
1 | --safe-url #测试期间经常访问的URL地址。 |
6、关闭URL编码
参数:
–skip-urlencode #这种情况用于后端服务器不遵循RFC标准(URL编码的标准)并要求数据以非编码方式进行传输。
五、sqlmap常用参数优化
例1:预测输出算法
参数: –predict-output
#该参数使用推理算法,用于对检索到的值的字符进行顺序统计预测,根据sqlmap工作目录下的 /usr/share/sqlmap/data/txt/common-outputs.txt
结合当前枚举到的数据给出的预测,从而提升探测效率,当然如果有遇到常见的名称也可以手动添加到 /usr/share/sqlmap/data/txt/common-outputs.txt 文件中。
请注意,此开关与 –threads 开关不兼容。
例2:设置持久连接
参数: –keep-alive
·使用http(s)长连接,性能好
·与–proxy参数不兼容
·长连接避免重复建立连接的网络开销,但大量长连接会严重占用服务器资源
例3:设置空连接
参数: –null-connection
#该参数使用HEAD方式发送HTTP请求,目的是不接收服务器返回的body信息,只接收返回的页面大小,这样就减小了数据包的大小,从而提高盲注探测性能。
例4:配置多线程
参数: –threads
#默认使用1个线程,最大为10,如果目标服务器不存在访问限制而且性能较好的情况下可以设置多个线程同时进行探测,建议不要超过10,否则可能影响站点可用性。
与–predict-output参数不兼容。
拓展参数-o
该参数捆绑例1、2、3三个参数,使用该参数表示同时使用以上所有参数(除–threads参数)。线程数默认为1。
文档是英文,可用Google翻译。
Sqlmap一共有5个探测等级,默认是1。
1 | 等级越高,说明探测时使用的payload也越多。 |
sqlmap一共有3个危险等级,也就是说你认为这个网站存在几级的危险等级。
和探测等级一个意思,在不确定的情况下,建议设置为3级,–risk=3
本文链接: https://kur08a.github.io/2022/03/28/sqlmap%E7%9A%84%E4%BD%BF%E7%94%A8/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
![知识共享许可协议](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)