当许多小伙伴发现或判断注射时,大多数选择直接在sqlmap上,结果往往不能令人满意。所以有一个想法是将sqlmap从执行写入判断注入。发生了什么?
本文使用我们看到的分析透视图,查看sqlmap发送有效负载的内容,这些负载如何发布,而不是深入到代码级别。
测试环境:
SQLMAP(1.3.6.58#DEV)
Burp套房
http://attack.com?1.php?id=1
测试方法
使用sqlmap的proxy参数,我们将代理设置为8080端口并使用burpsuite来捕获数据包。
Sqlmap.py -u'http://attack.com?1.php?id=1'--proxy='http://127.0.0.1: 8080'
(经过长时间的测试,似乎本地构建的环境无法捕获包,所以我发现了一个带注入点的网站,漏洞已经报告给漏洞平台)
捕获的包如下:
准备sqlmap
我们还观察到默认情况下sqlmap发送的User-Agent就是这样的。
用户代理: sqlmap/1.3.6.58 #dev(http://sqlmap.org)
因此,为了避免被waf或log记录,我们通常可以在以后添加--random-agent参数。
首先,我们的sqlmap将不断发送大量数据包来检查目标网站是否稳定:
GET /xxxx.php?id=1 HTTP/1.1
主机: www.xxxx.xxx
接受: */*
用户代理: sqlmap/1.3.6.58 #dev(http://sqlmap.org)
连接:关闭
缓存控制:无缓存
[INFO]测试与目标URL的连接[INFO]测试目标URL内容是否稳定
[INFO]目标网址内容稳定
接下来,它将检查它是否是动态的。与上面的请求包相比,sqlmap修改了id之后的值。
GET /xxxx.php?id=2324 HTTP/1.1
主机: www.xxx.xxx
接受: */*
用户代理: sqlmap/1.3.6.58 #dev(http://sqlmap.org)
连接:关闭
缓存控制:无缓存
[INFO]测试GET参数'id'是否为动态
无法理解这是什么,让我们看看源代码说的是什么(sqlmap \ lib \ controller \ checks.py)。
Def checkDynParam(地点,参数,值):
“””
此函数检查URL参数是否为动态。如果是
动态,页面内容不同,否则
动态性取决于另一个参数。
“””
根据输出语句的关键字搜索,我跟踪了checkDynParam函数。近似函数是修改我们现在获得的参数值,并查看修改前后页面返回是否相同(有时注入多个参数,然后无关紧要。参数修改后) ,页面未更改。如果有更改(或此参数为true且有效),sqlmap将转到下一步。