文件包含和preg_replace - 图1

    知识点:

    文件包含漏洞;

    PHP伪协议中的php://filter

    preg_replace函数引发的命令执行漏洞



    御剑后台扫描打开网站,竟然有page这个字眼:

    文件包含和preg_replace - 图2

    文件包含和preg_replace - 图3

    所有很有可能有文件包含读源码的漏洞;所有我们尝试把源码读出来:

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

    文件包含和preg_replace - 图4

    base64解密后,审计代码

    文件包含和preg_replace - 图5

    找到关键部分:

    文件包含和preg_replace - 图6

    preg_replace函数

    文件包含和preg_replace - 图7

    preg_repace函数存在命令执行的漏洞

    此处明显考查preg_replace函数使用/e模式,导致代码执行的问题:

    /e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。

    也就是说pat和sub有相同的部分,rep的代码就会执行。

    文件包含和preg_replace - 图8

    他果然执行成功了:

    所以我们可以执行命令了:

    文件包含和preg_replace - 图9

    文件包含和preg_replace - 图10

    文件包含和preg_replace - 图11

    文件包含和preg_replace - 图12

    ls—-查目录

    cd—查文件

    cat—读文件