第二周1

题目 : [WUSTCTF2020]朴实无华
  1. 打开题目 就一个“hack me” 其他的什么都没有,在网络中亦是如此
    这时候可以用dirsearch -u 命令进行扫描一下看看 发现robots.txt文件
  2. 进入robots.txt文件 提示“Disallow: /fAke_f1agggg.php”
    我们再进入/fAke_f1agggg.php 看一下发现“flag{this_is_not_flag}”
    明显这是个假的flag
    但这时 我们在在网络中看一下这个文件的消息头 发现fl4g.php 文件
  3. 我们进入fl4g.php文件看一下 发现php代码
    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
       <?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("去非洲吧");
    }
    ?>
    去非洲吧
    简单的代码审计看一下
  4. 第一处绕过: 当使用科学计数法来判断num<2020时,11e3会被强制转换为int类型,相当于11,但是当用这种办法来判断+1时,
    科学计数法就会被解析出来11e3+1就是11001,这样就进行了绕过
    所以用num=9e9等可以进行绕过
  5. 第二处绕过: 它的意思就是找一个md5加密后的值=自己本身
    可以用md5=0e215962017 进行绕过
  6. 第三处绕过: !strstr($get_flag,” “):使用逻辑非运算符 ! 对 strstr 的结果取反,即检查 $get_flag 中是否不存在空格。
    说白了 就是过滤了空格和cat
    用get_flag=tac$IFS$1* 即可
  7. 总结 :
    这个题目找到这个php代码的过程比较曲折
    用dirsearch等命令 来查看目录文件
    这个绕过 考察的内容比较多