点开网页,就是让咱hack它~~(这么无理的要求满足你)~~ ,查看源码,看看有没有其他提示。
发现乱码了,于是利用火狐修改一下编码方式。(按alt键)
bot,难道是robot协议。先查看一下吧。
找到了个爬虫爬不到的网页,进去看一看。
这题要是那么简单就好了
源码里也没有提示,抓个包看一下吧。
又找到了页面。
(老样子,乱码转成unicode就不乱了)
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 "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.";
}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("去非洲吧");
}
?>
去非洲吧
(他让我去非洲????这是人干的事???)
level1:
以get方法传入num变量,获取num的整数值,比2020小,+1后比2021大。
这里通过科学计数法进行绕过。
num=1e5
前一个intval截取到num=1,+1后变成数值量。
绕过了第一层。
level2:
md5弱相等。借助0e绕过。
(这里就不多讲了,百度一大堆,随便用一个0e)
成功进入第三层。
level 3:
第三层就有点意思了,简单分析一下:
1.以get方式传入参数get_flag。
2.get_flag中不能有空格。
3.get_flag中不能有cat。
如果能传入就会被执行。首先执行一下ls。
可以看到flag在哪里,但是cat被禁了,所以用tac。
然后就是解决空格问题,采用$IFS$7
进行绕过。(数字可以任意替代)
成功绕过拿到flag。