Buuoj 刷题 Day2
今天是第二天,我们现在开始各种题都做一下Basic,Crypto,Misc,Web通杀
你竟然赶我走
解压打开,发现是一张表情包

直接老套路,Stegsolve走一波
一打开Format,哦豁~

整理一下,这题的答案就是
flag{stego_is_s0_bor1ing}

好的,下一题😎
大白
解压打开一看,只有半张图片了

那我们要想办法恢复他原来的图片咯
老套路走一波,先看一下二进制码有没有被修改
一打开010editor,哦豁~

CRC校验有问题
结合题目,我们改一下高度

保存退出我们就能看到完整的大白了

所以,flag{He1l0_d4_ba1}
基础破解
OK,又到了爷最喜欢的破解题

直接ARCHPR走一波
好了,他已经没有了

打开压缩包,哎,还有?

好的,base64走一波

这次的答案就是这个
flag{70354300a5100ba78068805661b93a5c}
乌镇峰会种图
直接下载下来的就是一张图片?

老套路,大家都懂

就这,就这?flag{97314e7864a8f62627b26f3f998c37f1}
那我们要向高难度挑战,我要做Web题
[HCTF 2018]WarmUp 【WEB】
说时迟那时快
我已经打开靶机了

然后进入靶机,我们只剩下滑稽🤪

既然是代码审计,直接打开F12

往网址加入被隐藏的source.php
之后我们就可以看到代码了

然后我们再次跳转到hint.php

没有flag,我们重新回去审计代码
1 | if (! empty($_REQUEST['file']) //$_REQUEST['file']值非空 |
这段代码告诉我们需要满足三个条件
- 值为非空
- 值为字符串
- 能够通过checkFile()函数校验
否则打印滑稽🤪
查看上面那段的判断函数
1 | highlight_file(__FILE__); //打印代码 |
我们会发现里面含有四个if判断语句
- 第一个 if 语句对变量进行检验,要求
$page为字符串,否则返回false - 第二个 if 语句判断
$page是否存在于$whitelist数组中,存在则返回true - 第三个 if 语句判断截取后的
$page是否存在于$whitelist数组中,截取$page中'?'前部分,存在则返回true - 第四个if语句判断url解码并截取后的
$page是否存在于$whitelist中,存在则返回true
若以上四个 if 语句均未返回值,则返回false
有三个 if 语句可以返回true,第二个语句直接判断$page,不可用
第三个语句截取'?'前部分,由于?被后部分被解析为get方式提交的参数,也不可利用
第四个 if 语句中,先进行 url 解码再截取,因此我们可以将?经过两次url编码,在服务器端提取参数时解码一次,checkFile函数中解码一次,仍会解码为'?',仍可通过第四个if语句校验。('?'两次编码值为'%253f')
构造url:
1 | http://<domain>:<port>/source.php?file=source.php%253f../../../../../ffffllllaaaagggg |

最后得到我们的flag{a67df2fc-6608-4e8a-93dc-e7b328136308}
结语
Emmm,看来是我太狂了,最后一题做到头皮发麻。
代码能力还是要继续加强了。
