CTFshow-爆破(Web21-28)
CTFshow-爆破(Web21-28)
Web21
抓包
选则dic.zip里的字典爆破,记得添加前缀admin:
答案admin:shark63
burp里有一个自定义迭代器,可以设置前几部分,很好用
Web22
题目失效了直接看wp吧
360quake 使用空间搜索引擎—>360quake 搜索语法—>domain=“ctf.show” 可以搜索出子域名—>vip.ctf.show 可以发现子域名vip.ctf.show下面有flag—>flag{ctf_show_web}
Web23
直接给源码
<?php
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__);
}
?>
3+3+3/3=3
写解密代码
import hashlib
# 遍历可能的输入 token
for i in range(1000000): # 6位以内的数字
token = str(i)
md5_hash = hashlib.md5(token.encode()).hexdigest()
# 获取需要的索引值
a = md5_hash[1]
b = md5_hash[14]
c = md5_hash[17]
d = md5_hash[31]
# 条件 1: 第1位, 第14位, 第17位相等
if a == b == c:
# 条件 2: (a + a + a) / a = 3 且第31位等于3
if d == '3' and a.isdigit():
a = int(a)
if a != 0 and (a + a + a) / a == 3: # 确保 a 不为 0,且 (a + a + a) / a == 3
print(f"Found token: {token}")
print(f"MD5: {md5_hash}")
break
答案422
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');
}
?> Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023 Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023
mt_srand查了之后发现是个伪随机数
直接提交得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');
}
Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023 Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023
就是r要和hexdec(substr(md5($flag), 0,8))产生的伪随机数相同
flag的md5形式的前八位的十进制形式,token要为两个伪随机数相加
echo $rand;实际上会输出,我们不必去爆破10进制的8位
输入r =0 ,那么肯定会输出-rand
-1810958455
1810958455
mt_rand()+mt_rand())不是简单的相加,固定种子随机数,用过一次,下次就变了,但是有了第一次的结果,我们就可以反向推得种子值
<?PHP
$x=2282835081;
mt_srand($x);
$a1=mt_rand();
$a2=mt_rand();
$a3=mt_rand();
$a4=$a2+$a3;
echo "种子是:".$x."";
echo "随机数第1次的结果是:".$a1."";
echo "随机数第2次的结果是:".$a2."";
echo "随机数第3次的结果是:".$a3."";
echo "随机数第2+3次的合计数是:".$a4."";
?>
然后设置cookie,token=xxx就行
Web26
注意前端一定要有@符号格式,我们可以抓包,然后修改,再去爆破
Web27
可以查录取信息
621022xxxxxxxx 5237
爆破年月日可以得身份
依旧burp抓包
{“0”:“success”,“msg”:“\u606d\u559c\u60a8\uff0c\u60a8\u5df2\u88ab\u6211\u6821\u5f55\u53d6\uff0c\u4f60\u7684\u5b66\u53f7\u4e3a02015237 \u521d\u59cb\u5bc6\u7801\u4e3a\u8eab\u4efd\u8bc1\u53f7\u7801”}
621022199002015237
02015237
登陆即可
Web28
根据提示爆破,
通过暴力破解目录/0-100/0-100/看返回数据包。爆破的时候去掉2.txt 仅仅爆破目录即可
- 感谢你赐予我前进的力量