CTFSHOW 爆破 web入门21-28

爆破

必备工具

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值