SQLMAP绕过WAF小技巧

今天继续给大家介绍渗透测试相关知识,本文主要内容是SQLMAP绕过WAF小技巧。

免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!

一、SQLMAP伪造IP白名单

在网站架构中,会经常使用IP白名单技术,把一些可以信任的IP地址添加到IP白名单里面,这些IP地址通常是服务器自身的IP地址或者是管理员常用的IP地址,WAF对IP白名单里面的IP地址进行的访问,通常不进行处理,直接放行。基于此原理,我们在使用SQLMAP进行SQL注入的渗透测试的时候,可以将自己伪造成服务器自身的IP地址,以便绕过WAF的检测机制。当然,我们无法伪造网路层的IP地址,我们可以伪造的是HTTP头中的X-Forwarded-For、X-Remote-IP、X-Originating-IP、X-Remote-Addr、X-Real-IP等参数。
我们在使用SQLMAP的时候,可以使用–headers,指定这些HTTP头部,加入到SQLMAP发送的数据包中,如果要使用多个HTTP头,则可以在–headers参数里面使用\n(换行)来分隔。
一个典型的使用–headers来伪造IP白名单的SQLMAP使用命令如下所示:

python .\sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 --proxy "http://127.0.0.1:8080"  --headers="X-Remote-IP:2.2.2.2\nX-Forwarded-IP:1.1.1.1"

我们使用burpsuit来抓取SQLMAP的数据包,结果如下所示:
在这里插入图片描述
从上图中可以看出,我们成功的在SQLMAP的数据包里面添加了X-Remote-IP和X-Forwarded-IP的HTTP头。

二、SQLMAP伪造静态资源

除了伪造IP白名单以外,我们还可以通过伪造静态资源的方式来进行绕过。一般而言,对网站静态资源的访问不会造成安全威胁,比如访问一张图片、JS脚本等等。基于此,很多WAF不会对静态资源的访问来进行检测。我们则可以利用这一点,来将我们的访问伪造成对静态资源的访问。
例如,目标站点URL为:

http://x.x.x.x/sqli/Less-1/index.php?id=1

我们可以将其改造为:

http://x.x.x.x/sqli/Less-1/index.php?id=1/123.js?id=1

当然,这种改造方式,需要站点服务器将上述改造后的URL当作index.php文件来进行解析,并且WAF错误的将上述URL当作静态资源。因此,这种方法在本质上就是利用了站点服务器和WAF对URL的解析差异来进行的绕过。
我们在使用SQLMAP来伪造静态资源时,需要手动的对URL进行改造,这样SQLMAP就可以使用我们改造后的payload了。

三、SQLMAP伪造URL白名单

很多站点都具有管理后台,通过管理后台可以方便的管理整个站点的资源、模块、数据库等等。因为站点管理后台的很多操作都是对站点的操作,因此经常被WAF所误报拦截。为了解决这一问题,很多WAF都会设置一个URL的白名单,对该白名单的URL,不进行检测,直接放行。常见的站点管理后台URL包含有manage、system、admin等关键字,因此很多WAF对后台的判断也是基于URL中是否具有上述关键字。
因此,我们可以利用这一点来绕过SQLMAP的检测。例如,目标站点URL为:

http://x.x.x.x/sqli/Less-1/index.php?id=1

为了使得我们的SQL注入payload绕过WAF的检测,我们可以构造如下payload:

http://x.x.x.x/sqli/Less-1/index.php?a=manage&b=system&c=admin&id=1

在该payload中,我们使用了无关的参数构造了含有manage、system和admin的URL,这样则可以试图利用URL白名单的方式,绕过WAF的检测。
我们在使用SQLMAP进行SQL注入时,也可以认为构造相应的参数,然后进行检测。

四、SQLMAP伪造User-Agent

最后,给大家介绍一下SQLMAP伪造User-Agent的原理。
如果说前面的三种小技巧都是锦上添花的手段,那么对于User-Agent的伪造则是使用SQLMAP进行SQL注入绕过WAF时的必须了。
这是因为在默认情况下,SQLMAP的数据包User-Agent会带有其独有的User-Agent,而很多WAF会检测这样的User-Agent,检测到之后会直接视作攻击处理。SQLMAP没有伪造User-Agent(正常状态)下的数据包使用burpsuit抓包如下所示:
在这里插入图片描述
从上图中可以看出,SQLMAP的User-Agent携带有sqlmap/1.6.8.2#dev(http://sqlmap.org)的User-Agent
因此,我们需要修改SQLMAP自带的User-Agent,可以考虑将其修改为常用浏览器的User-Agent,常用浏览器的User-Agent有很多,例如:
火狐浏览器:

Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1

360浏览器:

Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;360SE)

类似的User-Agent内容我们都可以在网上搜索到。
我们在使用SQLMAP进行SQL注入测试时,如果要修改SQLMAP数据包中的User-Agent内容,可以使用–user-agent参数。例如,构造如下SQLMAP命令:

python .\sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 --proxy "http://127.0.0.1:8080"  --user-agent="Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1"

那么使用SQLMAP并将User-Agent指定为火狐后的SQLMAP数据包如下所示:
在这里插入图片描述
从上图中可以看出,我们成功修改了SQLMAP的User-Agent头。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

猜你喜欢

转载自blog.csdn.net/weixin_40228200/article/details/126538369