http://ctf5.shiyanbar.com/web/kzhan.php
随便提交一些东西 没有回显 源代码没提示 直接bp
发现可疑的source 变成1看看 go
暴源码了
分析代码:的条件
首先判断cookie:getmein 是否为空 (我们从bp这里看是没有这个cookie的,需要自己构造) 接着判断 你提交的username必须是admin password不能是admin
最后一个条件:你的cookie值要和你服务器未知的secert +提交的username和password组成的md5值相等 这样就得到了flag
问题是你不知道这个secert值 只知道
是15位的 如果我们知道这个值, 直接自己md5加密就可以算出cookie:getmein
我们再看 你的password不能是admin 为什么有这个条件:如果你的password是admin
我们看返回是数据包有一个
源码:
Sample-hash的值就是secert+admin+admin字符串的md5加密:如果password是admin:那cookie:getmein就和Sample-hash相等了。所以这道题有点坑。 需要用到:
hash长度拓展攻击 简单来说 :正常我们知道一个字符串a,可以通过md5加密得到密钥
现在我们可以在不知道a的字符串具体字母:(前提知道字符串a的md5值和字符串a的长度) 可以算出字符串(a+b)的md5值 b为你自己精心构造的一个字符串。具体原理我放几个链接供参考。
http://blog.csdn.net/qq_35078631/article/details/70941204
http://blog.csdn.net/wy_97/article/details/76269819
https://www.cnblogs.com/p00mj/p/6288337.html
看我们这道题就是这个原理 你已知secert+adminadmin的md5值 还知道 secert的长度,
很明显,你就已经知道secert+adminadmin的长度为20 这就相当于我们上面讲的a 我们再构造一个精心准备的b 就可以算出 (secert+adminadmin(a)+b)的md5值,我们题里面password不能为admin 但必须是已admin开头的字符 因为前提是已知secert+adminadmin的md5值 b后面的构造参考我的链接 讲的很详细,我就不多说了
最后附上 password:admin\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00admin 后面的admin可以修改为任意字符串,前面的不能改
admin%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%c8%00%00%00%00%00%00%00admin
然后计算md5值 注意:我计算的不是我这个字符串的md5值 。原理看链接吧。
算出cookie:getmein MD5:e18dfd8404515016d3aeeea2aa196909
用bp添加 得到flag。
Go
The flag is CTF{cOOkieS_4nd_hAshIng_G0_w3LL_t0g3ther}