综合渗透测试-WAF绕过注入

第一步,打开网络拓扑,启动实验虚拟机,分别查看虚拟机IP地址:

Kali Linux

Windows 7

第二步,查看Tomcat中第29关的源码(位于桌面/apache-tomcat-9.0.29/webapps/sqli-labs/Less-29/index.jsp)

源代码中,通过正则表达式限制id的值必须是数字,除数字以外的内容如果出现,则被拦截。

第三步,切换至Windows 7靶机控制台,运行Tomcat:

桌面/apache-tomcat-9.0.29/bin/双击startup.bat

第四步,使用Kali Linux访问sqli-lab第29关的页面:

http://172.16.1.200:8080(靶机IP地址)/sqli-labs/Less-29/

第五步,先尝试双引号是否能引发报错:

http://172.16.1.200:8080/sqli-labs/Less-29/” />

被WAF拦截,并跳转至hacked.jsp。

第六步,尝试使用单引号引发报错:

” />

同样的,单引号也被WAF所拦截。

可以推断WAF接收到某些非法字符时,就会将页面跳转至hacked.jsp。

第七步,尝试绕过限制:

1. 测试id=1时返回的结果:

” />

2. 测试id=2时返回的结果:

3. 如果同时传递两个id,将如何显示?

id=1&id=2

显示的是id=2时的返回结果。

4. 尝试在id=1后加入一个单引号:

id=1’&id=2

被WAF拦截。

5. 尝试在id=2后加入一个单引号:

id=1&id=2′

报错出现,初步注入成功。

6. 解释原因:

Apache(PHP)解析最后一个参数,即显示id=2的内容。Tomcat(JSP)解析第一个参数,即显示id=1的内容:

以上图片为大多数服务器对于参数解析的介绍。

此处我们想一个问题:” />此处应该是id=2的内容,应为时间上提供服务的是Apache(PHP)服务器,返回的数据也应该是Apache处理的数据。而在我们实际应用中,也是有两层服务器的情况,那为什么要这么做?是因为我们往往在Tomcat服务器处做数据过滤和处理,功能类似为一个WAF。而正因为解析参数的不同,我们此处可以利用该原理绕过WAF的检测。该用法就是HPP(HTTP Parameter Pollution),HTTP参数污染攻击的一个应用。HPP可对服务器和客户端都能够造成一定的威胁。

7. 爆出当前数据库的名称:

?id=1&id=-1′ union select 1,2,database() –+

第八步,切换至关卡30:

http://172.16.1.200:8080/sqli-labs/Less-30

第九步,对第30关卡进行SQL注入测试:

1. 确定30关卡是否也同样限制id必须为数字:

” />

2. 使用双id尝试绕过:

” />

3. 尝试爆出当前数据库的名称:

” />

有正确回显但无错误回显。

4. 测试引号字符类型:

” />

回显正常。

5. 测试引号字符类型:

” />

无回显信息,所以注入漏洞为“双引号字符型”。

6. 双引号字符型注入,直接将刚刚的单引号修改为双引号即可:

” />

第十步,切换至关卡31:

http://172.16.1.200:8080/sqli-labs/Less-31

第十一步,对关卡31进行注入测试:

1. 正常查询id:

” />

正常返回结果,在页面底部发现,显示了我们传入的id。

2. 尝试进行双id绕过,且执行SQL语句:

” />

无返回结果,且在页面下方看到我们的符号都被进行了URL编码,注入失败。

3. 查看第31关卡源码(位于C:\AppServ\www\sqli-labs\Less-31\index.php):

从SQL语句中可以注意到,id被括号括了起来,我们需要绕过该括号进行注入。

4. 绕过括号进行注入:

” />

注入成功。