WEB21 {#WEB211051}
抓包发现Authorization: 处有base64加密
解密后得知格式如下
将数据包发送至intruder。选择sniper模式
点击payload,选择以下模块
第三个放自己的密码字典就不截图了。然后我们用base64加密,并取消最下面的勾选。(因为在进行base64加密的时候在最后可能存在 == 这样就会影响base64 加密的结果)
web22 {#web221240}
该题是爆破子域名(直接用layer爆破就好了)
web23 {#web231837}
该题是根据源码编写个脚本去跑
<?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__);
}
?>
意思就是当加密后的token第2位等于15位=18位的值(编程从0开始算)
然后(第2位+15位+17位)/第2位的值要等于第32位
然后编写脚本就好了。我利用python写的脚本如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
@File : web22.py
@Author: YanXia
@Date : 2021/8/2 13:29
@email : yx535@qq.com
@link:https://535yx.cn
'''
import requests,hashlib
a='0123456789qwertyuiopasdfghjklzxcvbnm'
url='http://b6a1c242-69c7-487b-89e3-705092b354e0.challenge.ctf.show:8080/?token='
for i in a:
for j in a:
x=(str(i)+str(j)).encode('utf-8')
payload=hashlib.md5(x).hexdigest()
#print("%s|%s"%(x,payload))
if payload[1:2]==payload[14:15] and payload[14:15]==payload[17:18]:
if ((int(payload[1:2])+int(payload[14:15])+int(payload[17:18]))/int(payload[1:2]))==int(payload[31:32]):
r=requests.get(url+x.decode('utf-8'))
r1=r.text
print(r1)
#print(payload)
web24 {#web242326}
该题是考到了mt_srand() 函数,如果seed一样的时候值是一样的。俗称伪随机
web25 {#web256595}
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 13:56:57
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 15:47:33
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
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');
}
代码审计后可知,当r=0时候可以直接获得$rand的值1242990134 (动态容器,每个值不相同)
然后我们利用该工具地址:https://github.com/Al1ex/php_mt_seed 去逆推种子(下图种子比较多,需要自己试试)
web26 {#web264538}
这题有点小奇葩,直接点击会显示链接成功。那么抓个包看看
web27 {#web272011}
发现有个录取名单,下载下来
然后我们来到录取查询这准备爆破(发现恰好是年月日)
获得flag
web28 {#web284829}
看起来像是爆破目录(删掉2.txt)