Pikachu Burte Force(暴力破解)

news2024/11/23 16:27:11

一、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值输出在了前端源码中,容易被获取,因此也就失去了防暴力破解的意义。

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

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

相关文章

RFID与人工智能怎么融合,RFID与人工智能融合的应用

随着物联网技术的不断发展&#xff0c;现实世界与数字世界的桥梁已经被打通。物联网通过各种传感器&#xff0c;将现实世界中的光、电、热等信号转化为有价值的数据。这些数据可以通过RFID技术进行自动收集和传输&#xff0c;然后经由人工智能算法进行分析、建模和预测&#xf…

uniapp cli创建 vue3 + typeScript项目 配置eslint prettier husky

1 命令创建项目 npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project2 下载依赖 npm install3 填写appid 4 运行项目并且微信开发工具打开 npm run dev:mp-weixin5 安装 vscode 插件 安装 **Vue Language Features (Volar)** &#xff1a;Vue3 语法提示插件 安装 *…

伦敦银一手是多少?

伦敦银是以国际现货白银价格为跟踪对象的电子合约交易&#xff0c;无论投资者通过什么地方的平台进入市场&#xff0c;执行的都是统一国际的标准&#xff0c;一手标准的合约所代表的就是5000盎司的白银&#xff0c;如果以国内投资者比较熟悉的单位计算&#xff0c;那约相当于15…

http客户端Feign使用

一、RestTemplate方式调用存在的问题 先来看我们以前利用RestTemplate发起远程调用的代码&#xff1a; String url "http://userservice/user/" order.getUserId(); User user restTemplate.getForObject(url, User.class);存在下面的问题&#xff1a; 代码可读…

Mosh Java课程自学(一)

目录 一、前言 二、全局介绍 三、Types 一、前言 首先推荐一下B站上转载的Mosh讲Java课程&#xff0c;当然&#xff0c;建议有一定基础并且英文水平尚可的同学学习&#xff0c;否则你可能会被搞得很累并逐渐失去对编程的兴趣。 Mosh 【JAVA终极教程】中英文字幕 高清完整版…

口袋参谋:如何高效一键下载真实买家秀?

​在淘宝天猫上&#xff0c;即使卖一支笔都有上万个宝贝竞争&#xff0c;所有卖家拼的就是权重带来的曝光度&#xff0c;能展示给买家多少&#xff0c;自己收获多少流量。 如何用自己的优势将流量访客转化为顾客&#xff0c;提升店铺的转化率。而买家秀&#xff0c;就是为此而生…

Java常用类之 String、StringBuffer、StringBuilder

Java常用类 文章目录 一、字符串相关的类1.1、String的 不可变性1.2、String不同实例化方式的对比1.3、String不同拼接操作的对比1.4、String的常用方法1.5、String类与其他结构之间的转换1.5.1、String 与基本数据类型、包装类之间的转换1.5.2、String 与char[]的转换1.5.3、…

ipad可以使用其他品牌的手写笔吗?开学平价电容笔推荐

新学期已经来临&#xff0c;相信不少同学已经开始着手筹备新学期的该准备什么了&#xff0c;毕竟原装的苹果Pencil&#xff0c;功能强大&#xff0c;但价格昂贵&#xff0c;一般人根本买不起。那么&#xff0c;有没有像苹果原装那样的电容笔呢&#xff1f;当然是有的。国产的平…

长安链上线可视化敏捷测试工具v1.0版本

开发者对区块链底层平台进行初步的了解后&#xff0c;一项经常会涉及到的工作是对平台进行测试以考量其性能及稳定性是否符合自身使用需求。长安链推出了可视化UI操作界面的区块链敏捷测试工具v1.0版本&#xff0c;当前版本可对内置合约进行压测并生成网络拓扑图以验证组网方式…

免费开箱即用微鳄售后工单管理系统

编者按&#xff1a;本文介绍基于天翎MyApps低代码平台开发的微鳄售后工单管理系统&#xff0c; 引入低代码平台可以帮助企业快速搭建和部署售后工单管理系统&#xff0c; 以工作流作为支撑&#xff0c;在线完成各环节数据审批&#xff0c;解决售后 工单 服务的全生命周期过程管…

《2023中国氢能源行业分析报告》丨附下载_三叠云

✦ ✦✦ ✦✦ ✦✦ ✦ 1. 国内氢能政策梳理 直接涉及氢能政策&#xff1a;1&#xff09;21年以来&#xff0c;发布国家级10个、省级83个、 市县级252个&#xff1b;2&#xff09;涉及发展规划占比45%、财政支持占比 20%、项目支持占比17%、管理办法占比16%、 氢能安全和标准占…

公私钥非对称加密 生成和验证JSON Web Token (JWT)

前言 这是我在这个网站整理的笔记&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 公私钥非对称加密 生成和验证JSON Web Token 什么是JSON Web Token (JWT)Java程序中生成和验证JWT代码解析 什么是JSON Web Token (JWT) JSON Web Tok…

【C++】泛型算法(二)泛型指针Iterator(迭代器)

迭代器iterator定义 迭代器是一种检查容器内元素并遍历元素的数据类型&#xff1b;迭代器提供一个对容器对象或者string对象的访问方法&#xff0c;并定义了容器范围&#xff1b;迭代器的使用可以提高编程的效率。 其定义应该提供&#xff1a; 迭代对象&#xff08;某个容器&a…

拆贡献算总和(抓住双射)+竞赛图与连通分量相关计数:arc163_d

https://atcoder.jp/contests/arc163/tasks/arc163_d 首先竞赛图有个性质&#xff1a; 然后有了这个性质&#xff0c;我们就可以考虑计数题的经典套路&#xff0c;拆贡献算总和。 考虑假如我们成功划分成两个集合 A , B A,B A,B&#xff0c;其中一个可以为空&#xff08;我们…

Qt --- Day02

实现效果&#xff1a; 点击登录&#xff0c;检验用户密码是否正确&#xff0c;正确则弹出消息框&#xff0c;点击ok转到另一个页面 不正确跳出错误消息框&#xff0c;默认选线为Cancel&#xff0c;点击Yes继续登录 点击Cancel跳出问题消息框&#xff0c;默认选项No&#xff0c…

netty之pipeline

Netty抽象出流水线(pipeline)这一层数据结构进行处理或拦截channel相关事件。 事件分为入站事件(inBound event)和出站事件(outBound event)的ChannelHandlers列表。ChannelPipeline使用先进的Intercepting Filter模式&#xff0c;使用户可以完全控制如何处理事件以及管道中的…

全流程GMS地下水数值模拟及溶质(包含反应性溶质)运移模拟技术教程

详情点击公众号链接&#xff1a;全流程GMS地下水数值模拟及溶质&#xff08;包含反应性溶质&#xff09;运移模拟技术教程 前言 GMS三维地质结构建模 GMS地下水流数值模拟 GMS溶质运移数值模拟与反应性溶质运移模 详情 1.GMS的建模数据的收集、数据预处理以及格式等&#xff…

2023/9/18 -- C++/QT

作业 完善登录框 点击登录按钮后&#xff0c;判断账号&#xff08;admin&#xff09;和密码&#xff08;123456&#xff09;是否一致&#xff0c;如果匹配失败&#xff0c;则弹出错误对话框&#xff0c;文本内容“账号密码不匹配&#xff0c;是否重新登录”&#xff0c;给定两…

《Linux运维总结:Centos7.6之OpenSSH7.4升级版本至9.4》

一、环境信息 操作系统&#xff1a;Centos7.6.1810 OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 如下图所示&#xff1a; 注意&#xff1a;升级后由于加密算法的区别&#xff0c;低版本的SSH工具可能无法连接&#xff0c;建议改用Xshell7或SecureCRT9.0以上版本。 二、注意事项 1、检…