查看robots.txt 找到/fAke_flagggg.php
显然这是个假的flag,但是我们在header处发现了fl4g.php
近来发现中文全部变成了乱码
插件转成utf8后正常显示
- 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("去非洲吧");
- }
- ?>
第一步 绕过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博客