查看robots.txt 找到/fAke_flagggg.php
显然这是个假的flag,但是我们在header处发现了fl4g.php
近来发现中文全部变成了乱码
插件转成utf8后正常显示
<?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("去非洲吧");
}
?>
第一步 绕过intval()
显然不存在一个实数n使得n<2020&&n>2020
通过科学计数法绕过num="3e3",经过intval()解析,结果如下图
这个绕过只在较低php版本有效
PHP intval()函数详解,intval()函数漏洞原理及绕过思路_intval函数-CSDN博客
第二步 绕过md5
要求一个字符串的MD5值等于字符串本身
这个比较使用了==,是弱类型判断,也可以通过和第一步差不多的思路,科学计数法0==0绕过。故只要我们找出0e开头且MD5值也是0e开头的字符串即可。
这一步自己写脚本可能得跑一段时间,但现在我们站在巨人的肩膀上,找到了符合这个条件的字符串 0e215962017
第三步 绕过空格和cat
先ls查看flag位置
这一步就比较简单了,空格可以使用$IFS$9代替
cat可以使用tac,head,tail,nl替代
linux中查看文件命令和空格绕过_$ifs$9-CSDN博客