web:[WUSTCTF2020]朴实无华

题目

点开页面显示如下

页面显示了一行报错:Cannot modify header information - headers already sent by (output started at /var/www/html/index.php:3) in /var/www/html/index.php on line 4

意思为不能修改报头信息-报头已经发送(输出开始于/var/www/html/index.php:3)在/var/www/html/index.php第4行

查看源代码也没有其他线索,用dirsearch扫一下看看

扫到一个robots.txt,访问之后页面显示如下

访问fAke_flagggg.php,显示如下

查看源码什么也没有,抓包试一下

访问这个页面,出现了乱码

用的火狐,按alt查找修改文字编码就可以了,显示如下

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

level1代码中,intval()函数将num转换为整数类型,并进行比较判断,如果num小于2020且$num+1大于2021,则输出消息"我不经意......"

关键在于intval函数,intval函数参数填入科学计数法的字符串,会以e前面的数字作为返回值而对于科学计数法+数字则会返回字符串类型

通过

level2是md5,找到一串数字使它md5加密后的数值和原来的相等,php具有弱类型,==进行比较的时候会先将字符串类型转化为相同,再比较

典型的md5绕过,绕过原理就是加密前后都是0e开头的字符串

通过

level3代码中

  • 使用**strstr($get_flag, " ")函数检查$get_flag是否包含空格** 。如果$get_flag中不包含空格,则执行下面的代码;否则,输出一条消息"快到非洲了"并终止程序的执行。

  • 如果$get_flag中不包含空格,则使用str_ireplace("cat", "wctf2020", $get_flag)函数将$get_flag中的所有"cat"替换为"wctf2020",并将结果重新赋值给$get_flag

很明显,这里过滤了cat命令,但是查看文件的linux命令还有很多,例如tac less more tail都可以作为替代。

空格绕过可以使用**$IFS$9**

已经知道了flag文件在当前目录下

所以最终的payload为

?num=2e4&md5=0e215962017&get_flag=tac$IFS$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag

参考文章链接:

[WUSTCTF2020]朴实无华-CSDN博客

练[WUSTCTF2020]朴实无华_生而逢时的博客-CSDN博客

相关推荐
有梦想的刺儿8 分钟前
webWorker基本用法
前端·javascript·vue.js
cy玩具29 分钟前
点击评论详情,跳到评论页面,携带对象参数写法:
前端
qq_390161771 小时前
防抖函数--应用场景及示例
前端·javascript
John.liu_Test2 小时前
js下载excel示例demo
前端·javascript·excel
Yaml42 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
PleaSure乐事2 小时前
【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案
前端·javascript·react.js·前端框架·webstorm·antdesignpro
哟哟耶耶2 小时前
js-将JavaScript对象或值转换为JSON字符串 JSON.stringify(this.SelectDataListCourse)
前端·javascript·json
getaxiosluo2 小时前
react jsx基本语法,脚手架,父子传参,refs等详解
前端·vue.js·react.js·前端框架·hook·jsx
理想不理想v2 小时前
vue种ref跟reactive的区别?
前端·javascript·vue.js·webpack·前端框架·node.js·ecmascript
知孤云出岫2 小时前
web 渗透学习指南——初学者防入狱篇
前端·网络安全·渗透·web