CTF-Show-爆破系列
CTF-Show-爆破系列Problem 1
前置知识
burp的四种爆破模式:
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226102159504-1024021926.png
上述内容来自:https://blog.csdn.net/m0_74097148/article/details/128901184
思路
下载题目中给定的字典。打开页面发现是一个登录框,猜测用户名为admin,密码直接使用burp来进行字典爆破。
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226094449478-2140729256.png
字典的内容为:
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226095116518-879297161.png
尝试填写表单数据(admin admin)并抓包:
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226095211084-1413556450.png
发现并没有我们输入的admin admin。但是我们发现Authorization字段的值为Base64编码,将其进行解码发现:
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226095345825-1282499951.png
找到了我们输入的表单内容。该网站会将我们输入的用户名和密码进行Base64编码后,再进行检验。
因此,我们将用户名固定为admin,密码进行字典爆破,在爆破的同时,使用Base64编码。使用Burp,步骤如下:
[*]对于抓来的包,单击右键 send to intruder
[*]https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226102318599-1775704621.png
[*]选择sniper模式,payload set选择如下图
[*]https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226102434927-2095736588.png
[*]选择payloads模块
[*]https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226102508761-1290429779.png
[*]payload type: Custom iterator
[*]Position 1:admin(用户名固定为admin)
[*]Position 2: :(中间固定为:)
[*]Position 3:加载所下载的字典(密码进行字典爆破)
[*]Pyload processing 为 base64 encode
[*]取消勾选Pyload encoding
[*]https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226102855666-1900378557.png
[*]https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226102908789-1786860352.png
[*]单击 start attack 开始爆破
[*]https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226102958859-1821262147.png
[*]看到返回状态码为200,代表爆破成功
对该Base64进行解码,得到明文账号密码,进行登录,得到flag。
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226103117181-105459065.png
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226103142760-956343155.png
Problem 2
前置知识
爆破不光可以应用在用户名密码猜解,还可以用在域名中。
子域名爆破可以扩大我们的资产,对于SRC挖掘有着非常好的帮助。
思路
使用在线子域名爆破工具:http://z.zcjun.com/
输入域名:ctf.show,尝试爆破子域名。
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226104030600-1230229925.png
将爆破出来的子域名一个一个的访问,最终都会得到flag。
Problem 3
打开页面,发现一段代码,开始阅读:
阅读上述的代码,发现这个明文是很难构造的,只能通过爆破来猜解。
使用burp来字典爆破,数字遍历token的值即可。(这里的数字采用1-10000000)
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226105524406-2007587555.png
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226105538785-1484716583.png
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226111323727-647303220.png
发现当token=422时,满足上述代码的要求(length跟其他的请求不同),进而得到flag。
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226111430716-1353793552.png
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226111008784-1407428341.png
Problem 4
前置知识
php伪随机数漏洞:
简单来说:如果mt_srand(seed)函数种子确定,那么无论进行多少次请求,mt_rand()的值均是确定的.
换句话说,我们也可以通过mt_rand()的值,来反推种子。
更多内容查看:https://blog.csdn.net/BrosyveryOK/article/details/127061458
思路
打开页面,发现一段代码,进行阅读:
error_reporting(0);
include("flag.php");
//r通过get传参
if(isset($_GET['r'])){
$r = $_GET['r'];
//播种种子372619038
mt_srand(372619038);
//如果输入的值和生成的值(mt_rand生成随机数)相等
//由于种子确定,那么mt_rand()的值也是确定的。(无论进行多少次请求,多少次重新运行)
if(intval($r)===intval(mt_rand())){
//输出flag
echo $flag;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}由于mt_rand的值是固定的,因此我们可以采用burp来进行字典爆破(时间很长)。
或者,我们可以重新书写一个php文件,得到mt_rand()的值,然后给r即可得到flag。
mt_srand(372619038);
echo mt_rand(); //1155388967将该值给到r,进行get传参,得到flag。
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226115408660-2135122780.png
Problem 5
前置知识
在上一题的基础上,seed值不公开了。
更多内容参考:https://blog.csdn.net/BrosyveryOK/article/details/127061458
思路
打开网页,源码如下:
error_reporting(0);
include("flag.php");
//r为get传参
if(isset($_GET['r'])){
$r = $_GET['r'];
//从$flag中获取seed
mt_srand(hexdec(substr(md5($flag), 0,8)));
//将r的值和mt_rand()值相减
$rand = intval($r)-intval(mt_rand());
//如果差为0
if((!$rand)){
//如果token的值(cookie传参)等于两次生成随机数的值相加
if($_COOKIE['token']==(mt_rand()+mt_rand())){
//得到flag
echo $flag;
}
}else{
//如果差不为0,那么得到差值
echo $rand;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}这道题由于不知道seed,因此mt_rand()值无法确定,我们可以通过php_mt_seed工具来反推seed。
但是,这里反推seed,需要一个前提条件:你得事先知道mt_rand()的值,才可以进行反推。这道题的源码中当:将r的值和mt_rand()值相减不为0时,会输出差值。我们可以通过这种途径来知道mt_rand()的值,从而反推seed,否则这道题无解。
php_mt_seed工具下载地址:https://www.openwall.com/php_mt_seed/
过程:
访问如下url:http://c9f3ac04-3f97-43af-8db0-e9b9e75304d4.challenge.ctf.show/?r=0
得到mt_rand()的随机数:-1638561645 => 1638561645
通过该工具,得到seed
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226150446155-665973012.png
由于该网站的PHP版本为7.x,因此seed为:2759183718
我们根据该seed来生成随机数
结果为:
1638561645
1983296972
1583738348
第二个和第三个随机数相加结果为:3567035320将如上结果进行传入,得到flag
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226151626388-1592264876.png
Problem 6
打开页面,进入安装页面,查看该页面的源代码
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226152713112-1083470638.png
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="initial-scale=1,maximum-scale=1, minimum-scale=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>ctfshow系统安装界面</title>
<link href="css/style.css" rel="stylesheet">
</head>
<body>
<center><h1>CTFshow flag管理系统安装</h1></center><br><br>
<form action="">
<input id="a" type="text" placeholder="数据库地址:localhost">
<input id="p" type="text" placeholder="端口:3306">
<input id="d" type="email" placeholder="数据库:ctf">
<input id="u" type="email" placeholder="用户名:root">
<input id="pass" type="tel" placeholder="密码:123456">
<button onclick="check();">确认无误,开始安装</button>
</form>
</body>
</html>根据上述的代码,当用户单击按钮时,会触发ajax请求,将表单中的信息传递给checkdb.php,如果各种信息都正确,那么会提示正确,否则错误。
我们可以根据发送的ajax请求,抓一个包看看:
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226153034209-1022456410.png
结果发现flag藏在响应数据(json)里。
Problem 7
思路
打开页面
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226164752685-1502470544.png
我们并不知道学生的学号和密码,单击下方的录取名单,下载文件,得到如下信息。
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226164857426-116247802.png
身份证号码不全面,先放这,单击学生学籍信息查询系统,得到如下页面
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226164954309-1797653368.png
代表需要身份证号码,才可以获得学号。由于身份证号码不全面,因此我们需要进行爆破。
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226165207876-248876268.png
导入字典,这里我们使用如下python脚本来生成一个8位数的字典(也可以使用下图的字典)
for i in range(0,99999999,1):
i = str(i)
if len(i) != 8:
for j in range(0,8):
if len(i) == 8:
break
else:
i = '0' + i
with open('dict.txt','a') as file:
file.write(i+"\n")得到字典后,将其导入,进行爆破,获得学号
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226165732499-57799884.png
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226165802739-2141573910.png
发现有一个身份证号长度不同,代表爆破成功!
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226165908547-143944863.png
得到了一串unicode编码,将其进行解码
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226170033279-1800230884.png
得到了学号和身份证号后,进行登录,得到flag
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226170207795-1831462885.png
Problem 8
思路
根据url:http://4844b84d-afc6-413a-a0f7-5abaf91e5dec.challenge.ctf.show/0/1/2.txt
我们发现:前两个目录是可以进行爆破的,我们采用burp来进行爆破。
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226171021742-509853790.png
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226171124066-435762265.png
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226171151252-1726283463.png
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226171212795-1083177578.png
开始爆破,得到flag。(时间比较长,大概需要10000次)
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226171650534-303028649.png
有一个请求,长度不同(/72/20)。代表爆破成功!
https://img2023.cnblogs.com/blog/2206600/202402/2206600-20240226171831342-192720548.png
总结
常见爆破手段
[*]字典+base64编码
[*]子域名爆破
[*]数字爆破
[*]伪随机数漏洞(seed爆破)
[*]普通字典爆破
[*]双/多字典爆破
[*]...
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]