WEB狗的各种绕过 —— 【WUST-CTF2020】朴实无华

文章目录

        • 吐槽
        • 题目
        • robots.txt
        • 响应头里の秘密
        • 游戏才刚刚开始之各种绕过
          • intval函数绕过
          • MD5弱类型
          • 再见了空格

吐槽

这道题写的我跌宕起伏,最后一步赶上饭点,吃了个饭回来一血没了[哭]
最后赶工赶了了三血,提交的时候好像有人和我相差几秒,当时没有听到Triple kill的音效,还以为三血都没拿到,失落了好一会~
咳咳,干正事!

题目

题目一进去,简单的几个字hack me
第一感觉是在哪里做过,但是又想不起来
所以第六感告诉我,这道题有搞头。搞不好可以拿一个一血

robots.txt

瞄了一会,在前端发现了一个人间极乐bot其实就是题目,我没看到标签页
WEB狗的各种绕过 —— 【WUST-CTF2020】朴实无华_第1张图片
bot字眼,果断想到robots.txt网站的爬虫规则
访问http://101.200.53.102:23333/robots.txt
在这里插入图片描述
找到了下一步的大门,写着fake_flag我已经做好心里准备了

响应头里の秘密

来到http://101.200.53.102:23333/fAke_f1agggg.php
里面就写着一句flag{this_is_not_flag},连wctf2020都没有,肯定没戏
F12看了看网络包,在响应头里,发现有一个look_at_me字段
WEB狗的各种绕过 —— 【WUST-CTF2020】朴实无华_第2张图片
看到fl4g.php,超开心!
WEB狗的各种绕过 —— 【WUST-CTF2020】朴实无华_第3张图片

游戏才刚刚开始之各种绕过

满怀期待进到http://101.200.53.102:23333/fl4g.php竟然叫我去非洲!?
WEB狗的各种绕过 —— 【WUST-CTF2020】朴实无华_第4张图片

intval函数绕过

可以看到一共有三层,第一层是intval函数的关卡
WEB狗的各种绕过 —— 【WUST-CTF2020】朴实无华_第5张图片要求GET传参num,而且num的值既要小于2020,加1后又要大于2021…
如果传入的num不满足条件,就会变成穷人
如果不传入num,就要去非洲
WEB狗的各种绕过 —— 【WUST-CTF2020】朴实无华_第6张图片
为了绕过这一点,我从某歌上找来了一张图片进行研究
WEB狗的各种绕过 —— 【WUST-CTF2020】朴实无华_第7张图片
里面有提到很关键的地方:

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

也就是说,如果intval函数参数填入科学计数法的字符串,会以e前面的数字作为返回值,这里是1
那么当对字符串'1e10'+1是不是可以将字符串类型强行转换成数字类型呢?

为了验证这个猜想,本地测试一下


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

运行结果:

intval('2e4') = 2
'2e4'+1 = float(20001)
intval('2e4'+1) = 20001
you pass!

看来这样绕过是可以的!!

WEB狗的各种绕过 —— 【WUST-CTF2020】朴实无华_第8张图片
立马进行实践,构造url:http://101.200.53.102:23333/fl4g.php?num='2e4'
回车!然后变成穷人了…

后来猜测可能是传入num值后台会自动转成字符串,由于开启了error_reporting(0);,所以就算报错咱也不知道~
于是重新构造url:http://101.200.53.102:23333/fl4g.php?num=2e4
WEB狗的各种绕过 —— 【WUST-CTF2020】朴实无华_第9张图片
有劳力士了!

MD5弱类型

来到第二层
在这里插入图片描述
居然要求传入一个叫md5的参数,然后对其进行MD5加密,并且加密前后的值要求相等==

众所周知,php具有弱类型,== 在进行比较的时候,会先将字符串类型转化成相同,再比较

示例:

var_dump("0e123456"=="0e4456789"); //true

转换的规则为,若该字符串以合法的数值开始,则使用该数值,否则其值为0

因此,根据这一点,可以遍历出一个字符串,使得进行MD5加密前是'0e'开头的,MD5加密后也是'0e'开头的,这样子,就能保证加密前后的值是相等==的了

在某歌上,找到满足条件的字符串'0e215962017'

构造url:http://101.200.53.102:23333/fl4g.php?num=2e4&md5=0e215962017
注意,这里不要加单引号,因为对于传入的参数,后端会转化成字符串类型,再run

WEB狗的各种绕过 —— 【WUST-CTF2020】朴实无华_第10张图片
有酒有菜了!!

再见了空格

终于要get_flag啦!
WEB狗的各种绕过 —— 【WUST-CTF2020】朴实无华_第11张图片
第三层的要求有点多,罗列一下:

  1. 要求传入参数get_flag,并且不能有空格
  2. 如果get_flag里面有cat,就会被替换成wctf2020
  3. 传入的get_flag会当作系统命令被执行

先不管那么多,先看看当前目录下都有什么
构造url:http://101.200.53.102:23333/fl4g.php?num=2e4&md5=0e215962017&get_flag=ls
WEB狗的各种绕过 —— 【WUST-CTF2020】朴实无华_第12张图片
看到了我们需要读的文件,那个最长的flllllaaaaaag

读文件一般使用cat,但是cat会被替换,所以可以使用tac

另外一点就是,无论哪个命令,后面接一个文件都需要先空格,即tac fllllaaaag,但是这里根据逻辑不能填空格

解决方法,利用$IFS$9替代空,原因戳这里

因此,构造最终的url:http://101.200.53.102:23333/fl4g.php?num=2e4&md5=0e215962017&get_flag=tac$IFS$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag

WEB狗的各种绕过 —— 【WUST-CTF2020】朴实无华_第13张图片

完整flag:wctf2020{s1mple_php_1s_v3ry_e@sy_and_here_1s_y0ur_stupid_flag_wish_u_h@ve_@_go0d_time_enj0y_1t}

WEB狗的各种绕过 —— 【WUST-CTF2020】朴实无华_第14张图片



分界线



**************************
Date2020/03/30           
CategoryWEB
AuthorVer.
**************************


在这里插入图片描述

有用就支持一下吧 !

你可能感兴趣的:([WEB]-CTF)