白帽故事 · 2024年8月13日 0

SQLMap Payloads 定制

简述

你应该对 SQLMap 添加自定义Payloads不陌生吧?该工具开箱即用,功能强大,但通过高级定制,你可以释放SQLMap的更多潜力!废话不多说,Let’Go!

介绍

我们通常可以通过多种方式来自定义 SQLMap,比如使用额外的header、使用随机代理、设置请求之间的延迟等。通过微调这些选项可以有助于Fuzz特定端点或逃过一些 WAF 的检测规则。

尽管SQLMap的默认设置已经非常好用,但很多时候我们仍然需要添加自己的修改。

寻找配置文件

说白了,这些配置文件就是那些描述了Payloads的特定 XML 文件,比如 GitHub SQLMap 上所看到的:

file

每个文件中描述了不同类型的 SQL 注入的Payloads,比如这个 boolean_blind.xml 文件[https://github.com/sqlmapproject/sqlmap/blob/master/data/xml/payloads/boolean_blind.xml]:

该文件包含了如何构建自己的 SQLMap 查询的大部分说明,它包含一条注释,说明了需要执行的所有操作,在<root>内部,编写了多个测试用例:

file

XML 用例说明

每个用例需具有:

<title> — 测试的名称

<stype> — 以数字方式定义测试类型,你可以写下多个值——如果你正在构建基于布尔型的SQL注入,它的值将是1,基于错误型则是2……在不同类型的文件中,会有不同的类型。

file

file

需要注意的一点是,如果想选择不同的 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的值:

file

你也可以在本地找到 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>下:

file

它是基于异或时间的盲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:

file

另外,如果想查看发送到网站的具体请求,可以在 SQLMap 命令末尾添加-proxy=http://127.0.0.1:8080,也可以使用-v参数达到同样效果。

以上内容由骨哥翻译并整理。

原文:https://medium.com/bugbountywriteup/advanced-sqlmap-customization-07750a1d79ba