关于sqlmap的两个小坑

在使用SQLMap进行SQL注入测试时,发现高版本的SQLMap无法检测到注入点,而低版本却能成功。文章深入分析原因,指出两点关键问题:高版本未测试模糊查询及JSON参数特殊处理。通过修改配置,成功解决注入问题。

i春秋作家:__LSA__

0x00 概述


近日在利用sqlmap注入测试时遇到一个奇怪的现象,高版本sqlmap无法检测出注入,但是低版本的可以测出注入,并且能跑出数据不是误报,经过对比测试和查看sqlmap源码,发现两个小坑。

0x01 情景重现

注入点形式:json
……”whereparams”:[{“name”:”keyWord”,”value”:”test”}]}
可注入参数:value
sqlmap命令:
python sqlmap.py -r sqlpk.txt –flush-session -vv
sqlmap v1.2.11无法注入
 
sqlmap v1.2成功注入
 

同理v1.2.10无法注入,v1.1.12可以注入

经过分析,两坑如下:
(1)v1.2.11(/v1.2.10/v1.2.9/master)的boundaries.xml没有了针对模糊查询(%)的测试,而v1.2(/v1.1.12/1.1.4/1.2.2)则有。
(2)v1.2.11(/v1.2.10/1.2.9/master)必须手动设置json的某个参数为*才能对这个参数进行注入(即使选了y-inject inside),否则payload直接跟在json后导致无法注入,而v1.2(/v1.1.12)则可以默认回车(y)即可对json的某个参数注入。


0x02 详细测试

坑点(1):
先了解sqlmap的payload组成:

 
//图片来源https://www.freebuf.com/column/161797.html

看看v1.2的测试payload:
 

使用了payload:%‘ and 5731=5731 and ‘%’=’
这是挺常见的搜索框注入
看看V1.2的boundaries.xml:
 

而v1.2.11的boundaries.xml没有对模糊查询的注入测试!
https://github.com/sqlmapproject/sqlmap/blob/master/xml/boundaries.xml
于是添加模糊查询的注入测试到v1.2.11的该文件中,并手动添加*到注入参数(如value),即可成功注入!
附上添加后的版本:
https://github.com/theLSA/sqlmap/tree/dev

 

pr得到答复是因为误报太多所以移除了相关payload,但是将会有限的恢复。
https://github.com/sqlmapproject/sqlmap/pull/3372

坑点(2):
对比v1.2和v1.2.11的payload:
 

可以看出v1.2.11直接将payload接在json末尾了。
在注入参数value手动添加*
%22whereparams%22%3A%5B%7B%22name%22%3A%22keyWord%22%2C%22value%22%3A%22*%22%7D%5D%7D
即可成功注入!

0x03 结语
1. 个人建议添加模糊查询的测试payload,误报还是好过漏报,况且是很常见的模糊查询注入。
2. 遇到json参数尽量加手动*(针对某些版本的sqlmap)。
3. 利用sqlmap测试的时候建议加上-vv。
4. 不能过于依赖工具,尽量工具+手工测试比较保险。

转载于:https://www.cnblogs.com/ichunqiujishu/p/9995429.html

### 关于 SQLMap 中多个括号闭合的技巧 在使用 `sqlmap` 进行渗透测试时,如果遇到复杂的 SQL 查询结构(例如嵌套查询或多层括号),可能需要手动调整 payload 来正确闭合括号并保持语法的有效性。以下是关于如何处理这种情况的具体说明: #### 1. **理解 SQL 的括号匹配机制** SQL 是一种基于上下文的语言,在构建复杂查询时,括号用于分组逻辑表达式或子查询。当尝试注入时,未正确闭合的括号可能导致语法错误[^1]。因此,了解目标系统的 SQL 结构至关重要。 #### 2. **利用 sqlmap 自动化功能** `sqlmap` 提供了一些选项来帮助绕过输入验证或修复语法问题。例如: - 使用 `--prefix/--suffix` 参数指定自定义前缀后缀,以便包围注入部分。 - 如果存在多余的括号,可以通过添加合适的闭合符来解决问题。 示例命令如下: ```bash python sqlmap.py -u "http://example.com/vuln?id=1" --suffix="))" --tamper=between --batch ``` 在此例子中,通过 `--suffix` 添加额外的右括号以平衡潜在的左括号[^2]。 #### 3. **手动生成 Payload** 某些情况下,自动化工具可能无法完全适配特定场景的手工调试需求。此时可考虑以下方法: - 手动分析目标 URL 或 POST 数据包中的 SQL 片段; - 构造能够正常运行影响原有业务逻辑的注入语句。 假设原请求为: ```sql SELECT * FROM users WHERE id=(1); ``` 为了实现联合查询攻击,则需确保新加入的内容会破坏原有的圆括号关系。最终形式可能是这样的: ```sql (SELECT CASE WHEN (ASCII(SUBSTR((SELECT database()),1,1))) THEN SLEEP(5) ELSE NULL END)-- - ``` 注意这里巧妙运用了函数调用来规避直接暴露在外层的大规模修改风险[^3]。 另外还需强调一点:实际操作过程中应始终遵循法律法规以及道德准则! ### 示例代码片段展示 下面给出一段简单的 Python 调用脚本作为参考: ```python import subprocess def run_sqlmap(url, suffix): command = [ 'python', 'sqlmap.py', '-u', url, '--suffix', suffix, '--batch' ] result = subprocess.run(command, capture_output=True) print(result.stdout.decode()) if __name__ == "__main__": target_url = "http://testphp.vulnweb.com/artists.php?artist=1" closing_parentheses = ")) AND 1=1-- " run_sqlmap(target_url, closing_parentheses) ``` 此脚本能自动执行带参数化的 sqlmap 测试流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值