爆破
一、ctf.show web21 穷举--base64解码登录
- 使用BP抓包如下图所示,
- 发送到拦截器里
- 标记
- 选择Payloads,Payloads类型选择自定义迭代
- 该变红框的值进行多次值设置,本次需要进行三次设置,分别为 账号 冒号 密码
- Position为1 导入字典
- Position选择2写入:
8.Position选择3导入字典
9.选择规则
10.去掉Payload encoding
11.开始穷举
12.发送到Decoder,进行解码,得到账号密码
二、ctf.show web23穷举
题目
<?php
error_reporting(0);
include('flag.php');
if(isset($_GET['token'])){
$token = md5($_GET['token']); //将一个数使用md5加密
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){ //第2位、第15位,第18位相等
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){ //(第2位+第15位+第18位)/第2位 == 等32位
echo $flag;
}
}
}else{
highlight_file(__FILE__);
}
?>
### 解析:
(1) python脚本跑出来
# 将一个数使用md5加密之后,它的第2位、第15位,第18位相等
# 将(第2位+第15位+第18位)/第2位 == 等32位
import hashlib
import string
characters = string.digits + string.ascii_letters
# + string.punctuation
def is_int(s):
try:
int(s)
return True
except ValueError:
return False
for i in characters:
for j in characters:
res = str(i)+str(j)
md5_res = hashlib.md5(res.encode('utf-8')).hexdigest()
if is_int(md5_res[1:2]) and is_int(md5_res[14:15]) and is_int(md5_res[17:18]) and is_int(md5_res[31:32]):
if md5_res[1:2]==md5_res[14:15] and md5_res[14:15]==md5_res[17:18] and int(md5_res[1:2])!=0:
if(int(md5_res[1:2])+int(md5_res[14:15])+int(md5_res[17:18]))/int(md5_res[1:2])==int(md5_res[31:32]):
print(md5_res + '======>' + md5_res[1:2]+'========>'+md5_res[14:15]+'======>'+md5_res[17:18]+'=======>'+md5_res[31:32])
print(res)
(2) 使用BP进行爆破
-
使用BP进行抓包
-
选择Brute forcer模式
-
进行爆破,得到结果
三、ctf.show web24穷举
题目
<?php
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(372619038); //设置随机种子为:372619038
if(intval($r)===intval(mt_rand())){ //如果get(r)的值为mt_rand()则输出flag
echo $flag;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
?>
解题
- 环境可使用菜鸟教程的PHP编译环境
<?php
mt_srand(372619038);
echo mt_rand();
?>
四、ctf.show web25穷举
题目
<?php
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(hexdec(substr(md5($flag), 0,8))); //将flag的前8个字母作为随机种子
$rand = intval($r)-intval(mt_rand()); //如果get到的r = 0 rand=-mt_rand()
if((!$rand)){
if($_COOKIE['token']==(mt_rand()+mt_rand())){ //将'token'=第2个随机数+第3个随机数
echo $flag;
}
}else{
echo $rand; //r=0 输出 第一个随机数
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
题解
(1)根据r = 0,可以输出第一个随机数
(2)由第一个随机数,可以由php_mt_seed4.0得到随机种子是多少
(3)获取该随机种子的第二个、第三个随机数进行相加得到token
4.1 php_mt_seed4.0在kali使用
1. 通过 https://www.openwall.com/php_mt_seed/ 进行下载
2. tar -zxvf php_mt_seed-4.0.tar.gz
3. make 进行编译
4. ./php_mt_seed 1647299849
对上面的数一个一个试
<?php
mt_srand(3592921990);
echo mt_rand()."\n";
echo mt_rand()+mt_rand();
?>
将r的值与token的值都进行替换,得到答案
五、ctf.show web26穷举
直接抓包
六、ctf.show web27穷举
- 点击录取名单 点击学生学籍信息查询系统
- 打开录取名单,进行年月日的爆破
七、ctf.show web28穷举
删除2.txt,对前面的0与1进行穷举。