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