Web21
开启环境后,访问网站,发现存在一个账号密码验证,如图:

因此我们尝试使用Kali自带的Burp Suite抓包工具,抓个包看看;
如果我们尝试输入用户名:admin 密码:123时,对应发送的请求包如图:

此时我们发现存在一个字段Authorization,他的值为Basic + Base64编码组成,
我们对Base64编码进行解密:

此时不难发现,该Base64编码即为我们输入的[用户名:密码]进行Base64编码后得到的;此时YWRtaW46对应的是admin,MTIz对于的是123;
我们猜测账号名称就是admin,因此我们只用尝试对密码进行爆破,我们使用Burp Suite的Intruder模块进行爆破;我们需要选中密码对其添加标记$;

接下来我们需要设置Intruder模块中的Payloads选项:首先需要指定一个用于爆破密码的字典,这里大家可以下载我给出的字典https://www.aliyundrive.com/s/YCApNTrhgHN;下载完成后进行导入,如图:

接下来,我们还需要设置Payloads选项中的Payload Processing(有效载荷处理)选项,让我们指定的爆破列表,经过我们设置的处理方式,再进行爆破;
这里我们根据题目要求,需要将密码进行Base64编码,所以我们添加一个Encode选项并制定编码格式为Base64 如下图:

然后我们还需要取消符号再编码,因为我们不需要将Base64编码后的符号转换为其他编码格式;

最后我们点击开始爆破即可:

ctfshow{677e5bc0-02c4-4517-9322-03ced705011f}
Web22
推荐用OneForAll爆破 项目地址:GitHub - shmilylty/OneForAll: OneForAll是一款功能强大的子域收集工具
或者用在线子域名爆破网站:http://z.zcjun.com/

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";
}
}
}
}
?>

然后进行get传参即可得到答案:

ctfshow{4d49305d-5fd1-427e-b184-06616a16c0dc}