本文作者:清夜

如果绕过 web应用程序防火墙( WAF)♥下

清夜 4个月前 ( 06-15 ) 23 抢沙发
如果绕过 web应用程序防火墙( WAF)♥下摘要: 在左下方的窗格中,你可以看到对这个网站(test1.unicresit.it)进行远程命令执行测试。正如你所看到的,Sucuri WAF 以 An attempted RFI/LF...

在左下方的窗格中,你可以看到对这个网站(test1.unicresit.it)进行远程命令执行测试。正如你所看到的,Sucuri WAF 以 An attempted RFI/LFI was detected and blocked 理由阻止请求。 

右窗格显示了同样的请求,但却使用 ? 作为通配符,结果是 Sucuri WAF 没有阻止这个请求,应用程序执行了放入 c 参数的命令。现在就可以读取 /etc/passwd 文件,甚至更多。


我可以读取应用程序本身的 PHP 源代码,可以使用 netcat(/???/?c)执行反弹 shell,或者我可以执行 curl 或 wget 来获取网络服务器的真实 IP,使我能够通过直接连接目标来绕过 WAF。


ModSecurity OWASP CRS 3.0

以下文档很好地概述了每个级别在 REQUEST PROTOCOL ENFORCEMENT 规则上的工作原理。 PL1允许的查询字符串包含 1-255 范围内的 ASCII 码,从PL1到PL4,允许的 ASCII 码越来越少。

http://www.iyuji.cn/iyuji/s/UDY2Y2lWOW9VV2dkcmh0a25XbjRldz09/1592068861266248


Paranoia Level 0 (PL0)

PL0 开启的防护规则较少,我们的代码能够正常执行。

http://www.iyuji.cn/iyuji/s/UDY2Y2lWOW9VV2dkcmh0a25XbjRldz09/1592068891225346


Paranoia Level 1 and 2 (PL1, PL2)


PL1 和PL2 都会拦截原始的请求,但是如果使用 ? 作为通配符,该请求不会被WAF 拦截。

http://www.iyuji.cn/iyuji/s/UDY2Y2lWOW9VV2dkcmh0a25XbjRldz09/1592068916497978


之所以发生这种情况,是因为 ? ,/ 和空格在规则 920271 和 920272 的可接受字符范围内。此外,使用 ? 能够避开系统文件过滤规则,拦截对操作系统常用命令和文件的访问。


Paranoia Level 3 (PL3)


PL3可以阻止包含 ? 等字符超过 n 次的请求。实际上,我的请求被拦截为: Meta-Character Anomaly Detection Alert — Repetitive Non-Word Characters。


但是作为测试用的 Web 应用程序非常蹩脚,容易受到攻击,所以我可以使用较少的 ?,并使用以下语法读取 passwd 文件:c=/?in/cat+/et?/passw?


正如你所看到的,只用 3 个 ?,我就可以避开 PL3 级别的防护,读取目标系统中的 passwd 文件。 

Paranoia Level 4 (PL4)


PL4 级别的防护基本无法绕过,a-z A-Z 0–9 之外的字符都被屏蔽了。当你需要执行一个命令来读取文件时,有 90% 的概率需要一个空格字符或 /。


结论

使用一些不常用的bash命令的技巧,还是可以绕过WAF的防护的。 

文章版权及转载声明

作者:清夜本文地址:https://blog.youngxq.cn/post/435.html发布于 4个月前 ( 06-15 )
文章转载或复制请以超链接形式并注明出处清夜博客

阅读
分享

发表评论

快捷回复:

验证码

评论列表 (暂无评论,23人围观)参与讨论

还没有评论,来说两句吧...