本文实验地址为:

https://www.hetianlab.com/expc.do?ec=ECID172.19.104.182014112610044700001&pk_campaign=toutiao-wemedia

进入实验机,打开http://www.ctfmisc.com/firstbl00d/后,我们仅仅看到一张图片以及一段大略的笔墨描述,除了网页的标题“BASE64 & MD5 & COOKIE”外,表面上没有任何有用的信息。

phpf12networkMISC 从题目中找信息 HTML

连续看题目,此时查看页面的Cookie也看不到任何有用的信息。

这里找不到非常是不是可以看一下图片本身是否携带了提示信息(比如Exif等)。
将网页中的xctf.jpg图片保存下来之后,通过Exif.py文件,通可以读取xctf.jpg中的Exif信息,如图所示:

创造了一个可疑的字符串RkFCQTgzOEY4QkIyOEU3NUZGNjVGMzRENEY5NDMwRDc=

这明显便是一个base64题目的标题也有解释我们解密一下在主机的桌面有一个JPK工具,打开JPK,输入RkFCQTgzOEY4QkIyOEU3NUZGNjVGMzRENEY5NDMwRDc=,在JPK的菜单中依次选择ASCII、Decode、Base64菜单项,就可以对其进行解码操作了,得到的结果为FABA838F8BB28E75FF65F34D4F9430D7。

把稳标题,这是md5加密,我们网页在线解密一下

套路防不胜防,xctf。

进行做题访问http://www.ctfmisc.com/firstbl00d/xctf.php,网页的内容仍旧没有有用的提示信息,不过网页的标题是COOKIE,因此我们可以查看网页的Cookie。
利用Google Chrome浏览器打开xctf.php页面,按下F12调出开拓者工具,切换到Network选项卡,按F5刷新页面,就可以看到Cookie里面的内容了,如图所示:

Cookie内容为next-step=bjN4dDV0M3A%3D,个中%3D为即是号“=”的编码,因此字符串也便是bjN4dDV0M3A=,这也是一个BASE64编码的字符串,再次利用JPK工具对其进行解码,得到明文n3xt5t3p。

我们访问http://www.ctfmisc.com/firstbl00d/n3xt5t3p 这个URL,创造页面跳转到了http://www.ctfmisc.com/firstbl00d/n3xt5t3p/index.html,这本是再正常不过的事情,不过根据页面的笔墨提示“你刚才瞥见KEY了吗”,是不是在跳转的过程中还有什么提示信息呢?同样在Google Chrome浏览器中按下F12打开开拓者工具,并切换到Network选项,再次访问http://www.ctfmisc.com/firstbl00d/n3xt5t3p页面,我们看到了两个301跳转,如图所示:

对付访问目录的URL,通过一次跳转来到index.html页面是正常的事情,但是这里居然有两次跳转,显然就不太正常了。
我们点击两个301跳转,看看里面都有什么信息。
我们看到的是,第二个301跳转的HTTP相应头信息中存在这样一个选项Set-Cookie:check=0,其他就没有什么分外的了。

这里须要发挥一下想象,我们访问的是n3xt5t3p,而终极跳转到的页面是n3xt5t3p/index.html,由于有两次跳转,也便是说在这中间还有一个页面。
由于之前访问的都是php页面,以是我们预测个中有一个index.php(是的,CTF比赛的时候便是须要大胆的去猜想,然后通过实际操作来进行验证)。
访问http://www.ctfmisc.com/firstbl00d/n3xt5t3p/index.php,没有涌现404缺点,而是跳转到了index.html,实际结果表明index.php页面是存在的。

结合上面的剖析,可能须要Cookie中的check=1时,访问index.php才不会进行跳转。

我们考试测验一下用,burp截包,然后我们把Cookie字段的check=0改为check=1,然后点击Forward按钮将HTTP要求发出去,如图所示:

此时,我们就可以在浏览器端看到进一步的提示信息了,提示信息如下:

WORD is a common english wordlen(WORD) = 4md5(WORD + '_heetian') = '84323c9b4fdb2539b4fb69b82b0189e7'FLAG = md5(WORD)

这里嗯!
看到flag了md5(WORD),但是彷佛须要解密。
利用python的hashlib库可以十分方便的进行MD5哈希值打算,对付4个字母的单词,我们可以通过暴力列举的办法,方便而又快速的找到上面的Flag。
将下面的内容保存为一个py文件,双击后等待一会就可以看到运算结果了。

import hashlibimport stringdef crackMd5(dst):dst = dst.lower()for a in string.lowercase:for b in string.lowercase:for c in string.lowercase:for d in string.lowercase:word = a + b + c +d + "_heetian"tmp = hashlib.md5(word).hexdigest()if dst == tmp:return wordreturn Noneifname== "main":raw_input(crackMd5("84323c9b4fdb2539b4fb69b82b0189e7"))

Python基于缩进来掌握语句块,如果直接复制运行时提示缺点,也可以访问C:\Misc\crackMd5.py来进行打算。
打算的结果为misc,如图所示:

这一类的题目不要以为得到了flag就轻松了,后面还有解密过程。
思维要严谨,不能总是看题目表象,真题每每没那么随意马虎得出答案。