简述
你应该对 SQLMap 添加自定义Payloads不陌生吧?该工具开箱即用,功能强大,但通过高级定制,你可以释放SQLMap的更多潜力!废话不多说,Let’Go!
介绍
我们通常可以通过多种方式来自定义 SQLMap,比如使用额外的header、使用随机代理、设置请求之间的延迟等。通过微调这些选项可以有助于Fuzz特定端点或逃过一些 WAF 的检测规则。
尽管SQLMap的默认设置已经非常好用,但很多时候我们仍然需要添加自己的修改。
寻找配置文件
说白了,这些配置文件就是那些描述了Payloads的特定 XML 文件,比如 GitHub SQLMap 上所看到的:
每个文件中描述了不同类型的 SQL 注入的Payloads,比如这个 boolean_blind.xml 文件[https://github.com/sqlmapproject/sqlmap/blob/master/data/xml/payloads/boolean_blind.xml]:
该文件包含了如何构建自己的 SQLMap 查询的大部分说明,它包含一条注释,说明了需要执行的所有操作,在<root>
内部,编写了多个测试用例:
XML 用例说明
每个用例需具有:
<title>
— 测试的名称
<stype>
— 以数字方式定义测试类型,你可以写下多个值——如果你正在构建基于布尔型的SQL注入,它的值将是1,基于错误型则是2……在不同类型的文件中,会有不同的类型。
需要注意的一点是,如果想选择不同的 SQMLap 攻击类型,可以使用-technique=T 标志来执行该操作,其中该值是 SQL 注入攻击的第一个字母。
例如,T – 代表基于时间,B – 布尔值,E – 基于错误等。这并不意味着 SQMLap 将运行该文件的所有查询,因为还有其它诸如 level 之类的东西。
<level>
— 描述程序将执行多少个请求,级别越高,从文件中选择的Payloads就越多。例如,如果在命令中指定-level=3 ,它将过滤级别为1 、 2和3的Payloads。
<risk>
— 定义Payloads破坏数据完整性的可能性,如果在 CLI SQLMap 查询中指定-risk=3 ,它将运行风险最高的查询 — 这些查询有可能会破坏服务器上的某些内容。
强烈建议不要在生产服务器上执行该操作。
<vector>
— 指定你的Payloads
其他对象将取决于攻击类型,建议复制以下Payloads来执行类似的操作。
定位本地Payloads配置
接下来我们构建一个基于时间的查询,首先打开time_blind.xml文件,复制第一个查询,稍后会替换为我们自定义Payloads的值:
你也可以在本地找到 time_blind.xml 的所在路径。
-
如果你是通过源代码安装的SQLMap,它将位于
sqlmap/data/xml/payloads/time_blind.xml
目录下 -
如果你是使用pip3安装的SQLMap,它将位于主目录、 .local目录及其子目录中,具体取决于你的 Python 和 pip 版本
-
如果你是使用 Ubuntu、Kali Linux 或 Parrot OS 使用 APT 等包管理器安装的SQLMap,它将安装在/usr/share目录下的某个位置
如果你还是无法找到它,可以使用find命令来查找:
find / -name time_blind.xml -type f 2>/dev/null
在本示例中,该文件位于/usr/share/sqlmap/data/xml/payloads目录下。
构建自定义Payloads
<test>
<title>XOR time-based blind (query SLEEP)</title>
<stype>5</stype>
<level>1</level>
<risk>1</risk>
<clause>1,2,3,8,9</clause>
<where>1</where>
<vector>[RANDNUM]'XOR(if(now()=sysdate(),sleep([SLEEPTIME]),0))XOR'[RANDSTR]</vector>
<request>
<payload>[RANDNUM]'XOR(if(now()=sysdate(),sleep([SLEEPTIME]),0))XOR'[RANDSTR]</payload>
</request>
<response>
<time>[SLEEPTIME]</time>
</response>
</test>
将其粘贴到文件顶部的<root>
下:
它是基于异或时间的盲sleep查询。
<stype>
为 5,指所有基于时间的Payloads都会使用它。
<risk>
和<level>
为 1,考虑默认情况下 SQLMap 将使用可能的最低级别和风险。
从<test>
用例中复制<clause>
和<payload>
,并将其替换为使用唯一查询。
可以看到使用了一些变量,例如[RANDNUM] 、 [SLEEPTIME]和[RANDSTR] ,这些变量的作用如下:
-
[RANDNUM] — 该变量将随机化一个数字
-
[RANDSTR] — 将随机化一个字符串
-
[SLEEPTIME] — 将为Sleep查询选择一个随机时间,除非你使用-time-sec选项指定它
运行自定义Payloads
如果你想只运行这个特定的查询,那是不可能的。但可以限制与新构建的测试用例一起发送的请求。要确保运行该查询,可以执行以下命令:
sqlmap -u 'http://testphp.vulnweb.com/listproducts.php?cat=1' --technique=T
在这种情况下,它将命中基于 XOR 时间的(盲 SLEEP 查询)测试用例,因为它使用了 SQLMap 默认情况下的risk和level:
另外,如果想查看发送到网站的具体请求,可以在 SQLMap 命令末尾添加-proxy=http://127.0.0.1:8080
,也可以使用-v
参数达到同样效果。
以上内容由骨哥翻译并整理。
原文:https://medium.com/bugbountywriteup/advanced-sqlmap-customization-07750a1d79ba