Web21
开启环境后,访问网站,发现存在一个账号密码验证,如图:
![](https://img-blog.csdnimg.cn/img_convert/0d6095128c278dc5a7b648885a71168b.png)
因此我们尝试使用Kali自带的Burp Suite抓包工具,抓个包看看;
如果我们尝试输入用户名:admin 密码:123时,对应发送的请求包如图:
![](https://img-blog.csdnimg.cn/img_convert/b321b7d689b76c3e8e991618c0f5ef14.png)
此时我们发现存在一个字段Authorization,他的值为Basic + Base64编码组成,
我们对Base64编码进行解密:
![](https://img-blog.csdnimg.cn/img_convert/0d4c9837b3c94b3db516c0f7d26c4076.png)
此时不难发现,该Base64编码即为我们输入的[用户名:密码]进行Base64编码后得到的;此时YWRtaW46对应的是admin,MTIz对于的是123;
我们猜测账号名称就是admin,因此我们只用尝试对密码进行爆破,我们使用Burp Suite的Intruder模块进行爆破;我们需要选中密码对其添加标记$;
![](https://img-blog.csdnimg.cn/img_convert/04cee5a559ce6d9d5089f4a6dd72ced9.png)
接下来我们需要设置Intruder模块中的Payloads选项:首先需要指定一个用于爆破密码的字典,这里大家可以下载我给出的字典https://www.aliyundrive.com/s/YCApNTrhgHN;下载完成后进行导入,如图:
![](https://img-blog.csdnimg.cn/img_convert/c3497a40f069831a90ce7ce2bd3e4a5f.png)
接下来,我们还需要设置Payloads选项中的Payload Processing(有效载荷处理)选项,让我们指定的爆破列表,经过我们设置的处理方式,再进行爆破;
这里我们根据题目要求,需要将密码进行Base64编码,所以我们添加一个Encode选项并制定编码格式为Base64 如下图:
![](https://img-blog.csdnimg.cn/img_convert/741c1e0f3b7ae72ab2b3694b192c34b0.png)
然后我们还需要取消符号再编码,因为我们不需要将Base64编码后的符号转换为其他编码格式;
![](https://img-blog.csdnimg.cn/img_convert/b8cb3aa08e73869bf90a0c0dc93fd579.png)
最后我们点击开始爆破即可:
![](https://img-blog.csdnimg.cn/img_convert/11b321b142778882a0ff8052b2a8da30.png)
ctfshow{677e5bc0-02c4-4517-9322-03ced705011f}
Web22
推荐用OneForAll爆破 项目地址:GitHub - shmilylty/OneForAll: OneForAll是一款功能强大的子域收集工具
或者用在线子域名爆破网站:http://z.zcjun.com/
![](https://img-blog.csdnimg.cn/img_convert/78889ffbf4f33a36ae389b569025b3e9.png)
flag{ctf_show_web}
Web23
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 11:43:51
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
include('flag.php');
if(isset($_GET['token'])){
$token = md5($_GET['token']);
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))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
echo $flag;
}
}
}else{
highlight_file(__FILE__);
}
?>
substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1))
// 表示$token的第2个字母与第15个字母与第18个字母要相同
intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))
//表示判断 $token的第2个数字+第15个数字+第18个数字的和 除以 $token的第二个数字 是否等于 $token的第32个数字
得到了题目条件之后,我们可以编写一个脚本:
<?php
$string = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
for($i=0;$i<strlen($string);$i++) {
for($j=0;$j<strlen($string);$j++){
$token = md5($string[$i].$string[$j]);
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))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
echo $string[$i].$string[$j]."\n";
}
}
}
}
?>
![](https://img-blog.csdnimg.cn/img_convert/a89f5f58a7c62939b544ab72fc27b8df.png)
然后进行get传参即可得到答案:
![](https://img-blog.csdnimg.cn/img_convert/1c00e0dd8b355bb7da43af76de85aa91.png)
ctfshow{4d49305d-5fd1-427e-b184-06616a16c0dc}