首页 > 其他分享 >CTFshow-Web入门模块-爆破

CTFshow-Web入门模块-爆破

时间:2024-04-10 18:22:07浏览次数:28  
标签:Web 爆破 入门 rand flag token CTFshow 随机数 php

CTFshow-Web入门模块-爆破

by 故人叹、

web21

考察点:burpsuite使用、自定义迭代器使用

题目提供了字典,要求登录并提示了爆破,使用burpsuite抓包并操作:

(1)用户名一般为admin,密码随意输,抓包并发送给爆破模块。

微信截图_20240408180822

可以看到Basic后有一段base64编码,解码得到 用户名:密码 的格式,证明我们之后的payload在此处,并且格式要与此一致。

微信截图_20240408180058

(2)在爆破模块选择单点爆破,设置新的payload位置。

微信截图_20240408175850

(3)在payload设置中,选择 自定义迭代器 模式,并为位置1、2、3分别设置用户名admin、符号:、题目提供的密码字典。

微信截图_20240408175820

微信截图_20240408175826

微信截图_20240408175833

(3)因为原始payload为base64加密形式,则我们的payload编码形式也必须是base64编码,并设置不需要url编码,因为base64编码中可能含有“=”,如果设置了url编码形式则“=”会被编码,导致爆破不成功。

微信截图_20240408180418

(4)点击开始攻击,根据返回页面字符长短找到爆破的结果。

微信截图_20240408175809

web22

考察点:子域名爆破

题目提示爆破子域名“ctf.show”,理论上可以使用Layer子域名爆破工具爆破出来,但查看wp得知有flag的子域名失效,访问该子域名失败,还是直接拿flag吧。

微信截图_20240409163631

web23

考察点:爆破

题目源码:

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值
  • 对传入的token值进行md5加密
  • 对于加密后的字符串,如果第2个字符等于第15个字符,且第15个字符等于第18个字符,通过第一层检测
  • 如果上述条件为真,则将md5字符串的第2、15、18位字符的整数值和与第2位字符的整数值相除,结果与第32位字符的整数值进行比较,相同则输出flag

思路:使用php代码,根据题目要求的条件进行爆破,爆破集可用数字集或字符集。

//爆破符合条件的数字
<?php
for($i = 0;$i<=100000;$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;
        }
    }
}
?>
422

也可用python对字符集进行爆破。

import hashlib
str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ0123456789"
for i in range(62):
    for j in range(62):
        for k in range(62):
            temp = str[i]+str[j]+str[k]
            token = hashlib.md5(temp.encode("utf-8")).hexdigest()
            if token[1:2] == token[14:15] and token[14:15] == token[17:18]:
                if (ord(token[1:2])) >= 48 and ord(token[1:2]) <= 57 and (ord(token[14:15])) >= 48 and ord(token[14:15]) <= 57:
                    if (ord(token[17:18])) >= 48 and ord(token[17:18]) <= 57 and (ord(token[31:32])) >= 48 and ord(
                            token[31:32]) <= 57:
                        if (int(token[1:2]) + int(token[14:15]) + int(token[17:18])) / int(token[1:2]) == int(token[31:32]):
                            print(temp)

aDp
a6e                       

为token传参符合条件的值即可得到flag。

微信截图_20240409170937

web24

考察点: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');
} 

代码解析:

  • GET传参给变量r
  • 设置随机数种子
  • 对传入的r和根据指定种子生成的随机数进行比较,相同则获得flag

思路:指定伪随机数的种子,就可以生成相同的随机数,我们在本地php设定与题目中相同的随机数种子,并生成一个随机数,再将随机数传参给r,拿到flag。

<?php
mt_srand(372619038);
echo mt_rand();
?>
1155388967

微信截图_20240409172754

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');
} 

代码解析:

  • 通过GET传参,传入一个变量r
  • 将flag的md5值的前8位转为十进制数,作为随机数的种子
  • 定义变量rand,其值为传入的r与第一次生成的随机数的差
  • 对rand取非,如果为true则比较cookie中的token的值与第二、三次生成的随机数的和,相等则输出flag;否则会输出变量rand

由上题得知,在种子确定的情况下,每次生成的随机数会相同(在每一次程序运行时,单次运行第一次生成的和第二次生成的不一定相等),所以我们有以下思路:

(1)传入参数r,通过相减后输出的结果rand推出第一次生成的随机数。

微信截图_20240410172238

(2)通过该随机数逆推出当前程序所使用的随机数种子(Web题为动态flag,此题种子根据flag来生成,每次创建题目实例都会变),此处使用一个根据随机数爆破种子的脚本 php_mt_seed,该工具可以爆破出各个php版本下的随机数种子,推荐选择php版本7.0+的种子。

工具地址:https://github.com/Al1ex/php_mt_seed

首先进入脚本所在文件夹,make命令创建可执行文件,后使用 time ./php_mt_seed [随机数] 命令开始爆破。

微信截图_20240410172215

(3)选择的种子必须符合第一次生成的随机数等于作为爆破条件的随机数,可在本地php环境中尝试。

<?php
mt_srand(4251928444);
echo mt_rand()."\n";
echo mt_rand()+mt_rand();
?>
2010035246
3113214722

确认了种子,输出第二、三次生成的随机数的和,传值给cookie中的token,用于比较。

微信截图_20240410172154

(4)进行比较的条件是 !rand == true,则此时我们给变量r传值第一次生成的随机数,使rand的值为0,经过非运算符变为1(php中,非0值在if判断中解析为true,0解析为false),通过if选择,拿到flag。

web26

考察点:源码审计、爆破

题目打开是一个安装系统:

微信截图_20240409183436

在源代码中发现一段:

微信截图_20240409182922

通过ajax异步请求,在checkdb.php页面使用POST传5个参数,如果五个参数符合要求,输出flag。

进入checkdb.php界面POST传参。

微信截图_20240409182907

web27

考察点:日期爆破

进入一个教务管理系统登录页面,登录需要学号和密码,目的很明确:登录拿flag。

点击录取名单,可以看到部分学生信息:

微信截图_20240409184247

通过学籍查询系统应该可以获得学号,下一步我们就需要爆破身份证号中被隐去的部分,正好是生日部分,则爆破日期。

微信截图_20240409184340

选择日期范围,日期格式为“yyyyMMdd”,爆破第一个人的生日。

爆破出来后使用其姓名和身份证号登录,有弹窗信息:学号,密码为身份证号,直接登录即可。

web28

考察点:目录爆破

拿到题目看到一句话:

微信截图_20240410170856

可以看到url处有 /0/1 字样,结合这一题提示爆破,猜测为爆破目录,访问正确的目录就能拿到flag。

使用burpsuite,抓包并发送给攻击器,设置集束炸弹模式,在目录名处设置两个payload位置。

微信截图_20240410170848

为两个payload分别设置内容和范围。

微信截图_20240410170840

最终爆破出正确的目录是 /72/20,在响应页面可以看到flag。

微信截图_20240410170829

标签:Web,爆破,入门,rand,flag,token,CTFshow,随机数,php
From: https://www.cnblogs.com/yuspace/p/18127136

相关文章

  • Android Compose 入门,深入底层源码分析
    AndroidCompose入门,深入底层源码分析我是跟着AS官网学习的,但是官方的教程写的不是很详细.官网链接首先创建一个Compose项目,目录结构是这样:ui->theme->->Color.kt->->Theme.kt->->Type.ktMainActivity.kt通过阅读源码,发现实际上还少了一个Shapes.kt,我手动......
  • python 使用waitress替代flask自带的web服务器
    首席引入依赖安装waitrsspipintsllwaitress 然后在flask程序内引入依赖使用server()函数代替app.run()函数启动时,直接pythonxxx.py即可fromwaitressimportservefromflaskimportFlaskapp=Flask(__name__)@app.route('/')defhello_world():return'HelloWor......
  • SQL SERVER 从入门到精通 第5版 第二篇 第7章 SQL数据查询基础 读书笔记
     第7章SQL数据查询基础 SELECT检索数据>.SELECT语句是SQL语句中功能最强大,也是最复杂的语句,所以我决定略过.>.WITH子句指定临时命名的结果集(非临时表),这些结果集称为公用表表达式WITHtemp_nameAS(--在这里定义临时结果集的查询......
  • nodejs + ts + nodemon + webpack 代码热更新
    依赖:npminodemonwebpackwebpack-clits-loadertypescript//webpack.config.jsimport{defaultaswebpack}from"webpack";importnodeExternalsfrom"webpack-node-externals";constplugins=[newCleanWebpackPlugin({dangero......
  • OpenGauss数据库之Python驱动快速入门
    OpenGauss数据库之Python驱动openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核源自PostgreSQL,深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性。可是目前针对于OpenGauss数据库的Python应用程序的开发少......
  • 网络流入门
    最大流例题(T1)P2472[SCOI2007]蜥蜴提示1:最少的无法逃离的蜥蜴个数=总个数-最多的逃离的蜥蜴个数。提示2:对于一个高度为\(h\)的石柱,意味着只能有至多\(h\)条蜥蜴经过这个石柱。这类似最大流中的流量限制。正解:考虑将平面图转为网络流图的形式,那么对于每一个石......
  • MXnet安装 与入门 符号式运算 Symbol 数据同步 KVStore 自动并行计算 数据的导出与载
    MXnet参考通过MXNet/Gluon来动手学习深度学习在线githubpdf代码深度学习库MXNet由dmlc/cxxnet,dmlc/minerva和Purine2的作者发起,融合了Minerva的动态执行,cxxnet的静态优化和Purine2的符号计算等思想,直接支持基于Python的parameterserver接口,使......
  • Burp Suite Professional 2024.3.1 for macOS x64 & ARM64 - 领先的 Web 渗透测试软件
    BurpSuiteProfessional2024.3.1formacOSx64&ARM64-领先的Web渗透测试软件世界排名第一的Web渗透测试工具包请访问原文链接:BurpSuiteProfessional2024.3.1formacOSx64&ARM64-领先的Web渗透测试软件,查看最新版。原创作品,转载请保留出处。作者主页:sysin......
  • Burp Suite Professional 2024.3.1 for Windows x64 - 领先的 Web 渗透测试软件
    BurpSuiteProfessional2024.3.1forWindowsx64-领先的Web渗透测试软件世界排名第一的Web渗透测试工具包请访问原文链接:BurpSuiteProfessional2024.3.1forWindowsx64-领先的Web渗透测试软件,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgBurpS......
  • Burp Suite Professional 2024.3.1 (macOS, Linux, Windows) - Web 应用安全、测试和
    BurpSuiteProfessional2024.3.1(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:BurpSuiteProfessional2024.3.1(macOS,Linux,Windows)-Web应用安全、测试和扫描,查看最新版。......