CTF WEB入门 爆破篇
续上一篇信息收集篇,对应CTFshow WEB入门 爆破
目录
web21爆破账号密码
BurpSuite Intruder四种爆破方式
web22爆破子域名
web23爆破GET参数
web24爆破GET参数
web26抓包流量
web27爆破身份证
web28爆破目录
总结
web21爆破账号密码

需要账号密码才能登录。
随便输入什么用户名密码,抓包登录。这里输入111/111
发现抓的包,多了个Authorization字段(认证字段)

这里典型的base64特征,去解密看一下

发现就是对应的账号和密码
那我们转发到BurpSuite的intruder模块进行爆破
添加爆破点

设置payload,这里选用自定义迭代器,因为有自己的格式账号:密码

设置第一个位置,我这里为了节省时间只添加了一个admin(也可以使用自带的usernames字典,在添加那里)

设置第二个位置为‘:’

设置第三个位置,使用的是题目下载的字典

还要设置base64编码

并且取消URL编码

开始爆破,出现200状态码,查看得到flag

BurpSuite Intruder四种爆破方式
在WEB爆破中,BurpSuite intruder模块是非常经常使用的。这里学习介绍模块的四种爆破方式。
- Sniper狙击手模式
使用一组payload,依次爆破被标记的爆破点。依次爆破是指,如果是有多个爆破点,会先爆破第一个,不管其他爆破点的值。所以这种模式一般只设置一个爆破点,通常用于已知用户名,爆破密码的情况。
- Battering ram破城锤模式
使用一组payload,同时爆破被标记的爆破点。这里是指用的都是同一个payload,爆破的时候多个爆破点都是同一个值。
- Pitchfork音叉模式
多少个爆破点就对应多少个payload,同时爆破被标记的爆破点。这里指的是多个payload同时顺序执行。如果payload数量不相等一般会按照少的执行。
- Cluster bomb集束炸弹模式
同Pitchfork一样,有多少个爆破点就有多少个对应的payload,并且同时爆破被标记的爆破点。不同的是,执行的时候是根据多个payload的组合进行爆破,就比如payload1的第一个去匹配payload2的所有集合,执行后继续payload1的第二个去匹配。
web22爆破子域名
题目提示:域名也可以爆破的,试试爆破这个ctf.show的子域名
这里考察的是域名爆破,常用到的是Layer工具
直接使用Layer爆破子域名

看wp说是在 vip.ctf.show ,将鼠标悬停在标题处,但是现在已经不行了。题目也给了flag。
web23爆破GET参数

打开这里是一串代码,需要对代码进行审计
- error_reporting(0),将错误报告级别设置为0,表示不会显示任何错误或警告信息
- include一个flag.php文件,表示包含这个文件,可能里面包含了一些信息$flag
- 如果用户提供了token的GET参数值,会对其一系列处理
- 首先对token值进行md5加密处理,存储在新的$token中
- 然后对其检查:substr函数第一个参数是需要处理的值、第二个参数指从哪里分割(其列表值从0开始)、第三个参数是指分割多少个
- 这里检查token的第2位和第15位以及第18位是否相同
- 如果相同进入下一步,intval是将数值变为整数,这里进行计算
- (计算token的第二位+token的第15位+token的第18位) / (计算token的第二位) 是否等于token的第32位数值。
- 如果条件满足,输出$flag值
- 未提供token则返回文件源代码。
那么很明显,这里需要计算符合条件的token值,写个脚本
<?php
for($i = 0; $i < 10000; $i++){$token = md5($i);if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+intval(substr($token, 17,1)))/intval(substr($token, 1,1))===intval(substr($token, 31,1))){echo $i;
}}
}
?>

得到token=422,在网页输入token值,得到flag

web24爆破GET参数
怎么说,这题更像代码审计,不像爆破题目,但在这个专题里面就练练。

又是一串代码,继续代码分析
这里代码web23很像,这里传入参数r
着重解释一下mt_srand函数。
- mt_srand用于初始化随机数生成器,可以生成更高质量的随机数序列
- mt_rand函数生成随机整数
- 当随机数的种子是确定值时,mt_srand(确定值),那么mt_rand()得到的随机数也是确定的。
那么这里只需要获得mt_rand()的值就好了
<?php
mt_srand(372619038);
echo mt_rand();
?>

填入参数。获得flag

web26抓包流量
这里也不算一个爆破,就是抓包。
打开页面,同意协议,开始安装,出现一个安装页面

这里直接点确认无误,开始安装 没有反应
查看源代码,发现安装会跳转一个checdb.php,但是这里打不开这个页面
抓包看看,抓包抓到了这个页面的流量

什么不用填,直接发送请求,就能返回flag

web27爆破身份证
这里有点渗透感觉了
打开页面,是一个登录页面

这里登录的学号和密码可以想到尝试爆破,但是因为没有一个方向限制,可能爆破会没有所获。
这里还有另外两个:录取名单和学生学籍信息查询系统,发现录取名单是可以下载的,里面有姓名、专业以及打码的身份证号

在学籍信息查询系统中有需要学生姓名和身份证号码,那比爆破学号和密码,爆破身份证更有可能性,这里只需要爆破8位。

那开始爆破身份证,需要注意的是这里打码的字段刚好是出生年月日字段


开始爆破,字段最长的就是正确的身份证号621022199002015237

获得身份证号查询到学号

拿到学号和密码登录系统,获得flag

web28爆破目录

打开就是这个页面,没有发现别的目录。那我们对.ctf.show/进行目录扫描(因为这个一看是主目录,可以一步一步扫目录)
发现/0-100/目录,进一步扫描.ctf.show/1/,也发现一系列/0-100/目录;再进一步扫描.ctf.show/1/1,没有发现其他目录。



那我们可以判断在某一个.ctf.show/x/x目录中有结果。那我们可以使用BurpSuite来爆破得出每一个目录的response再查看是否有不同的response。


爆破得到一个200状态码的请求,查看得到flag

总结
- 一般爆破常使用BurpSuite,这里学习了爆破密码、身份证号以及目录,要学习BurpSuite四种爆破方式的区别,正确使用。
- 爆破子域名,使用到Layer这个工具
- 爆破GET参数,要学会代码审计,利用脚本获取正确的参数值。
