点进场景看到是很炫酷的页面,题目秒速的是:系统设备维护中心的后门入侵系统,那直奔那里
进来发现什么也没有,到处点一点
在点击时, url发送了变化
出现?page=index 那么联想到可能存在利用文件包含读取网页源码的漏洞
用php内置filter伪协议读取文件的代码:
?page=php://filter/read=convert.base64-encode/resource=index.php
访问之后页面出现一大段base64编码
之后去解码得到(给出关键部分)
从这里看出我们需要抓包 设置X-Forwarded-For:127.0.0.1
已经显示welcome My Admin!
那么第二步最关键的利用preg_replace()函数的/e漏洞进行代码执行
该函数执行一个正则表达式的搜索和替换
preg_replace()函数的介绍:
preg_replace($pattern, $replacement, $subject)
作用:搜索subject中匹配pattern的部分, 以replacement的内容进行替换。
$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。
那么/e漏洞又是什么呢?
preg_replace() 函数还有一个/e模式。
可以参考深入研究 preg_replace /e 模式下的代码漏洞问题_Web安全_心月IT博客
就是说在subject中有要搜索的pattem的内容, 同时将在replacement前加上/e,就可以触发/e漏洞就可以执行replacement中的php代码
那么我们就可以构造payload了
/index.php?pat=/zld/e&rep=system("ls")&sub=zld
先看看有什么文件
这个文件夹比较有意思
我们进去看看
看到flag了,应该就在里面了
我们再深入进去
胜利在望
我们cat一下flag.php
成功拿到flag
$flag = 'cyberpeace{ed865f32871e9206d2c5245f25483a07}';