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都可以作为替代。

空格绕过可以使用**IFS9**

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

所以最终的payload为

复制代码
?num=2e4&md5=0e215962017&get_flag=tac$IFS$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag

参考文章链接:

[WUSTCTF2020]朴实无华-CSDN博客

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

相关推荐
q***d173几秒前
前端增强现实案例
前端·ar
IT_陈寒1 分钟前
Vite 3.0 重磅升级:5个你必须掌握的优化技巧和实战应用
前端·人工智能·后端
JarvanMo6 分钟前
Flutter 3.38 + Firebase:2025 年开发者必看的新变化
前端
Lethehong15 分钟前
简历优化大师:基于React与AI技术的智能简历优化系统开发实践
前端·人工智能·react.js·kimi k2·蓝耘元生代·蓝耘maas
华仔啊24 分钟前
还在用 WebSocket 做实时通信?SSE 可能更简单
前端·javascript
鹏北海1 小时前
多标签页登录状态同步:一个简单而有效的解决方案
前端·面试·架构
_AaronWong1 小时前
基于 Vue 3 的屏幕音频捕获实现:从原理到实践
前端·vue.js·音视频开发
孟祥_成都1 小时前
深入 Nestjs 底层概念(1):依赖注入和面向切面编程 AOP
前端·node.js·nestjs
let_code1 小时前
CopilotKit-丝滑连接agent和应用-理论篇
前端·agent·ai编程
报错小能手1 小时前
计算机网络自顶向下方法57——网络安全 基础与密码学原理
计算机网络·安全·web安全