温故知新,复盘当尝试不同方法,弄懂原理!
WEB 21
直接一个登录界面,开BP,先输入admin/123456 ,抓包
发现GET包中的Authorization(授权)中有一段密文 ,像base64编码,试下解密
发现这里就是提交的账号密码,中间有个:,知道了格式和提交位置,开始爆破
先改为明文形式加变量符,选择 cluster bomb模式,载入提供的字典,添加两条规则(末尾固定增加:,base64编码),取消payload encoding的√(避免特殊符号被自动转义)。
密码增加Base64规则,取消payload encoding的√
因为网站限定了测试线程数,所以速度会比较慢,否则直接503拒绝访问,我们直接上账号admin,密码shark63测试下
WEB 22
一种直接借助网站:在线子域名爆破-子成君提供
要么自己抓个访问ctf.show的包,在地址前加上变量,加上末尾添加.的规则,用字典爆破
web 23
<?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__);
}
?>
=== 值与类型都要相同
substr截取字符串中的字符,intval按要求转换字符串的进制
看题得知要满足条件,先想办法得出这几个数,那么来构造一个简单的php的循环函数
<?php
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 '$i='.$i.'!';
echo "$token=".$token.'!';
}
}
}
?>
将422或1202输入即可。
web 24
<?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');
}
intval按要求转换字符串的进制
mt_rand()生成一个随机数,如果是纯随机,那么这道题无法解
mt_srand()随机数的种子,如果种子编号相等,那么每次生成的值都相同,也称为伪随机
先来看看这个数是多少
<?php
mt_srand(372619038);
$i=mt_rand();
echo($i);
?>
输入即可
web 25
其中 mt_srand(hexdec(substr(md5($flag), 0,8)))括号内部分算干扰代码,与得到flag无关
先给r=0,得到第一次随机数的相反数。我得到 -375943554,看别人的博客得到的数值不同,不知道是题目更改了flag还是什么原因。利用php_mt_seed进行爆破mt_srand的种子,因为是.c文件,需编译后使用
使用kali,找到相应文件夹,在当前终端先make一下,之后使用./php_mt_seed 随机数爆破,
有很多结果,基于不同的php版本,使用wappalyzer插件,
找对应php 7.X的结果
根据if((!$rand)),if($_COOKIE['token']==(mt_rand()+mt_rand()))条件,知道r等于第一次随机数,token要等于第二次和第三次随机数相加的和,那么构造php代码
代入可能的种子值一一尝试,最后得到
web 26
看到上面有默认信息,先填一下,抓包
把密码设置下变量,开始爆破,注意线程数小些,不然503错误
速度太慢直接演示下
web 27
点点看
看到这就明白类似密码找回漏洞,但是要爆破身份证的出生年月,选择高先伊
选规则
yyyyMMdd是自己构造的,爆破
再把信息输入
web 28
看看url, 输入/0/0,/0/1发现都是403,不给访问。那么就知道让你爆破目录了,那么大概的范围呢?
10*10太小,估计就是100*100了
速度太慢,演示下,结果72,20
可以利用Python加快爆破速度
import requests
def test():
url = "http://dd700c76-18e1-44a2-b362-ae89bf91c68d.challenge.ctf.show/"
for i in range(101):
for j in range(101):
newUrl = url+str(i)+"/"+str(j)+"/"+"index.php"
a = requests.get(newUrl).status_code
print("test:"+str(i)+"/"+str(j))
if(a!=404):
print(newUrl)
return
test()