web21
用burp抓包
输入的账户名和密码被base64加密了,用burp自带解密发现账户名和密码之间用冒号隔开了,接下来构造payload
分别选中账户名和密码,我这里选择把冒号放到了账户名那里,放到密码也可以,只是一会儿加前缀和后缀的区别
payload1(账户名):先导入题目提供的字典,然后加后缀冒号,再用base64加密
payload2(密码):导入提供的字典,base64加密
payload1和payload2都需要取消勾选
构造完之后,发现需要爆破的条目数太大了,经过群里大佬提示,账户名就是admin,爆破完之后得到密码是shark63。
查看响应包,获取flag
web22
http://flag.ctfer.com/index.php
web23
<?php
error_reporting(0);
$a="asdfghjklqwertyuiopzxcvbnm1234567890";
for($i=0;$i<36;$i++){
for($j=0;$j<36;$j++){
$token=$a[$i].$a[$j];
$token = md5($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 $a[$i].$a[$j];
exit(0);
}
}
}
}
?>
偷看大周大佬的博客代码,运行之后得到3j
传递token=3j即可得到flag
web24
PHP伪随机数种子
<?php
mt_srand(372619038);
echo(mt_rand());
?>
运行得伪随机数1155388967
传递?r=1155388967即可获取flag
web25
先传递?r=0获得随机数
通过漫长的等待和多次尝试,终于算出来1914244310可以用
php_mt_seed-PHP mt_rand()种子破解程序下载地址
https://www.openwall.com/php_mt_seed/
<?php
mt_srand(1914244310);
echo mt_rand()."\n";
echo mt_rand()+mt_rand();
传递参数r=1469584721 token=2772329577,获得flag
web26
乍一看像常规爆破账户名和密码,看到默认提供了一些信息
直接提交,抓包看看,果然不行
之后爆破出密码为7758521,获得flag
这道题还有另一种解法,但是我没复现出来,这里附上大佬博客,第26题的新解法
https://oatmeal.vip/ctf-wp/oj/ctfshow-web/
web27
打开页面之后,发现有录取名单
点击下载名单,身份证中的生日被隐藏了
又找到学院录取查询页面,看到要输入姓名和身份证号,姓名已经有了,身份证有一部分,接下来只要爆破出生日期就行
这里有很坑的一点是,如果用火狐浏览器,burp不能直接抓到这个页面的数据,需要在谷歌浏览器里复制请求头
构造payload
爆破出正确身份证号
解出响应包的Unicode编码,得到学号
输入学号和身份证号,获得flag
web28
爆破目录/0-100/0-100
构造payload,payload1和payload2相同
过滤掉3xx,4xx,5xx的包,得到200响应包,获得flag
附上参考的大佬博客
https://blog.csdn.net/qq_46091464/article/details/108834851
https://www.d1a0.cn/2020/11/20/ctfshow-web%E5%85%A5%E9%97%A8%E7%88%86%E7%A0%B4/#web28
如有错误,敬请斧正