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博客

相关推荐
禅思院42 分钟前
前端部署“三层漏斗”完全指南:从CI/CD到自动回滚的工程化实战【开题】
前端·架构·前端框架
快乐肚皮1 小时前
深入理解Loop Engineering
前端·后端
风骏时光牛马2 小时前
VHDL十大经典基础功能设计实例代码合集
前端
hunterandroid2 小时前
Notification 通知:从基础到渠道适配
前端
孟陬2 小时前
Claude Code 巧思 `Ctrl+S` 暂存键
前端·后端
PedroQue992 小时前
V1.6.1性能优化:高频路径提速与代码精简
前端·uni-app
猩猩程序员2 小时前
将 LiteLLM 迁移到 Rust —— 构建最快、最轻量的 AI Gateway
前端
lichenyang4532 小时前
JSBridge 分发升级:为什么要从 if-else 变成 Registry > 这是「ASCF 架构升级」系列的第 3 篇
前端
码上天下2 小时前
流式响应断了,前端怎么自动重连续传
前端
anyup2 小时前
来简单聊聊鸿蒙开发,万元奖金的事~
前端·华为·harmonyos