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

CTFshow-Web入门模块-爆破

时间:2024-04-13 17:55:35浏览次数:46  
标签: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/18133144

相关文章

  • CTFshow-Web入门模块-信息搜集writeip
    CTFshow-Web入门模块-信息搜集writeipby故人叹、信息搜集web1考察点:查看源码题目提示:”开发注释未及时删除“,页面源代码中可能有东西,查看页面源代码发现flag。总结查看源码的几种方式:F12打开源代码快捷键Ctrl+u在url前面加上view-source:浏览器右上角选项中的Web开......
  • 基于WebAssembly开发网页端
    基于WebAssembly开发网页端来源  https://zhuanlan.zhihu.com/p/162082688 序言QtforWebAssembly,是Qt在2018年发布的技术,于5.12加入到Qt,官方对此技术介绍如下:https://www.qt.io/blog/2018/05/22/qt-for-webassembly简单的说,这是一个让Qt程序可以直接跑在web中的一个方......
  • [SWPU2019]Web1
    [SWPU2019]Web1打开网页是一个登录页面源代码中没有发现什么有用的信息,注册个账号进行尝试发现admin已经被使用了,换了个用户名注册成功点击“申请发布广告”,需要填写广告名和内容使用1'测试广告详情里发现报错说明此处存在SQL注入点进行测试时发现空格、or、#、--+......
  • PHP特性 web107-
    Web107parse_str函数将前字符串解析到后边,实现变量的覆盖if(isset($_POST['v1'])){    $v1 = $_POST['v1'];    $v3 = $_GET['v3'];       parse_str($v1,$v2);       if($v2['flag']==md5($v3)){           echo $flag;    ......
  • 14、web 中间件加固-Tomcat 加固
    1.用户配置如果不需要控制台管理,请更改控制台用户文件注销账号信息;如果需要,请更改账户信息修改tomcat/conf/tomcat-user.xml文件注释或修改如下信息<rolerolename="manager-gui"/><userusername="admin"password="ABCabd123!"roles="manager=gui"/>2.开启tomca......
  • 13、web 中间件加固-Nginx 加固
    1.隐藏版本信息避免被针对版本直接使用漏洞修改nginx.conf文件在http模块中添加信息:server_tokensoff;2.限制目录权限某些目录为运维页面,不要公开访问编辑nginx.conf文件在server标签内添加内容:location~/attachments/.*\.(php|php5)?${denyall;}locatio......
  • RVC-WebUI的模型路径
    pth文件:.\assets\weightsindex文件:.\logs 靠自带文件名搜索整个文件夹找到的,实测有用 ......
  • 12、web 中间件加固-apache 加固
    1.账号设置1.1.防止webshell越权使用修改httpd.conf:/etc/httpd/conf/httpd.conf或编译路径下/conf/httpd.conf检查程序启动账号和用户组userapache或nobodygroupapache或nobody一般情况下默认用户符合安全要求1.2.非超级用户权限禁止修改apache主目录......
  • CTFshow Reverse 逆向4 学习记录
     题目 分析过程 是一个无壳,64位的文件丢到IDA里面,找到main函数1int__cdecl__noreturnmain(intargc,constchar**argv,constchar**envp)2{3__int64v3;//rdx4char*v4;//[rsp+20h][rbp-18h]56qword_140004618=(__int64)malloc(1......
  • RabbitMQ 入门:我的思维导图总结
    刚看完尚硅谷的RabbitMQ入门教程,感觉自己对知识点的理解还有些混乱,看完相关面试题后整理了一份简单的思维导图,仅供参考,如有错误,欢迎指正!视频教程:尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq_哔哩哔哩_bilibili1.概览2.具体细节2.1基本概念常见面试题:什......