当前位置: 首页 > news >正文

Pikachu Burte Force(暴力破解)

一、Burte Force(暴力破解)概述

​ “暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。

​ 理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:

​ 1.是否要求用户设置复杂的密码;
​ 2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
​ 3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
​ 4.是否采用了双因素认证;

1. 基于表单的暴力破解

打开bp,抓包,发送到Intruder模块:

image-20230915195415552

进入Intruder界面,我们对我们要进行破解的数据段进行标记(所有的攻击都是针对于标记内容的)并且选择相应的Attack type(攻击类型)(burp suite的四种 attack type(攻击类型))

们要破解username和password,就应当选取Cluster bomb的攻击方式,在payloads中上传我们的字典,首先在payload set 1中上传username的字典,再选取payload set 2上传password的字典。考虑到用户名和密码有特殊符号的情况,这里把URL-encode去除勾选。
image-20230915195641468

image-20230915195652338

image-20230915195716105

然后点击start attack开始爆破,最后根据爆破的长度结果,筛选出正确的用户名和密码。(爆破的原理就是将字典中的数据一次次的进行不同的组合发送响应,根据返回的报文长度来判断结果是否正确,正确的返回报文和错误的返回报文是不同的。)

image-20230915195824373

成功登录

image-20230915195907407

2.验证码绕过(on server)

​ 首先我们对各种情况的返回进行观察,当我们输入错误的账号密码和错误的验证码时,它提示我们验证码输入错误。输入错误的账号密码,但是正确的验证码时, 它又提示我们用户名和密码不存在,并且每次提交登录请求后验证码都会刷新。

image-20230915200240657

那有没有一种可能,如果我不刷新网页或者提交请求,验证码就会一直有效,我也就可以通过上一关的步骤来进行爆破。

​ 我们来验证一下,我们将随便一个包send to repeater,将验证码改完现在页面中显示的值,send,在response中查找一下username or password, 有这段数据,证明现在这个二维码是正确的。

image-20230915200652856

我们不改动现在的验证码,再把密码改一下,再次send,发现返回的还是username or password is not existed,说明验证码还是对的。

image-20230915200733809

这就说明我们的猜想是正确的,只要页面不刷新,我们不提交请求,验证码就可以在bp中多次使用,那我们直接在repeater中把现在的请求包send to intruder,重复上一关的步骤,果然还是这个用户名和密码。

image-20230915201001297

代码分析:

if(isset($_POST['submit'])) {if (empty($_POST['username'])) {$html .= "<p class='notice'>用户名不能为空</p>";} else {if (empty($_POST['password'])) {$html .= "<p class='notice'>密码不能为空</p>";} else {if (empty($_POST['vcode'])) {$html .= "<p class='notice'>验证码不能为空哦!</p>";} else {
//              验证验证码是否正确if (strtolower($_POST['vcode']) != strtolower($_SESSION['vcode'])) {$html .= "<p class='notice'>验证码输入错误哦!</p>";//应该在验证完成后,销毁该$_SESSION['vcode']}else{$username = $_POST['username'];$password = $_POST['password'];$vcode = $_POST['vcode'];$sql = "select * from users where username=? and password=md5(?)";$line_pre = $link->prepare($sql);$line_pre->bind_param('ss',$username,$password);if($line_pre->execute()){$line_pre->store_result();//虽然前面做了为空判断,但最后,却没有验证验证码!!!}}}
}

我们查看一下源代码我们可以看到在代码判断验证码是否正确后,并没有销毁之前的验证码,这就让我们钻了空子, 并且我们在页面F12就可以在cookie中看到所有输入过的验证码,这说明在生成验证码的时候,制作者还多此一举的把验证码作为cookie的一部分发送给了客户端,那就算在判断阶段有销毁步骤,攻击者也可以通过document.cookie获取到验证码从而实现爆破。

验证码绕过(on client)

​ 老规矩,我们先观察。

​ 我们输入正确的验证码,错误的用户名和密码。提示的是用户名和密码不存在

​ 我们再输入错误的验证码和错误的用户名和密码。这次是弹窗显示验证码错误,错误的用户名和密码也没有像之前一样清除。

F12检查网页源代码,我们可以找到前端校验验证码的js脚本

image-20230915203016004

既然是前端检测,那我们只需要用bp发送请求报文绕过前端就行了,依旧是重复第一步的步骤。(这里就不赘述了)捎带一提,任何前端的校验对于防止安全攻击都是靠不住的!

token防爆破?

​ 先观察,这一关没有了验证码,输入错误的用户名和密码还是会提示不存在。

既然和token相关那我们就用不一样的值登陆两次看看抓到的报文有什么不同,可以发现确实两次的token不同。

image-20230915203423286

image-20230915203452867

右键发送给测试器,先取消所有标记,然后给密码和token单独设置标记。

image-20230915204750159

  • 设置变量。这里为了减少攻击次数,可以把账号修改为 admin,只将密码和 token设置成变量,攻击类型选择 Pitchfork,因为每次的密码和 token需要同时替换,而不能组合使用。

image-20230915211438017

  • 设置宏定义。点击 settings选项,下拉找到 Grep Extract栏,点击Add,在弹出的窗口中点击 Refetch response发一次包并获得返回数据,在下面输入栏处输入 token,找到返回的 token

image-20230915211542479

  • 选中 token值并复制,同时在选中的情况下点击OK。然后将线程数设置为1,并在最下方 Redirections重定向栏,选择 Always

image-20230915211750652

image-20230915211605198

最后将前面复制的 token值粘贴在下方文本框

image-20230915211933715

  • 最后开始攻击,并根据返回长度判断是否爆破成功即可

image-20230915212010776

总结

  • 设计安全的验证码:安全的流程+复杂可用的图形
  • 对认证错误的提交进行计数并给出限制,如5次连续密码错误时锁定该IP一定时间
  • 必要情况下使用双因素认证
    回长度判断是否爆破成功即可

[外链图片转存中…(img-hOwNxitH-1694785315207)]

总结

  • 设计安全的验证码:安全的流程+复杂可用的图形
  • 对认证错误的提交进行计数并给出限制,如5次连续密码错误时锁定该IP一定时间
  • 必要情况下使用双因素认证
  • token防爆破:一般做法是将 tokentype="hidden"的形式输出在表单中,在提交认证时一起提交,并在后台对其进行校验。但由于 token值输出在了前端源码中,容易被获取,因此也就失去了防暴力破解的意义。

相关文章:

Pikachu Burte Force(暴力破解)

一、Burte Force&#xff08;暴力破解&#xff09;概述 ​ “暴力破解”是一攻击具手段&#xff0c;在web攻击中&#xff0c;一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录&#xff0c;直到得到正确的结果。 为了提高…...

SpringMVC之JSON返回及异常处理

目录 JSON处理 导入依赖 配置Spring-mvc.xml ResponseBody注解使用 测试 目录 JSON处理 导入依赖 配置Spring-mvc.xml ResponseBody注解使用 测试 Jackson 定义 用法 常用注解 统一异常处理 为什么要全局异常处理&#xff1f; 异常处理思路 SpringMVC异常分类 综…...

SkyWalking快速上手(六)——告警

文章目录 前言一、什么是SkyWalking的告警功能二、为什么要使用SkyWalking的告警功能1. 及时发现异常情况2. 提高故障处理效率3. 避免数据丢失和损坏4. 提升系统性能和稳定性 三、如何使用SkyWalking的告警功能1. 告警规则2. 告警通知3. 告警持续时间 四、注意事项1、合理设置告…...

docker run:--privileged=true选项解析(特权模式:赋予容器几乎与主机相同的权限)

文章目录 Docker的--privilegedtrue选项1. Docker 容器的安全性1.1 Linux Namespace 和 Capabilities1.2 限制和权限 2. Docker的--privilegedtrue选项2.1 --privilegedtrue的作用2.2 --privilegedtrue的风险 3. 结论 Docker的–privilegedtrue选项 Docker在创建和运行容器时&…...

计算机专业毕业设计项目推荐06-工作室管理系统(Java+Vue+Mysql)

工作室管理系统&#xff08;JavaSpringVueMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现****最后想说的****联系方式** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较…...

Python 文件的读写操作

文章目录 1. 文件对象1.1 文件打开方式1.1.1 打开文件1.1.2 关闭文件1.1.3 访问模式 1.2文件读取1.2.1 read()1.2.2 readline()1.2.3 readlines() 1.3 文件迭代1.4 文件输入1.4.1 write()1.4.2 writelines() 1. 文件对象 文件读写操作&#xff1a; 把大象放冰箱里&#xff0c…...

多线程回顾、集合Collection、Set、List等基本知识

多线程回顾 问: 多线程的两种创建方式? 继承Thread类实现Runnable接口线程池Callable 问:多线程通常会遇到线程安全问题? 什么情况下会遇到线程安全问题? 答:一个数据被多个线程访问(有读有写) 解决这个问题的方式? SE:同步锁 synchronized A : 同步代码块 B : 同步方法…...

分享5款用起来很好用的软件,总有一款适合你

很多软件用起来很好用&#xff0c;但是由于这样那样的原因&#xff0c;一直没什么知名度&#xff0c;但是不代表它们不好用&#xff0c;我的任务就是把这些宝藏分享给大家。 1.图像处理——Photoscissors Photoscissors是一款在线图像背景移除工具&#xff0c;可以让你轻松地从…...

大数据学习1.5-单机Hadoop

1.修改主机信息 vi /etc/hosts 2.修改信息如下(这里第三位一定是自己的IP 每个人都不一样) 192.168.216.140 hadoop01 192.168.216.141 hadoop02 192.168.216.142 hadoop033.修改Hadoop配置信息-1进入配置信息文件 cd /usr/local/hadoop/hadoop-2.7.1/etc/hadoop/ 4.修改Had…...

Cesium对实体元素鼠标点击popup div信息框

一、简介 设置div信息框模板,给实体元素绑定事件,同步空间位置,然后在回调函数弹出信息框。 二、示例源码 <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" …...

有多条业务线,mysql建多库多表比较好还是一个库多个表比较好呢?

这个问题的答案取决于您的具体需求。以下是一些需要考虑的因素&#xff1a; 数据独立性&#xff1a;如果您的业务线之间的数据是独立的&#xff0c;并且不太可能需要进行跨业务线的查询&#xff0c;那么将它们分成多个数据库可能是有意义的。这样可以使每个业务线的数据更加独…...

C++---异常处理

异常处理 异常处理try语句块和throw表达式异常的抛出和捕获异常的抛出和匹配原则 异常安全异常规范标准异常 异常处理 异常是指存在于运行时的反常行为&#xff0c;这些行为超出了函数正常功能的范围。当程序的某部分检测到一个他无法处理的问题时&#xff0c;需要用到异常处理…...

接口自动化测试(Python+Requests+Unittest)

(1)接口自动化测试的意义、前后端分离思想 接口自动化测试的优缺点&#xff1a; 优点&#xff1a; 测试复用性。 维护成本相对UI自动化低一些。 为什么UI自动化维护成本更高&#xff1f; 因为前端页面变化太快&#xff0c;而且UI自动化比较耗时&#xff08;比如等待页面元素的…...

驱动开发,IO多路复用(select,poll,epoll三种实现方式的比较)

1.IO多路复用介绍 在使用单进程或单线程情况下&#xff0c;同时处理多个输入输出请求&#xff0c;需要用到IO多路复用&#xff1b;IO多路复用有select/poll/epoll三种实现方式&#xff1b;由于不需要创建新的进程和线程&#xff0c;减少了系统资源的开销&#xff0c;减少了上下…...

大数据-玩转数据-oracel字符串分割转化为多列

一、建表 create table split_string_test(id integer primary key,test_string varchar2(500) );二、插入测试数据 insert into split_string_test values(1, 10,11,12,13,14,22); insert into split_string_test values(2, 22,23,24); insert into split_string_test valu…...

GCP设置Proxy来连接Cloud SQL

在之前的文章用Google CDC来同步Cloud SQL的数据到Bigquery_gzroy的博客-CSDN博客中&#xff0c;我通过在一个VM上设置反向代理的方式&#xff0c;使得Datastream可以通过私用连接连到Cloud SQL数据库进行数据复制。但是这种方式不太方便&#xff0c;主要是VM的状态我们不太方便…...

Python:为何成为当下最热门的编程语言?

文章目录 &#x1f34b;引言&#x1f34b;1. 简单易学&#x1f34b;2. 多领域应用&#x1f34b;3. 强大的社区支持&#x1f34b;4. 丰富的库和框架&#x1f34b;5. 跨平台兼容&#x1f34b;6. 开源和免费&#x1f34b;7. 数据科学和人工智能的崛起&#x1f34b;8. 自动化和脚本…...

【echarts入门】:vue项目中应用echarts

一.安装echarts 在项目集成终端下载echarts npm install echarts --save 二.全局引入 创建/components/echarts/index.js // 引入 echarts 核心模块&#xff0c;核心模块提供了 echarts 使用必须要的接口。 import * as echarts from "echarts/core";/** 引入任…...

Seata 源码篇之AT模式启动流程 - 上 - 02

Seata 源码篇之AT模式启动流程 - 02 自动配置两个关键点 初始化初始化TM初始化RM初始化TC 全局事务执行流程TM 发起全局事务GlobalTransactional 注解处理全局事务的开启 TM 和 RM 执行分支事务IntroductionDelegatingIntroductionInterceptorDelegatePerTargetObjectIntroduct…...

FFMPEG视频压缩与Python使用方法

一、简介 FFMPEG 是一个完整的&#xff0c;跨平台的解决方案&#xff0c;记录&#xff0c;转换和流音频和视频。 官网&#xff1a;https://ffmpeg.org/ 二、安装 1、Linux&#xff1a; sudo apt install ffmpeg 2、Mac: brew install ffmpeg 3、Windows: 下载文件&#…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...