NSSCTF (2)

[GKCTF 2020]cve版签到

 

 查看响应头发现有几个可能利用的信息

1.hint 里面的Flag in localhost

2.apache 2.4.38

3. php 7.3.15

我们发现第一个是提示 第二个apache版本没有什么漏洞 但是php 7.3.15 存在cve漏洞

这里题目规定 *.ctfhub.com 所以我们 要以这个结尾

在 php 7.3中 get_headers()会截断URL中空字符后的内容

所以我们可以通过空字符绕过

通过%00截断

 

 这里显示要123 

我们构造127.0.0.123

 [NSSCTF 2022 Spring Recruit]babyphp

<?php
highlight_file(__FILE__);   #高亮显示当前文件的页面
include_once('flag.php');   #包含flag.php这个文件
if(isset($_POST['a'])&&!preg_match('/[0-9]/',$_POST['a'])&&intval($_POST['a'])){  #通过post出个传入一个a的值 ,同时过滤数字 intval用于将a的值进行处理 如果a的值带字符串会被转换为0 如果是数字会转换为整数
    if(isset($_POST['b1'])&&$_POST['b2']){  #通过post传入b1和b2 并判断是不是空
        if($_POST['b1']!=$_POST['b2']&&md5($_POST['b1'])===md5($_POST['b2'])){ #判断b1和b2不一样但是md5值一样 这里是强匹配
            if($_POST['c1']!=$_POST['c2']&&is_string($_POST['c1'])&&is_string($_POST['c2'])&&md5($_POST['c1'])==md5($_POST['c2'])){    #通过post传入c1和c2通过is_string判断传入的值是不是字符串 在md5匹配 c1和c2 这里弱匹配
                echo $flag;
            }else{
                echo "yee";
            }
        }else{
            echo "nop";
        }
    }else{
        echo "go on";
    }
}else{
    echo "let's get some php";
}
?> let's get some php

 这题就是一步一步的绕过

先传入a的值 这里考察绕过preg_match()我们使用数组绕过

成功进入下一个if

这后是b1 b2 md5 值强匹配

而在md5如果传入的不是字符串而是数组会被解析成null 所以这里用数组绕过

 进入c1 c2 的绕过 这里还会判断是不是字符串

这里是弱匹配 所以直接0e就行

 

这题就是md5值的考察 和其他的一样就是0e 开头的在php 进行哈希处理 会通过 != 和== 来匹配的时候0e开头的会被解析成0 所以这里使用0e的数

[HCTF 2018]Warmup

 

发现source.php

 

 <?php
    highlight_file(__FILE__);  #高亮显示当前文件的代码
    class emmm                 #定义一个叫emmm的类
    {
        public static function checkFile(&$page)
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];  
            if (! isset($page) || !is_string($page)) { #判断page是不是空 并判断是不是字符串
                echo "you can't see it";
                return false;
            }

            if (in_array($page, $whitelist)) { #通过in_arry 判断 page的文件识别在$whitelist中
                return true;
            }

            $_page = mb_substr(        #通过mb_substr截取
                $page,                 #截取page   
                0,                     #从0位字符开   
                mb_strpos($page . '?', '?')    #代表截取?之前在url中如 source.php?a=z  那就会是$_page = mb_substr($page,0,11);
            );
            if (in_array($_page, $whitelist)) {  #通过in_arry 判断 page的文件识别在$whitelist中
                return true;
            }

            $_page = urldecode($page);  #url解码 page 
            $_page = mb_substr(         #这里和上面一样
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
            echo "you can't see it";
            return false;
        }
    }

    if (! empty($_REQUEST['file'])      #通过$_REQUEST['file']获取文件名 empty 判断是不是空
        && is_string($_REQUEST['file'])    #判断是不是字符串
        && emmm::checkFile($_REQUEST['file'])    #使用emmm类中的checkFile判断
    ) {
        include $_REQUEST['file'];            #包含这个文件
        exit;
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  
?> 

 从文件我们知道只允许source.php hint.php两个文件

 

也就是我们通过这里知道了flag在哪里 再通过source中的文件包含获取

 

1、是否存在file参数

2、file参数是否为字符串

3、emmm类的checkFile方法判断

重点漏洞成因是

 我们发现这里对于url做了第二次过滤 正是因为考虑的太过于详细所以导致了漏洞

如我们的url为http://node4.anna.nssctf.cn:28523/source.php?file=hint.php 

 

 这里的url为source.php?file=hint.php%253F

这个是?的两次url编码 那我们也就知道了这的的第二个?会通过 

此时根据第二个过滤的代码 会解析第二个?之前的内容 ?后面的内容就可以绕过了

这题是CVE-2018-12613的变化题

那我们知道原理就可以进行绕过

这里要用到目录

. 代表当前目录
.. 代表上一级目录
./  同一目录下的不同文件
../ 上一级目录下的文件

这里我们有a 目录 下有b c目录  b目录下有d e目录 d目录下有zx 文件

我们可以看到.代表的

 

我们现在再d中写入一个d文件

我们可以知道./的作用

现在我们再a中创建zx文件

 

 我们就知道了目录移动

所以下面我们就尝试包含flag文件

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许允er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值