ctfshow--web入门之爆破篇

news2024/12/19 3:54:42

知识点:

暴力破解原理

暴力破解实际就是疯狂的输入密码进行尝试登录,针对有的人喜欢用一些个人信息当做密码,有的人喜欢用一些很简单的低强度密码,我们就可以针对性的生成一个字典,用脚本或者工具挨个去尝试登录。

暴力破解前提

1.没安装waf,或者安装了waf没有开启流量拦截

2.没有规定输入密码多少次后无法继续输入

3.没有验证码,或者验证码生成在数据包中与输入的验证码进行比对。

4.判定输入密码次数等是根据数据包中的ip等判定,我们就可以用字典变换ip去绕过

burpsuite爆破的四种模式

四种模式分别为:Sniper、Battering ram、Pitchfork、Cluster bomb(推荐使用)

1.Sniper(狙击手)

作为比较常用的模式,Sniper的作用是对其中选定的参数一个一个依次遍历字典并且替换然后测试。sniper只能默认对第一个参数进行修改,而无法对两个参数同时进行爆破。

2.Battering ram(攻城锤)

不同于sniper,Battering ram是两个参数同时进行遍历一个字典的

3.Pitchfork(草叉模式)

Pitchfork作为多字典,他的特点也非常明显,就是多个字典同时进行,与Battering ram有些相似之处,但是一个是多个人跑一个赛道,而一个是多个人,各有各的赛道。

4.Cluster bomb(集束炸弹)(推荐爆破时使用)

Cluster bomb兼备了前面三种模式的所有的功能,那就是全部遍历,不放过所有情况,但是在超大字典的情况下,运算能力就限制了Cluster bomb模式的发挥,所以只要算力足够,那爆破出密码就不是问题。

web21基础爆破工具的使用

1.查看题目

是一道登录题,

此题主要考察基础的爆破

方法一:bp爆破

1:假设已知用户名是admin

2:打开代理和Burp Suite,随便输入密码尝试登陆同时利用Burp Suite抓包。

知识点:Authorization请求头

Authorization请求头用于验证是否有从服务器访问所需数据的权限。

3:得到Authorization: Basic YWRtaW46YWRtaW4= 可以看到他数据包是通过加密发送的,并且前面有Basic,对后面的 进行base64解码查看格为 admin:密码

4:查看Authorization请求头观察发现是base64编码 我们将请求包发送到intruder中,选择sniper模式。选择base64内容Authorization: Basic YWRtaW46YWRtaW4=,添加为playload position

5:然后payload选择Custom iterator,根据已知格式,我们设置第一组payload位账号:admin,第二组一个冒号:,第三组密码:密码字典。 接下来设置Payload Processing的base64加密,点击add,选择encode>Base64-encode,最后将PayLoad Encoding取消选择urlencode加密特俗字符串。

6:进行爆破,找到长度不同的即为正确答案。

找到flag。

方法二:自动爆破脚本

import time#用于延时
import requests#用于发送请求
import base64#用于base64编码

url = 'http://ededa0b4-a3d7-43f0-9f06-c8db1fce2434.challenge.ctf.show/index.php'#放入url

password = []#密码列表


with open("1.txt", "r") as f:  #读取密码字典/1.txt是字典密码
    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)#延时0.2秒
    if rep.status_code ==200:#判断请求是否成功

        print(rep.text)#打印响应内容
        break

web23条件爆破

1.查看题目

substr()函数:

substr( s t r i n g , s t a r t , l e n g t h ) 函数用于从字符串 string, start, length)函数用于从字符串 string,start,length)函数用于从字符串string中提取从start位置开始的length个字符。如果length省略,则默认提取到字符串的末尾。

  • if(substr( t o k e n , 1 , 1 ) = = = s u b s t r ( token, 1,1)===substr( token,1,1)===substr(token, 14,1) && substr( t o k e n , 14 , 1 ) = = = s u b s t r ( token, 14,1) ===substr( token,14,1)===substr(token, 17,1)):

检验$token的第一个字符,第14个字符是否相等,第14个字符和第17个字符是否相等

  • if((intval(substr( t o k e n , 1 , 1 ) ) + i n t v a l ( s u b s t r ( token, 1,1))+intval(substr( token,1,1))+intval(substr(token, 14,1))+substr( t o k e n , 17 , 1 ) ) / s u b s t r ( token, 17,1))/substr( token,17,1))/substr(token, 1,1)===intval(substr($token, 31,1))):

第一个+第14个+第17个=第31个

GET一个参数token,token的MD5加密后的值如果满足下面的判断,就输出flag

用爆破脚本

python脚本
import hashlib#导入hashlib模块
dic = "0123456789qazwsxedcrfvtgbyhnujmikolp"#定义字典

for a in dic:#遍历字典

    for b in dic:#遍历字典
        t = str(a)+str(b)#拼接字符串
        md5 = hashlib.md5(t.encode(encoding='utf-8')).hexdigest()#计算md5值

        if md5[1:2] == md5[14:15] and md5[14:15] == md5[17:18]:#判断md5值是否符合条件

            if int(md5[1:2])+int(md5[14:15])+int(md5[17:18])/int(md5[1:2])==int(md5[31:32]):
                #判断md5值是否符合条件
                print(t)#打印符合条件的字符串
php脚本
<?php
    for($i=0;i<10000;$i++){
        $token=md5($i);
        if(susbtr($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))+intval(substr($token,17,1))/intval(substr($token,1,1))===intval(substr($token,31,1))){
                echo $i;
                echo $token;
            }
        }
    }
?>

web24随机数种子爆破

查看题目

  • 这行代码使用mt_srand函数设置随机数生成器的种子为372619038。这意味着每次以相同的种子初始化后,mt_rand()函数生成的随机数序列将是相同的。
  • 如果随机数种子定了 那么产生的随机数就是确定的

知识点:php伪随机数mt_rand()函数

  • mt_rand()函数

mt_rand()函数使用Mersenne Twister算法生成随机整数。

使用的语法:mt_rand();or mt_rand(min,max);,生成一个区间内的随机数。

其参数min默认为最小值0,max默认为可生成的随机数最大值2147483647,由mt_get randmax()函数获得。

  • mt_srand()函数
  • mt_srand()函数为随机数生成器。提示:从 PHP 4.2.0 开始,随机数生成器自动播种,因此没有必要使用该函数。当不使用随机数播种函数srand时,php也会自动为随机数播种,因此是否确定种子都不会影响正常运行。在php中每一次调用mt_rand()函数,都会检查一下系统有没有播种。(播种为mt_srand()函数完成),当随机种子生成后,后面生成的随机数都会根据这个随机种子生成。所以同一个种子下,随机数的序列是相同的,这就是漏洞点

  • php_mt_seed工具:

  • php_mt_seed是c语言编写的爆破随机数序列种子的工具

我们做一个实验:

<?php
    mt_srand(0);//设置随机数播种为0
    echo mt_rand();
?>
//每次运行都会获得相同的序列    

<?php
    echo mt_rand();
    ?>
    
    //去掉mt_srand()函数后,系统会自动给rand函数播种,但也是播种一次

因此这里是伪随机

所以我们根据给出的种子输出得到的序列就是我们的r值,在URL中填进去就能拿到flag了

web25伪随机数爆破

查看题目

<?php
    error_reporting(0);
    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')
}                                                        
    }?>

mt_srand(hexdec(substr(md5($flag),0,8)));

  • 对flag进行MD5哈希处理,从MD5哈希值的开头截取8个字符(即32位中的前16位),后将处理得到的值进行进制转化,hexdec()函数可以将截取的16位十六进制数转化成十进制数。最后使用转换的十进制数作为种子值来初始化mt_rand()函数的随机数生成器
  • if((!KaTeX parse error: Expected '}', got 'EOF' at end of input: rand)){ if(_COOKIE[‘token’]==(mt_rand()+mt_rand())){echo $flag;

若$rand为0,则执行if语句

解题思路:

1.r=0先回显查看mt_rand()第一次的随机数

2.用php_rand_seed脚本

先用gcc编译脚本gcc -o php_mt_seed php_mt_seed.c

爆破出之前播种的随机数种子的值./php_rand_seed 567219768

seed选择kali工具得到的结果中php7的结果,然后编写php代码得到cookie的值:

<php mt_srand(3147772674); echo mt_rand()." "; echo mt_rand()+mt_rand(); >

在网页cookie中放入得到的值,一个个尝试就可以得到flag了

web26数据库连接信息爆破、

这题抓包就能拿到flag了,有点抽象

web27信息收集+日期爆破

打开靶机,发现是个登录页面,需要学号和密码登录,猜测登录后可获得flag,则可围绕获得学号密码来进行,因为两者都不知道,直接爆破不太合适,看看还能提取到什么信息。

当点击到登录按钮下方的录取名单时,自动下载了一个list.xlsx,打开这个文件,发现了几个人的姓名和身份证号部分信息。点击录取名单下面的学生学籍信息查询系统,发现可以根据学生姓名和身份证号进行录取查询,那么第一步要做的可能就是要爆破身份证号了,或许在这里可以查到有用的信息。

以下载的表格的第一个人为例,录取查询页面姓名栏输入高先伊,身份证输入6210225237

  • 打开抓包工具,如Burpsuit,点击查询,抓到查询发送的请求包,将请求包发送至Intruder攻击模块,将请求包中的&p设置为变量

  • 设置payload

format那栏一定要写yyyyMMdd对应身份证的年月日,然后就开始爆破

爆破后找到长度最长的response,可以看到有success,把下面那串编码复制拿去翻译一下

Unicode-str解码: 恭喜您,您已被我校录取,你的学号为02015237 初始密码为身份证号码

然后我们就尝试登录一下,就可以拿到flag了

web28目录爆破

查看题目

如果直接输 原url/1/2.txt 之类,会进行302跳转,然后跳转就会进入死循环,最后直接打不开

知识点:302跳转

302跳转又称暂时性转移,当网页临时移到新的位置,而浏览器的缓存没有更新时,就出现了302跳转。

302状态码是临时重定向(Move Temporarily),表示所请求的资源临时地转移到新的位置,一般是24到48小时以内的转移会用到302。

302重定向是临时的重定向,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回302代码,搜索引擎认为新的网址只是暂时的。

这里我们对url后面两个目录进行爆破

爆破模式改成Cluster bomb,然后将两个目录添加为变量

将两个变量都设置成numbers,从1到100,然后开始爆破,找到200状态码的就是成功的response,拿到flag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2261921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web项目图片视频加载缓慢/首屏加载白屏

Web项目图片视频加载缓慢/首屏加载白屏 文章目录 Web项目图片视频加载缓慢/首屏加载白屏一、原因二、 解决方案2.1、 图片和视频的优化2.1.1、压缩图片或视频2.1.2、 选择合适的图片或视频格式2.1.3、 使用图片或视频 CDN 加速2.1.4、Nginx中开启gzip 三、压缩工具推荐 一、原因…

Go 语言与时间拳击理论下的结对编程:开启高效研发编程之旅

一、引言 结对编程作为一种软件开发方法&#xff0c;在提高代码质量、增强团队协作等方面具有显著优势。而时间拳击理论为结对编程带来了新的思考角度。本文将以 Go 语言为中心&#xff0c;深入探讨时间拳击理论下的结对编程。 在当今软件开发领域&#xff0c;高效的开发方法和…

SpringBoot集成ENC对配置文件进行加密

在线MD5生成工具 配置文件加密&#xff0c;集成ENC 引入POM依赖 <!-- ENC配置文件加密 --><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.1.2</ver…

el-table 多表头+跨行跨列案例

效果&#xff1a; 代码&#xff1a; index.vue <template><div class"my-table"><el-tablev-loading"table.loading":data"table.data"bordersize"mini":header-cell-style"headerCellStyle":span-method&qu…

基线检查:Windows安全基线.【手动 || 自动】

基线定义 基线通常指配置和管理系统的详细描述&#xff0c;或者说是最低的安全要求&#xff0c;它包括服务和应用程序设置、操作系统组件的配置、权限和权利分配、管理规则等。 基线检查内容 主要包括账号配置安全、口令配置安全、授权配置、日志配置、IP通信配置等方面内容&…

【electron】electron forge + vite + vue + electron-release-server 自动更新客户端

基本信息 electron forge vue页面&#xff08;中文&#xff09;&#xff1a;https://forge.electron.js.cn/guides/framework-integration/vue-3 electron forge vue页面&#xff08;英文&#xff0c;中文版下面的tab无法点击&#xff09;&#xff1a;https://www.electronfor…

ubuntu+ros新手笔记(二):古月·ROS2入门21讲学习笔记

系统ubuntu22.04 ros2 humble 按照如下视频教程学习的&#xff1a;【古月居】古月ROS2入门21讲 | 带你认识一个全新的机器人操作系统 此处仅记录我报错的地方&#xff0c;以及相应的解决方案&#xff0c;没有出错的略过&#xff01; 对应的古月居ROS2入门21讲源码下载地址&a…

IDEA 可视化使用 git rebase 合并分支步骤 使git分支树保持整洁

模拟环境 dev 分支开发完一个功能&#xff0c;需要合并到 master 分支&#xff0c;如果现在直接 merge 合并的话 git分支树会出现杂乱分叉&#xff0c;先把 master 分支 rebase 到 dev git分支树就会是整洁的一条直线 git rebase介绍 rebase:翻译成中文是重新设定&#xff0c;…

Windows环境 (Ubuntu 24.04.1 LTS ) 国内镜像,用apt-get命令安装RabbitMQ,java代码样例

一、环境 Windows11 WSL(Ubuntu 24.04.1) 二、思路 1 用Windows中的Ubuntu安装RabbitMQ&#xff0c;贴近Linux的线上环境&#xff1b; 2 RabbitMQ用erlang语言编写的&#xff0c;先安装erlang的运行环境&#xff1b; 2 用Linux的apt-get命令安装&#xff0c;解决软件依赖…

使用ElasticSearch实现全文检索

文章目录 全文检索任务描述技术难点任务目标实现过程1. java读取Json文件&#xff0c;并导入MySQL数据库中2. 利用Logstah完成MySQL到ES的数据同步3. 开始编写功能接口3.1 全文检索接口3.2 查询详情 4. 前端调用 全文检索 任务描述 在获取到数据之后如何在ES中进行数据建模&a…

CTFHUB-web(SSRF)

内网访问 点击进入环境&#xff0c;输入 http://127.0.0.1/flag.php 伪协议读取文件 /?urlfile:///var/www/html/flag.php 右击查看页面源代码 端口扫描 1.根据题目提示我们知道端口号在8000-9000之间,使用bp抓包并进行爆破 POST请求 点击环境&#xff0c;访问flag.php 查看页…

数据结构 ——前缀树查词典的实现

数据结构 ——前缀树查词典的实现 一、前缀树的概念 前缀树是一种多叉树结构&#xff0c;主要用于存储字符串。每个节点代表一个字符&#xff0c;路径从根节点到叶节点表示一个完整的字符串。前缀树的关键特征是 共享前缀&#xff0c;也就是说&#xff0c;如果两个字符串有相…

React里循环tab列表,并实现点击切换class

介绍 在 React 框架里&#xff0c;通过循环去显示 tab列表的标题&#xff0c;并且添加点击事件&#xff0c;当前点击的tab高亮显示。就像 vue 里 通过 v-for 显示列表并且点击时添加 activeClass 一样。 实现效果 代码 主要通过 map方法来实现列表的循环显示&#xff0c;然后…

selenium 在已打开浏览器上继续调试

关闭浏览器&#xff0c;终端执行如下指令&#xff0c;--user-data-dir换成自己的User Data路径 chrome.exe --remote-debugging-port9222 --user-data-dir"C:\Users\xxx\AppData\Local\Google\Chrome\User Data" 会打开浏览器&#xff0c;打开百度&#xff0c;如下状…

Pytest-Bdd vs Behave:选择最适合的 Python BDD 框架

Pytest-Bdd vs Behave&#xff1a;选择最适合的 Python BDD 框架 Pytest BDD vs Behave&#xff1a;选择最适合的 Python BDD 框架BDD 介绍Python BDD 框架列表Python BehavePytest BDDPytest BDD vs Behave&#xff1a;关键区别Pytest BDD vs Behave&#xff1a;最佳应用场景结…

B站bilibili视频转文字字幕下载方法

本文将讲述介绍一种使用本地工具如何快速的下载B站的字幕为本地文本文件的方法。 通常获取B站字幕需要在浏览器中安装第三方插件&#xff0c;通过插件获取字幕。随着大模型&#xff0c;生成式AI&#xff0c;ChatGPT的应用&#xff0c;B站也提供了AI小助手对视频的内容进行总结…

ElasticSearch的自动补全功能(拼音分词器、自定义分词器、DSL实现自动补全查询、RestAPI实现自动补全查询)

文章目录 1. 什么是自动补全2. 拼音分词器2.1 初识拼音分词器2.2 下载拼音分词器2.3 安装拼音分词器2.4 测试拼音分词器 3. 自定义分词器3.1 拼音分词器存在的问题3.2 分词器&#xff08;analyzer&#xff09;的组成3.3 如何自定义分词器3.4 拼音分词器的可选参数3.5 配置自定义…

day12 接口测试 ——入门→精通→实战(1)

【没有所谓的运气&#x1f36c;&#xff0c;只有绝对的努力✊】 目录 1、接口测试分类 1.1 内部接口&#xff1a; 1.2 外部接口&#xff1a; 2、目前接口架构设计 2.1、基于SOAP架构&#xff0c; 2.2、基于RPC架构&#xff0c; 2.3、基于RestFul架构&#xff0c; 2.3.1…

54、库卡机器人轴的软限位设置

步骤1&#xff1a;将用户组改为“专家”。 步骤2&#xff1a;点击“投入运行”----“售后服务”-----“软件限位开关” 步骤3&#xff1a;就可以针对每个轴修改对应的角度值&#xff0c;然后点击“保存”。

PHP+MySQL 学生信息管理系统

目录 MySQL建表指令 主页面展示 主页面源代码如下 增&#xff1a;添加学生信息 添加html如下 html&#xff1a;主要用于显示网页内容 成功添加后回显 ​编辑 增加php如下 删&#xff1a;删除学生信息 删除html如下 成功删除后回显 删除php如下 改&#xff1a;修改学…