[WUSTCTF2020]朴实无华

[WUSTCTF2020]朴实无华

EJ_p8bXcvGk-Vi2wL1pvwPaElnMjdis3uYeixTkiw84

robots.txt里发现提示

3PT2a_O90Iz8cPeWLt1phKcRe5Wj_8dr1jCc06UeHNk

打开这个页面,虽然页面里没有有用的信息,但是在响应头里发现了另一个页面提示

_eItnTdv1M3DkBBQa7F9UURYZCmnzD1DW6cwL7aRYC8

c6vaKp-IEXRzDVGnSIoerRMfeBgWhiZrWgGj9wmah9Y

打开发现代码

NWbwuFh5_XLZGXEvr9murGnckNCuOAqHJ6yHYGfDKTM

<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__file__);


//level 1
if (isset($_GET['num'])){
    $num = $_GET['num'];
    if(intval($num) < 2020 && intval($num + 1) > 2021){
        echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.</br>";
    }else{
        die("金钱解决不了穷人的本质问题");
    }
}else{
    die("去非洲吧");
}
//level 2
if (isset($_GET['md5'])){
   $md5=$_GET['md5'];
   if ($md5==md5($md5))
       echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.</br>";
   else
       die("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲");
}else{
    die("去非洲吧");
}

//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("去非洲吧");
}
?>

这题有三关,需要同时满足条件才能显示flag

level1的关键代码在这个判断

if(intval($num) < 2020 && intval($num + 1) > 2021)

intval() 函数用于获取变量的整数值。

intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer数值。 intval() 不能用于 object,否则会产生 E_NOTICE错误并返回 1。

在第一层中要使用get传参一个num变量,整数值要小于2020,但是加上1之后又要大于2021,根据intval()函数的使用方法,当函数中用字符串方式表示科学计数法时,函数的返回值是科学计数法前面的一个数,而对于科学计数法加数字则会返回原本科学计数法的数值。

举个例子:

<?php
$num='2e4';
echo(intval($num));
echo('<br>');
echo(intval($num+1));
?> 

这里输出的值分别为2和20001

因此可以使用科学计数法解决,输入参数num=2e4

CjiGr28pi2p2xp-QDVIGTdIIMFa9FebjAjnQPmVCh9o

level2是md5绕过,一般的md5绕过是传入0e开头的md5值,因为在弱比较时,弱比较中会截取一个字符串的数字,知道遇到字符截止,对于0e+数字的值只会截取e之前的0,所以这里即便是令传入的md5值等于$md5后还需要等于其自身进行md5的值,我们选取0e或者加密后仍为0e开头的数就行例如:0e215962017、以及这些纯字符串转化后为0e+数字的数:QNKCDZO、s878926199a

6AQDCfTlOpsHugRhuL2UUNHwcce4UbLTdIzStuoPdZ8

level3过滤了空格和cat,因此可以用几个常见的字符替代

代替cat: more、less、head、tail、sort

代替空格:$IFS、${IFS}、$IFS$1

具体可参考:https://mayi077.gitee.io/2020/03/14/CTFHub-%E4%B9%8B-RCE/

首先通过ls查看文件

P7Sb0xSdpLWA-B4wmhuPymPc_fKYavJW8guXzrE5ODE

然后通过其他字符进行代替

FEVIklYHJVFhMnOVsgKK3nVuV7XaKLhE1eBvXHg0Ky0

posted on 2024-02-12 21:07  跳河离去的鱼  阅读(6)  评论(0编辑  收藏  举报