Web入门(21-28)
Web21
1、看到题目爆破,进入靶场发现需要登入

2、打开bp的拦截,用户名和密码随便输入


3、看到Basic64编码,发现是用户名和密码的加密

4、将包发送到intruder

5、给加密的用户名和密码添加


6、爆破配置像我这样,密码字典包要载入Position:3



需要进行Base64编码


取消Palyload Encoding编码 因为在进行base64加密的时候在最后可能存在 == 这样就会影响base64 加密的结果

7、进行爆破

8、看到status code为200,代表成功

9、看请求响应的包,找到flag

flag为:ctfshow{ca36d1e4-22c6-4a44-8944-6d055055ae37}
Web22
(题目环境出问题了)
1、flag{ctf_show_web}
Web23
1、需要get一个token满足条件就可以出flag,这道题目我们需要写一个脚本爆破
<?php
// 高效爆破脚本
// 直接生成满足条件的MD5哈希可能更快
echo "高效爆破脚本\n";
echo "================\n\n";
// 我们知道条件:
// 1. 第2、15、18位字符相同(设为X)
// 2. 第32位字符必须是数字3
// MD5哈希是32位十六进制字符(0-9, a-f)
$found = false;
$startTime = microtime(true);
// 我们直接生成随机输入并检查
// 使用更随机的方法
for ($attempt = 0; $attempt < 50000000; $attempt++) {
// 生成随机输入
$input = uniqid(mt_rand(), true) . microtime(true) . mt_rand();
$token = md5($input);
// 快速检查:先看最后一个字符
if (substr($token, 31, 1) != '3') {
continue;
}
// 检查三个字符是否相同
$char1 = $token[1];
$char14 = $token[14];
$char17 = $token[17];
if ($char1 === $char14 && $char14 === $char17) {
// 验证数学条件(虽然应该是3,但再检查一次)
if ((intval($char1) + intval($char14) + intval($char17)) / intval($char1) == 3) {
echo "成功!找到符合条件的输入\n";
echo "输入值: " . $input . "\n";
echo "MD5哈希: " . $token . "\n";
echo "验证:\n";
echo " 位置[1]: " . $char1 . " (索引1)\n";
echo " 位置[14]: " . $char14 . " (索引14)\n";
echo " 位置[17]: " . $char17 . " (索引17)\n";
echo " 位置[31]: " . $token[31] . " (索引31)\n";
echo "\n用于获取flag的URL参数: ?token=" . urlencode($input) . "\n";
$found = true;
break;
}
}
// 进度显示
if ($attempt % 1000000 == 0) {
echo "尝试次数: " . number_format($attempt) . "\n";
}
}
if (!$found) {
echo "\n未找到符合条件的token,请扩大搜索范围或尝试其他方法。\n";
}
$endTime = microtime(true);
echo "\n总执行时间: " . number_format($endTime - $startTime, 2) . " 秒\n";
?>
2、爆破出token

3、将token写入题目url得到flag
flag为:ctfshow{5f496df4-900b-42a9-b7b5-f08fdd5b8b76}
Web24
1、伪随机数,bp爆破要很久,直接脚本爆破
<?php
mt_srand(372619038);
$first_rand = mt_rand();
echo "种子: 372619038\n";
echo "第一个随机数: " . $first_rand . "\n";
echo "URL参数: ?r=" . $first_rand;
?>
2、爆破出r

3、写入题目的url,得flag
flag为:ctfshow{77c89771-688f-443c-a9c7-4b5744443151}
Web25
1、伪随机数题目,分析代码,传参r=0,得到随机数的负数,不同靶场r=0不同

2、在kali中使用php_mt_seed工具,将他克隆下来,定位到php_mt_seed目录里,make后就可以用了

3、通过F12抓到了php版本

4、利用php_mt_seed工具得到seed,只要对应版本的seed

5、利用脚本得出r和token,对应版本的seed都可以试试


6、将得到的r和token,写入请求,得flag

flag为:ctfshow{a9face06-5227-45a3-87b3-2670cc095f5e}
Web26
1、打开看到一个界面,同意后是填写安装界面

2、打开bp,进行抓包

3、看到checkdb.php,这是进入数据库的地址,转发,看到最后一行,flag在里面

ctfshow{90f6e7bb-56f4-4d60-8fb1-749758b3cc78}
Web27
1、打开是一个登录系统,需要账户密码

2、看到下面的录取名单,打开下载了一个文件;学籍查询系统,打开是录取查询

3、文件打开,可以看到姓名和身份证号,但是出生日期被隐藏了,我们需要bp爆破,输入第一个人的信息抓包


4、发送到Intruder,把隐藏的出生日期添加爆破,爆破模式为狙击手模式payload的类型为dates,payload配置格式为yyyyMMdd,日期要大范围

5、爆破完后看到状态码都是200,看长度最长的

6、看到最后一行的
\u606d\u559c\u60a8\uff0c\u60a8\u5df2\u88ab\u6211\u6821\u5f55\u53d6\uff0c\u4f60\u7684\u5b66\u53f7\u4e3a02015237 \u521d\u59cb\u5bc6\u7801\u4e3a\u8eab\u4efd\u8bc1\u53f7\u7801
可以直接登录,看payload为19900201,替换掉*;也可以用Unicode解码



ctfshow{60c589f6-3307-4c1b-bd53-96a90dc12bc7}
Web28
1、打开页面,尝试在url中输入内容找到flag位置,发现一直循环重定向失败,页面报错,状态码为302

2、利用bp爆破,先抓包发送到Intruder,将根目录添加爆破,去掉2.txt,爆破模式为集群炸弹攻击,payload类型为数值,1-0的配置为payload type:numbers from 1 to 99 step 1,2-1的配置payload type:numbers from 1 to 99 step 1

3、爆破,看状态码为200的respose,得到flag

ctfshow{75e62f5d-bcfe-4057-a7a9-113da6d90184}





