Web21
随便输入抓包

发现Base64加密

账号和密码用:隔开
使用BP构造payload爆破

下载官方提供的字典 把后缀名改为.zip即可打开

使用Custom iterator模式

第一部分

第二部分

第三部分使用字典

添加base64加密


关闭url编码

爆破完按length排序查看最小的回包


Web22
子域名爆破,爆破ctf.show

最终在vip.ctf.show的源码发现了flag

Web23
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__);
}
?>
这片代码主要的就是后面这两个if判断 我们需要构造一个符合条件的token
第一个条件:md5加密后的token第2,15,18位相等
第二个条件:第2,15,位与 18位/2位的值 相加等于第32位
使用python脚本爆破
import hashlib
dic = '0123456789qazwsxedcrfvtgbyhnujmikolp'
for a in dic:
for b in dic:
t = str(a) + str(b)
md5 = hashlib.md5(t.encode('utf-8')).hexdigest()
if md5[1:2] == md5[14:15] and md5[14:15] == md5[17:18]:
if int(md5[1:2]) + int(md5[14:15]) + int(md5[17:18]) / int(md5[1:2]) == int(md5[31:32]):
print(t)
得出结果是 3j

拿到flag
Web24
<?php
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(372619038);
if(intval($r)===intval(mt_rand())){
echo $flag;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
?>
my_srand()函数
<?php
mt_srand(372619038);
echo(mt_rand());
?>
得到运行结果

这里有个问题:不同的php版本得到的结果可能不一样 我使用的php版本得到的结果是 999695185但是在菜鸟在线运行工具中的得到的结果是上图 ,这道题的答案也是上图
已get方式通过r传参
得到flag

Web25
<?php
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(hexdec(substr(md5($flag), 0,8)));
$rand = intval($r)-intval(mt_rand());
if((!$rand)){
if($_COOKIE['token']==(mt_rand()+mt_rand())){
echo $flag;
}
}else{
echo $rand;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
这道题先把flag的进行md5加密并取前8位然后进行16进制转10进制最后得到的值作为种子来生成随机数
通过cookie得到的token要等于两个随机数相加 (这个两个随机数并不相同)
同时我们可以通过?r=0传参得到生成的随机数 因为如果r为零则回执行else语句输出随机数的负数

这里我得到的随机数是585666240
接下来使用脚本得到可能的seed值
放到linux下编译
cd php_mt_seed-4.0
gcc php_mt_seed.c -o php_mt_seed
/php_mt_seed 737212628
接下来是漫长的等待

通过响应头发现php的版本为7.3.11

得到
接下来计算下两个随机数相加
<?php
mt_srand(3842734643);
echo mt_rand()."<br/>";
echo mt_rand()+mt_rand()."<br/>";
?>
得到:
585666240
1350320544
接下来传参
通过get 传参?r=585666240
抓包修改cookie token=1350320544
得到flag

Web26

右键查看源代码发现javascript代码
function check(){
$.ajax({
url:'checkdb.php',
type: 'POST',
dataType:'json',
data:{
'a':$('#a').val(),
'p':$('#p').val(),
'd':$('#d').val(),
'u':$('#u').val(),
'pass':$('#pass').val()
},
success:function(data){
alert(data['msg']);
},
error:function(data){
alert(data['msg']);
}
});
}
使用post提交返回一个json

接下来对pass进行爆破

密码为7758521
查看返回包

得到flag
Web27

点击录取名单 得到一个表格

可以看出来身份证哪里缺少了生日部分
点击进入学籍管理系统

姓名 我们有了 身份证号缺少生日部分
抓包爆破 这里我用火狐抓的包有问题,换到chrome就好了



得到出生日期 看回包
还以为是flag 没想到是unicode编码


登录 教务系统
拿到flag

Web28
where is flag?


看到url 的目录有点奇怪
继续抓包爆破

第一,二位置配置一样


查看回包

拿到flag










