前言
- 考点:PHP伪协议进行文件读取,
base64编码字符串特点,信息搜集能力prey_replace()函数 - 1.PHP伪协议:
php://filter/convert.base64-encode/resource=文件名 - 2.
Prey_replace()函数:时PHP中的一个函数,用来执行一个正则表达式的搜索和替换,定义如下

解释

- 特别说明:
/e修正符使preg_replace()将replacement参数当作 PHP 代码(在适当的逆向引用替换完之后),要确保replacement构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含preg_replace()的行中出现语法解析错误,那我们知道preg_replace的/e修正符会将replacement参数当作 php 代码,并且以eval函数的方式执行,前提是subject中有pattern的匹配(二者有相等的值)
解题步骤:
- 1.进入实例,根据题目提示,在设备维修中心有后门,我们打开设备维修中心

没有什么异常,查看网页源码,发现异常

点击超链接,进入下一个页面

- 2.URL参数上显示index,页面也渲染出来了index,猜测参数的值与页面呈现内容相关,尝试将page的值改为
1,果然页面渲染为1,验证了我们的猜想,我们接下来一次尝试可能的文件名,看看是否会有回显

在输入,index.php是返回OK,猜测index.php可能是正确答案,只是我们的姿势不对,结合文件包含漏洞的猜测,使用php伪协议尝试,输入page=php://filter/convert.base64-encode/resource=index.php,执行得到页面回显

进行base64解码,得到一段PHP代码 - 3.进行代码审计。这里给出关键部分






- 4.我们查一下
prey_replace()函数,具体解释写在上面了,发现这里可以成为我们的恶意代码执行点,我们先使用BP抓包,在请求头处添加X-Forwarded-For:127.0.0.1,再根据要求构造传入参数

得到回显

继续查询

由于空格会导致断参,使用%20代替空格,得到回显

继续

得到回显

现在我们要获取flag.php的内容

得到回显
