爆破
必备工具
yakit(burpsuite)等抓包工具
web21
贴心的为我们准备了爆破字典,下载下来。
进入页面发现是一个登陆页面 抓包发现 既不是get直接通过链接传参 也不是post传参
请求了一下 响应包提示我们需要admin的用户名和密码 用户名大概率是admin了 那我们爆破密码就可以了 但是这里传参有点特别 一开始我还没找到在哪传参 后来发现Authorization这里有点奇怪 应该是编码或者加密了?这里是爆破篇应该不会在加密上太为难我们 试试base64解密
发现 确实是我们刚刚传的参数 以 账号:密码这样的格式 然后base64编码一下
那我们fuzz一下
因为爆破字典比较小 也不会再用了 我们选择插入临时字典就好了
然后把官方给我们准备的字典复制进来
然后就是这样了
但是别忘了 admin:还需要base64编码一下奥
选择admin:编码 替换
然后选择我们字典这里 选择base64编码。切记 不要直接全部一次性包括admin:一起选上 然后编码 这样会导致当成文本了 分开奥
一切正常的话 应该如下图所示
然后发送请求
因为字典里的数据不多 一下就出结果了
看看这条响应200的
就可以拿到我们的flag了
web22
也是一道失效了的题目
虽然这里失效了 但是不妨碍我们学习一下
在yakit首页的右侧工具箱就有我们的子域名收集
在里面输入域名就会才是收集 给我们返回结果了 在很多时候比直接爆破更高效
随便截取了一段结果
web23
虽然是爆破里的题目 但是题目提示我们不要爆破 是让我们不要盲目爆破吗 要注意结合实际情况吗 哈哈不知道
来看看这道题吧。
这是一段php代码 看起来似乎要让get请求的token还得经过一次md5之后依然满足条件才能拿到flag 但是这个条件估计也不是能猜到的 不过我发现这里有个intval 把str转换成int类型 如果这个str本身里不是纯数字 那么经过intval之后应该就会报错 所以我们大胆假设 这个token只是纯数字的输入 不然这里都通不过测试员的测试!那就尝试1-10000爆破一下吧
我们请求一个token=1 然后开始抓包
然后用yakit给我们提供的语法糖 {{int(1-10000)}} 当然也可以自行研究和修改 然后响应大小选择降序 就找到我们需要的数字了 就是422
然后查看token=422的响应 就可以拿到我们的flag了
web24
看题目 需要使我们get请求的r参数满足指定条件
但是这里的mt_srand和mt_rand是我比较陌生的 搜索一下
找到一篇这样的博客PHP伪随机数问题-腾讯云开发者社区-腾讯云
原来这涉及到伪随机数的概念 生成的伪随机数 生成序列是可以预测的 而这里又给了我们固定的种子 那我们也得整个php模拟一下这种情况了 看了一个师傅的wp 这个序列的生成还和版本有关 php8.2.9是可以拿到正确结果的版本
贴一个php下载链接
PHP For Windows: Binaries and sources Releases
我下了这个
解压之后 在php路径下 创建test.php 保存 内容如下
<?php mt_srand(372619038); echo mt_rand(); ?>
然后在当前php路径命令输入php test.php
就获得了结果1155388967
然后我们url/r=1155388967 就可以拿到结果了!
web25
这一次的乍一看复杂好多 没事!要充满信心。
我们先看这句吧
又和上一道题一样有mt_srand 但是这个种子 我们似乎没办法猜测 因为我们不知道flag是什么 他截取了对flag进行md5之后的的前8位 再进一步变成16进制的 看到这里 感觉很迷惑 但是既然这是爆破题 大概可以猜到 应该是爆破种子了 但是纯爆破要太久了 题目都超时了呗!看看还有有利信息吧! 往下继续看 会发现他会打印rand 那我们故意使得r=0 那么就可以得到第一次的mt_rand的结果 只要把rand取反就好了
这里我第一次拿到的rand是-254296287 那么mt_rand就是254296287 每个师傅的flag应该不一样 所以拿到的不一样 不要担心
然后用师傅们推荐的工具 php_mt_seed
在kali中输入
git clone https://github.com/openwall/php_mt_seed
接着
cd php_mt_seed
再编译一下
make
再输入
time ./php_mt_seed 254296287
然后出现了俩可能的结果 为什么要选这俩呢 因为抓包 看响应包可以发现 网站使用的版本php版本就是7.1.0+的
两种都试一下 并且结合题目 这里参考了这位师傅的博客
ctfshow-web入门-爆破(web25)及php_mt_seed工具的安装与使用_ctfshow web25-优快云博客
我们创建web25.php 内容如下
<?php mt_srand(639491019); $rand = mt_rand(); $rand1 = mt_rand(); $rand2 = mt_rand(); echo $rand1+$rand2,"\n"; mt_srand(2167878441); $rand = mt_rand(); $rand1 = mt_rand(); $rand2 = mt_rand(); echo $rand1+$rand2; ?>
然后这是我得到的结果
这是我们的两次可能的结果
从1-4分别 第一次随机数结果、 第二次随机数结果、 第三次随机数结果、 第二次随机数结果+ 第三次随机数结果
因为题目要求token为第二次随机结果+第三次随机结果的和才打印flag
然后我们都测试一下 注意了 记得传参r=第一次随机数的结果 我就是忘记传 一直没出结果 后来才发现
成功拿到了flag
web26
看到有默认提示 都输入进去抓包看看。嗯 无事发生。这里请求的东西 可以尝试爆破一下密码好了
这个地址和端口 学过一些mysql的小伙伴应该知道 localhost是本机地址 3306是mysql配置默认的端口 这俩似乎不用爆破 然后这个库ctf然后也很合理 用户名root感觉也很合理 那就是爆破pass了 尝试一般的字典爆破过了几分钟都没出 应该不是纯爆破 再找找线索
尝试发现什么都不填 直接点确定 抓包一下 居然说连接成功?里面还有flag!这是故意的还是不小心的!
看了一个师傅的wp 原来也是可以爆破出来的 密码是7758521
web27
这样一个页面 看起来 似乎得想办法拿到正确的学号和密码
然后发现有一个盲点 可以点击录取名单下载名单
下载之后发现是身份证中间隐藏了八位
然后点录取名单下面的学生学籍信息查询系统
看起来 有姓名和身份证号码 就可以查询录取了 那么也就是让我们爆破中间八位了 对了一下自己的身份证 中间这八位就是出生年月
那就这样 抓包 尝试爆破一下
以下是我生成生日字典的东西python代码 当然也可以直接尝试用python以post请求爆破 我生成字典 也许下次还可以用
def generate_birthday_dict(start_year=1900, end_year=2025, filename="birthday_dict.txt"): """ 生成出生年月字典 (YYYYMMDD格式) 参数: start_year: 起始年份 (默认1900) end_year: 结束年份 (默认2025) filename: 输出文件名 """ with open(filename, 'w') as f: for year in range(start_year, end_year + 1): for month in range(1, 13): # 确定每个月的天数 if month in [4, 6, 9, 11]: max_day = 30 elif month == 2: # 闰年判断 if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): max_day = 29 else: max_day = 28 else: max_day = 31 for day in range(1, max_day + 1): # 格式化为YYYYMMDD,保证两位数月份和日期 birthday = f"{year}{month:02d}{day:02d}" f.write(birthday + "\n") print(f"字典已生成,保存到 {filename}") # 使用示例(生成1950-2025年的生日字典) generate_birthday_dict(start_year=1950, end_year=2025)
生成出来的文件 用yakit新增字典 然后右键选择生成好的字典爆破
爆破出来的结果 点击查看全部
然后
确定
进行爆破 最后跑出来的结果
然后根据提示 学号02015237 然后根据提示 初始密码是身份证号码 输入 然后拿到flag
web28
观察了一下 似乎这个url这里也许是入口 路径都是数字 尝试一下纯数字爆破?但是这个2.txt感觉未必是这个 所以先确定一下目录的存在?那就尝试/0/1这俩地方都试试0-100的爆破
然后跑出来了
不要忘记这个/ 我就是少了这个 一开始没跑出来了
然后访问这个/72/20 成功拿到了flag