CTFSHOW-Web入门-暴力破解
web21 基于Basic的爆破
暴破什么的,都是基操
访问网站,出现如下页面:
这里则是 HTTP 的 Basic 认证。我们输入用户名 admin 密码 随便输入 然后使用 BP 进行抓包。
在发往服务器的请求中,添加了属性 Authorization
其值为 Basic YWRtaW46YWRtaW4xMjM=
其中 Basic 后方的为 Base64 编码。
我们使用 BP 自带的 Decode 模块进行解码,观察其特征:
发现是 用户名:密码
的形式,知道该形式之后我们将其发送至暴破模块 Intrude
选择 默认的 Sniper
狙击手模式,然后在选择PAYLOAD的时候,加载题目给的字典(注意:对于新版本的BP,字典不能是中文,需要修改为英文)。
加载题目给出的字典,接着添加前缀 admin:
之后添加 Encode
模块为 Base64 编码即可。
在设置PAYLOAD的底部找到 Payload Encoding
默认会自动对 特殊字符进行URL编码,这里我们将前面取消勾选即可。让其不对 =
进行URL编码。
最后点击 Start attack
即可,根据页面返回长度的不同,暴破成功的响应长度为 237,暴破失败的长度为313。
经过解密之后的密码为:shark63
web22 基于子域名的爆破
域名也可以爆破的,试试爆破这个ctf.show的子域名
利用在线子域名爆破,发现了域名 flag.ctf.show
web23 基于数学的爆破
访问网站,源码如下:
1 |
|
通过代码审计发现:
- 要第2位与第15位与第18位相同 (因为下标是从0开始)
- 要第2位+第15位+18位 / 第2位 的结果 等于 第32位。
这里我们编写脚本进行枚举:
1 |
|
最终符合条件的有:422
和 1202
web24 随机种子
Hint: 爆个🔨
访问网站,源码如下:
1 |
|
mt_srand()
函数的作用是播下一个更好的随机数发生器种子,当有了随机数种子的时候,那么每次运行得到的随机数也是固定的。
比如种子 372619038
得到固定随机数为 1155388967
(当然可能PHP的版本有所差异,题目是PHP7.3的版本)
这里我们本地使用 PHP7.2 进行测试得到的随机数为 1155388967
,测试代码如下:
1 |
|
web25 随机种子爆破
Hint: 爆个锤子,不爆了
题目源码如下:
1 |
|
源码解读如下:
由于种子是由 FLAG 的md5值,截取前8位转为十进制生成的,我们并不知道随机数种子是多少,因此这里需要使用php_mt_seed
进行种子爆破。
首先我们先传入?r=0
会得到一个负的随机数
1 | # 当我们传入 ?r=0 的时候,此时获得的随机数 192346317 |
我们通过生成的随机数暴破出随机数种子,这里需要使用到 php_mt_seed
工具。
工具的安装地址:https://github.com/openwall/php_mt_seed
通过在服务器的响应头中发现服务器的PHP版本为:php7.3
接着使用 php_mt_seed
工具根据第一次生成的随机数枚举出 种子,我这里第一次生成的随机数为 192346317
,
由于服务器的PHP版本为 php7.3 因此我们这里得到的种子十进制为 1142351452
,十六进制为 0x4416e65c
,这里得到了随机数的种子。
这里我们准一个 PHP7+ 的环境,运行如下代码(模拟服务器生成随机数):
1 |
|
以上源码运行之后得到 2274592836
,因此题目的mt_rand()+mt_rand()
的结果为 2274592836
。
题目源码:
1 | if($_COOKIE['token']==(mt_rand()+mt_rand())){ |
添加Cookie属性 token
字段值为:2274592836
,并传入参数r
其值为 192346317
这里为什么传入r=192346317
呢,观察如下代码:
1 | # 第一次随机出来的值为 192346317, 当我们传入?r=192346317 - 第一次随机生成的值 = 0 |
web26 空密码登陆
访问靶机出现如下页面:
使用 BP 进行抓包,这里因为后端判断逻辑问题,将参数的值全部清空即可得到FALG。
web27 身份证枚举
访问网站出现如下页面,发现是个教务管理系统,并在首页中发现两个功能:录取名单、学生学籍信息管理系统
点击录取名单即可下载一张Excel表格,内容如下:
点击学生学籍信息查询系统出现如下页面:
我们在学生学籍信息查询系统中可以发现,学生可以通过 姓名和身份证号进行查询。那么我们从录取名单中发现了学生的名称以及身份证号,只不过身份证号是对生日信息打码的。那么我们可以不可以对身份证号中的生日进行爆破呢?当然可以。
这里使用 BP 自带的功能进行暴破,首先进行抓包:
将其中的生日作为变量,接着加载PAYLOAD进行爆破
这里我们从 1990年1月1日到2023年12月31日。并设置格式为 yyyyMMdd
通过响应长度的不同,判断姓名为高先伊 身份号为621022199002015237
这里我们直接进行登陆测试:
得到学号以及初始密码,利用该密码登陆到教务系统。
web28 目录枚举
访问网站出现如下页面:
根据目录的结构,这里可能需要对目录进行爆破(删除2.txt文件)。我们还是使用BP进行暴破,先抓取该请求并将其发送至Intrude
模块。
将 Attack Type
设置为 Cluster bomb
模式,同时将两级目录分别设置为变量。
这里分别为以上两个变量设置 PAYLOAD 类型为 Numbers,值为1-100。
通过响应内容的不同或者通过状态码的不同,判断FLAG的页面: