现在越来越多的网站开始使用 RESTFUL 框架,数据传输使用 JSON,那么这种情况下我们如何使用 SQLmap 进行自动化注入呢?
先说结论:对于 JSON 数据的 SQL 注入使用 *
是错误的!
首先需要着重强调一下,网上有很多文章说可以使用*来指定注入点,但经过我的实测,SQLmap 发送的数据包会被强制转换为普通格式。
我们可以使用-vvv
参数来查看 SQLmap 发送的测试数据:
1 |
sqlmap -u https://www.example.com —data {"externalCode":"DCS214120101000456814087*"} --risk=3 -vvv |
如上图所示,可以看到使用*时,JSON 格式的 POST 数据被强制转换为普通格式,如此发送到服务端当然是没办法识别的。
对于 JSON 格式的注入,正确用法是:
2. 使用 -r 参数来注入,SQLmap 会自动识别 JSON 格式并发现注入点:
1 |
sqlmap -r sql.txt |
此时,如果使用-vvv
参数查看,你会发现发送的测试数据包仍然是 JSON 格式:
这种用法才是正确的.
HTTPS
站点,需要手动在 Host 字段后加上 443 端口,就像下面这样:2. 如果要指定 POST 数据中 JSON 参数注入点,-p
参数是不支持的,需要手动添加*
: