爆破:
web21:
题目描述:弹窗以及base64加密爆破
解题思路:
看到是弹窗爆破,那么直接用Burp抓包
1、Burp抓包,发现是经过base64加密过的
2、解密查看格式为admin:123
因此有两种爆破方法,在知道账号为admin的情况下,选取后半部分进行爆破较为简单,在不知道账号以及密码的情况下,爆破为三个参数,参数一:admin,参数二:“:”,参数三:123,但这种爆破事件较长
参数选择:
需要注意的是,进行base64编码,切记不可为符号再编码,base64可能存在=
爆破成功,获得账号密码=>admin:shark63
方法二参考链接:https://blog.youkuaiyun.com/song123sh/article/details/120787344
web22:
题目描述:域名爆破
解题思路:
该题失效,爆破不出来
域名爆破地址:
在线地址:https://dnsdumpster.com/
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__);
}
?>
代码要求get传入的token经过md5加密后,第1位=第14位=第17位并且(第1位+第14位+第17位)/第1位=第31位,可以写一个python脚本跑一下,应该有很多种可能。
import hashlib
a = '0123456789abcdefghijklmnopqrstuvwxyz'
for i in a:
for j in a:
t = (str(i)+str(j)).encode('utf-8')
md5 = hashlib.md5(t).hexdigest()
if md5[1:2] == 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(t)
输出结果3j和ZE,但是访问了以后发现ZE没有用
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() 函数播种 Mersenne Twister 随机数生成器。
提示:从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数。
审计代码,当mt_srand(372619038)函数生成的随机数等于参数r时,得到flag
那么使用php代码运行查看mt_srand(372619038)运行结果
<?php
mt_srand(372619038);
echo(mt_rand());
?>
结果为:1155388967
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');
}
解题思路:
mt_srand(hexdec(substr(md5($flag), 0,8)));
将flag进行md5加密,返回从第一个到第八个数,再将数字加密
!r a n d : 满 足 这 个 条 件 表 示 rand:满足这个条件表示rand:满足这个条件表示rand=0,即r=mt_rand()
再满足token=mt_rand()+mt_rand() ,这里不是说token等于mt_rand()的两倍,而是token等于第一次加密的值加上第二次加密的值,因为生成的随机数可以说是一个线性变换,即可得到flag
现在为了获得flag,即获得第一次加密的值即可,
mt_scrand(seed)这个函数的意思,是通过分发seed种子,然后种子有了后,靠mt_rand()生成随机数, 要获得第一次加密的值就需要获得种子,由函数得:r=0时,得到随机数rand
当R=0时,mt_rand()=1876796054,通过php_mt_seed脚本爆破解密,得到种子分别为
seed = 0xfc6cfb4c = 4235000652 (PHP 3.0.7 to 5.2.0)
seed = 0xfc6cfb4d = 4235000653 (PHP 3.0.7 to 5.2.0)
seed = 0x1415f353 = 336982867 (PHP 5.2.1 to 7.0.x; HHVM)
seed = 0x78ed480f = 2028816399 (PHP 5.2.1 to 7.0.x; HHVM)
seed = 0x78ed480f = 2028816399 (PHP 7.1.0+)
通过F12查看请求头可知,PHP版本为7.3.1,所以,可从版本较高处测试,并且通过脚本计算mt_rand()即R,以及token值。
<?php
mt_srand(2028816399);
echo mt_rand()."\n";
echo mt_rand()+mt_rand();
?>
得到结果:1876796054,2234805933
web26:
题目描述:
说是爆破
解题思路:
1、网页点击到CTFshow flag管理系统安装时,点击开始安装后,显示数据库连接成功,但没有后续了
2、抓包尝试一下,得到flag
web27:
题目描述:
解题思路:
1、在登录页面上发现一个录取名单和一个学生学籍信息查询系统,下载录取名单后,得到以下信息
2、查看身份证号码,中间缺失部分为出生日期,并且登录学生学籍信息查询系统可以发现,仅需要姓名和身份证号即可查询,那么就可以通过编写字典以及Burp进行爆破,字典格式为19990101。
3、爆破得到中间缺失部分为19900201,从学生学籍信息查询系统登录查询,但并不知道为啥,点击查询后没有反应
4、bp抓包,修改查询信息,显示成功,且后面发现一段经过Unicode编码的数据
5、解码得到学号以及初始账号密码
在线Unicode编码地址:https://tool.ip138.com/ascii/
6、登录成功获得flag
web28:
题目:
解题思路:这个题目的目录很不对劲,这里我们爆破目录看看,第一次爆破没有什么东西,这里我们将2.txt去掉,重新爆破,发现flag
爆破总结:
爆破在理解题目意思以及正确构造爆破payload内容还是很简单的