利用暴力攻击破解登陆密码

news2024/11/28 14:45:42

长久以来,入侵远程计算机系统的工具和技术并没有发生翻天覆地的变化。例如,在许多情况下,普通用户只要知道了相关密码,就能立刻变身为管理员。虽然这些情形听起来不够曲折,但在大多数情况下,暴力攻击是通过利用密码管理缺陷来入侵系统的最简单实用的方法。

实际上,Web应用程序和Web服务很容易被密码暴力攻击所攻陷。之所以出现这种情况,是因为这种类型的软件相对容易访问,数量也很多,同时默认情况下允许远程使用,而且大部分都是自定义的,此外,它们还会随着层出不穷的Web技术而不断变化。在这篇文章中,我们将从实战的角度出发,介绍针对不同类型的Web应用程序的暴力攻击方法。与此同时,我们还将借助现成的免费网络安全工具,如AppBandit攻击代理或某些在线Fuzzer来展示攻击过程。

基本身份验证


自万维网初期开始,基本身份验证及其变体(如摘要认证,NTLM等)就成为了事实上的认证标准。在实践中,人们很早就认识到基本身份验证方式并不太安全,但开发人员好像对它情有独钟,依旧乐此不倦地讲起应用于路由器管理界面、Web服务、管理界面等。该方案之所以流传甚广,原因之一就是因为它相对比较简单,因为整个身份验证方案仅靠一个特殊构造的头部就能得以实现,即利用该头部存放以base64格式编码的用户名和密码即可。

下面,让我们介绍针对基本身份验证的暴力攻击。为此,我们可以使用AppBandit的Fuzzer或其他在线Fuzzer,只要配置相应的参数就行了。首先,我们需要设置Authorization头部,然后添加基本身份验证信息,当然,这些都是专门针对这个特定任务而构建的。

 

对于用户名,为简单起见,这里将使用一个由已知帐户组成的列表。当然,我们也可以使用某些著名的数据库所提供的通用字典。

 

对于密码,我们可以使用字典。实际上,AppBandit和Fuzzer不仅可以使用自身的字典,同时,还可以下载并使用安全社区提供的各种字典文件。为此,可以从下拉菜单中添加一个字典项目,然后搜索“password”,即可找到由最常用的密码组成的列表,以及从以往著名的数据泄露事件中收集的实际密码所组成的列表。

 

暴力破解密码时,请务必将最大并行请求数设为60或更大,并将超时时间减少为5秒,以提高攻击性能。过了一会儿,我们就找到了正确的密码——密码可以从响应代码中看到,具体如下图所示。

 

基于Pin的身份验证


许多应用程序,尤其是移动应用程序会使用一种基于PIN的身份验证方法,即使用4至6位数字代码进行认证。此外,对于那些通过电子邮件或短信发送令牌而进行的双因子身份验证来说,也属于这种类型,因为该方案的实现大都存在安全漏洞。即便如此,人们还是经常误以为PIN提供的低熵是安全的。但是,实际上只要对Pin进行暴力猜解,无论是以顺序方式还是随机方式进行,都可以轻而易举的破解它。

下面,我们以一个假想的JSON服务为例,来演示如何实施这种攻击。首先,需要配置好请求报文,以使其符合该服务的要求。在Body选项卡中,我们需要对Pin生成器进行相应的编码处理。首先,使用JSON编码器来处理这个值。然后,使用一个格式项对它进行填充,使其长度符合Pin的长度要求。这些处理在后面是非常有用的。

 

在pad项中包含了一个简单的计数器,例如for循环。计数器从0开始,遍历到9999为止,步长为1。这里之所以使用这个pad项,是因为有效的Pin必须是4位数字。所以,需要用0覆盖所有不足四位的数字。当然,这种方法同样也可以用来处理6位和8位数字的Pin。

 

接下来,根据需要设置攻击选项——即增加并发请求数和减少超时。然后,执行攻击。需要注意的是,在前面针对基本认证的暴力攻击中,使用了一种基于状态代码的机制,破解成功与否一目了然;于此不同,要想知道针对基于Pin的身份认证的攻击尝试是否成功,还得在应用程序本身上下功夫,也就是说需要自己去试探。举例来说,可以监视内容长度的变化或状态码的变化,例如302重定向可能意味着验证成功。此外,还可以根据响应的返回时间对其进行分类,即时间试探法。当然,具体方式完全由读者自己来定,不过在原理上都是一致的——试探法。

上面的配置,也适用于基于表单的身份验证,甚至基本身份验证——唯一不同之处,就是根据具体情况将生成器移动到所需的地方即可,其余部分完全相同。

基于表单的身份验证


毫无疑问,基于表单的身份验证是网上最常见的身份验证方案。实际上,几乎所有PHP应用程序对于这个方案的实现都不太理想。如果正确的实现的话,基于表单的身份验证应该对自动化的密码猜测具有很强的“弹性”,但是说起来容易做起来难呀,毕竟现实中有太多的特殊情况,而这些都是需要给予特殊处理的。

在针对基于表单的身份验证进行暴力破解时,具体设置与基本身份验证示例中的类似。不过,这里没有使用Authorization头部,因为必须按照应用程序的具体情况来设置参数。首先,可以通过AppBandit代理或HTTPView等工具捕获这些信息,注意,这些工具可以直接从浏览器中运行,而无需进行额外的设置。

在进行暴力破解时,脑子一定要灵光,特别是用户名是电子邮件的时候。例如,与其用大量密码来暴力破解一个账户,不如用一部分最常用的密码来暴力破解多个账户,同时,我们还可以动态生成帐户,就像我们接下来要做的那样。

下面,我们来为用户列表设置一个生成器。首先,我们可以定义一些变量,以提高攻击的可配置性。

 

如您所见,这里正在使用字典(大部分来自seclists)。同时,我们还动态生成了电子邮件地址。实际上,我们可以在同一次攻击中使用多个字段。

现在,让我们向同一个列表中添加100个更常用的密码。在这里,我们使用了来自seclists的另一个字典,具体如下图所示。就像您看到的那样,这种做法不仅更有创意,也更高效。

 

攻击一旦开始,就需要密切关注任务的运行情况,努力寻找提示登陆成功的线索。当然,对于大多数响应来说,结果都是一样的。对于那些包含有效凭证的请求,可以按照我们前面介绍过的那些方法进行识别。然而,有时候您需要找到自己的识别方法。不过,大多数情况下,使用内置过滤器就足以应付了。例如,您可以过滤包含有效cookie的响应,因为一般来说,找到这样的响应就表示认证成功了。

与身份验证有关注意事项


从某种意义上来说,Web认证系统非常有(gao)趣(xiao)——它们永远不可能完美。这是因为,如果它们太安全,那么就根本无法访问了。反之,如果它们太容易访问,就不太可能是安全的。因此,在使用上述任何技术破解密码时,对于下面这些事项一定要做到心里有数。

在防范暴力破解方面,最常见防御机制就是帐户锁定,然而,在某些情况下,攻击者可以利用这种机制来发动拒绝服务攻击。例如,假设用户名是可猜测的或顺序的,并设置了帐户锁定。那么,如果我们在生成有效用户名方面具有很高的胜率,这就意味着我们也可以将这些人都锁定在系统之外,即拒绝服务攻击。尽管这种攻击威胁不是很大,但仍不失为一个有效的漏洞。

同时,水平和垂直暴力攻击之间的转换也是一种常见的技术。换句话说,我们可以针对多个帐户测试一个密码,而不是针对单个帐户尝试多个密码,因为我们可以枚举帐户或以高胜率的方式生成它们。

如果某些合法的身份认证尝试来自同一个IP地址的话,有的身份认证系统就会简单粗暴地将其锁定。后来,这些系统又通过设置一些例外情况来放宽了这一限制,因为毕竟IPv4地址空间是相对较小的,所以许多客户会共享同一个IP地址——例如,许多移动网络和光纤网络实际上都是这样运作的。所以,攻击者就可以入侵例外列表中的网络,或设法让应用程序误以为他们来自例外列表中的网络,这样就可以绕过帐户锁定限制了。

类似地,如果身份验证系统根据攻击者的IP地址来阻止IP或NETBLOCK的话,那么暴力破解攻击就可能转换为拒绝服务攻击,从而导致同一网络中的所有用户都无法登录。再次重申,这对于移动网络来说影响特别大,因为移动用户不太可能拥有专用的公共IP地址,所以移动应用程序特别容易受到这个问题的影响。

最后,不要仅仅因为页面上有reCAPTCHA就认为必须使用验证码,相反,很多时候它在那里只是个摆设而已。这是因为,reCAPTCHA或其他CAPTCHA系统通常都是嵌入式的,它们经常因配置错误或代码变化的缘故而不进行相关的检查,这种情况经常发生。

实际上,有时解除身份验证并不起作用,也就是说,虽然看起来用户已注销,但实际会话并未被破坏。这样的话,以前使用的会话可能被攻击者重新使用。然而,这个话题实在有点大,需要单独进行解释。在这里,重点是要知道,有时即使不知道密码也能登录,因为还有其他方法。

小结

攻击者可以通过多种方式来完成密码破解/暴力破解,就像前面所说的那样,这种攻击是非常普遍的。到目前为止,还没有找到能够完全抵御这种攻击的安全措施。坦率地说,只要我们有赖于密码,这种攻击就无法避免。毫无疑问,双因子认证方案能够提供更高的安全性,但我们也必须承认,它也不是万能的灵丹妙药,因为在某些情况下,它们照样可以被绕过。

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

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

相关文章

Kubernetes第3天

第五章 Pod详解 本章节将详细介绍Pod资源的各种配置(yaml)和原理。 Pod介绍 Pod结构 每个Pod中都可以包含一个或者多个容器,这些容器可以分为两类: 用户程序所在的容器,数量可多可少 Pause容器,这是每个…

JavaScript实现水印效果

效果 实现思路 利用canvas绘制出文字将canvas作为遮罩层背景图, 将背景x轴和y轴重复 实现步骤 动态生成canvas并画出文字 const canvas document.createElement("canvas"); canvas.width len * fontSize; // canvas宽度, 目前是根据文字长度和大小来调整的, 自…

Postman调试依赖登录接口的3种方法

在接口测试种, 我们经常会遇到有些接口登录后才能访问.我们在使用Postman调试这种接口时一般有3种方法: 1.依次请求 如果有登录接口的文档,或者通过抓包比较容易抓出登录请求的参数和格式,可以先使用Postman请求一下登录接口,这时Cookies会存到本地(可以通过Postman Cookies管理…

JVM学习(十一):对象的实例化内存布局与访问定位

目录 一、对象的实例化 1.1 创建对象的方式 1.2 创建对象的步骤 二、对象的内存布局 2.1 对象头 2.1.1 运行时元数据(Mark Word) 2.1.2 典型指针 2.2 实例数据(Instance Data) 2.3 对齐填充(Padding&#…

一个奇葩的网络问题,把技术砖家“搞蒙了“

问题现象 客户反馈有一个server端S, 两个client端C1, C2, S的iptables规则对C1, C2都是放通的,但是C2无法连接上S,客户很着急,催我们尽快解决。 这里解释一下,iptables规则是防火墙规则,是linux系统实现防…

【C++刷题集】-- day1

目录 选择题 单选 编程题 组队竞赛⭐ 【题目解析】 【解题思路】(排序 贪心) 删除公共字符⭐ 【题目解析】 【解题思路】(哈希映射) 选择题 单选 1、 以下for循环的执行次数是 ( ) for(int x 0, y 0; (y 123) && (x < 4); x); 是无限循环 循环次数不…

Leetcode刷题之有效的括号

我们的内心和心智&#xff0c;是决定我们未来命运的最强劲的力量。 -- 奥普拉温弗瑞目录 &#x1f341;一.有效的括号 &#x1f34d;1.使用栈实现 &#x1f352;2.完整代码&#xff1a; 题目描述&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0…

Sonar Qube代码质量检测工具安装及基本使用

Sonar介绍 Sonar Qube是一个开源的代码分析平台&#xff0c;支持Java、Python、PHP、JavaScript、CSS等25种以上的语言&#xff0c;可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。 Sonar Qube可以与多种软件整合进行代码扫描&#xff0c;比如Maven&#xff0c;…

算法套路十七——买卖股票问题:状态机 DP

算法套路十七——买卖股票问题&#xff1a;状态机 DP 状态机DP是一种将动态规划方法应用于有限状态机&#xff08;Finite State Machine&#xff09;的问题求解方法。 状态机DP&#xff08;State Machine DP&#xff09;是一种动态规划的思想&#xff0c;它通常用于解决一些具…

行动元宣布推出面向精密制造领域的智能运动控制解决方案

近日&#xff0c;AI 工业工程化平台行动元宣布推出面向精密制造领域的智能运动控制解决方案。该方案融合大数据模型、数字孪生以及人工智能技术&#xff0c;通过数字化建模、适配、调试等过程&#xff0c;极大提升终端设备集成方案的设计、选型与测试效率&#xff0c;并通过算法…

你不学,我不学,谁来网安,谁来保卫国家!

一、为什么选择网络安全&#xff1f; 这几年随着我国**《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》**等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前…

PCL点云库(6) — Filters模块空间裁剪器类

目录 6.1 3D包围盒裁剪器Class BoxClipper3D< PointT > 6.2 平面裁剪器Class pcl::PlaneClipper3D< PointT > 6.3 立方体过滤Class pcl::CropBox< PointT > 6.4 曲面或多边形过滤 Class pcl::CropHull< PointT > 6.5 完整代码 6.1 3D包围盒裁剪器…

C语言基础:static关键字

本文结合工作经验&#xff0c;研究C语言中static关键字的用法。 文章目录 1 static关键字概念2 用法与使用场景2.1 修饰全局变量2.1.1 代码示例2.1.2 使用场景 2.2 修饰函数2.2.1 代码示例2.2.2 使用场景 2.3 修饰局部变量2.3.1 代码示例2.4.2 使用场景 3 总结 1 static关键字…

第13章:存储过程和存储函数

一、存储过程 1.1理解 含义&#xff1a; 存储过程stored procedure&#xff0c;思想是一组经过预先编译的SQL语句的封装。 存储过程预先存储在MySQL服务器上&#xff0c;需要执行的时候&#xff0c;客户端向服务器端发出调用存储过程的命令&#xff0c;服务器段把这组SQL执…

当我和ChatGPT-4聊完后,我觉得一切可能已经来不及了

飞机上有wifi&#xff0c;了然无味&#xff0c;在万米高空&#xff0c;和ChatGPT-4开始了一场坦诚的沟通&#xff0c;它全程都表现出高情商&#xff0c;以及不断尽量安抚我的情绪&#xff0c;而这&#xff0c;恰恰令我脊背发凉。 部分文字截取 ZM&#xff1a;我能不能理解每次对…

k8s学习-CKS真题-ImagePolicyWebhook容器镜像扫描

目录 题目环境搭建imagePolicyWebhook搭建 解题任务二任务三任务一检查 模拟考题参考 题目 Context cluster上设置了容器镜像扫描器&#xff0c;但尚未完全集成到 cluster 的配置中。 完成后&#xff0c;容器镜像扫描器应扫描并拒绝易受攻击的镜像的使用。 Task 注意&#xff…

5.17 ARM 作业

1. 2.用for循环实现1~100之间的和 13BA 3.xmind

可以找工作的C端的低代码产品,终于让我找到了

目录 写在前面 低代码平台 平台怎么选 各平台区别 为什么选它 写在前面 大家都知道低代码这个叫法是从B端叫起来的&#xff0c;也就是说不管是业务人员还是开发人员&#xff0c;都是企业内部使用。那么有没有C端的&#xff0c;且免费使用的低代码产品呢&#xff1f; 低代码…

一次性能优化思考过程

前言 最近业务上空闲了下来&#xff0c;也是把之前在开发时自身感受比较大的白屏时间放在了主线上去排查优化&#xff0c;这里记录一下笔者对于移动端vConsole脚本的引入问题全过程。 网络脚本与问题定位 对于白屏时间&#xff0c;与网络传输有很大关系&#xff0c;如图&…

该怎样学习网络安全知识?

首先&#xff0c;必须&#xff08;时刻&#xff09;意识到你是在学习一门可以说是最难的课程&#xff0c;是网络专业领域的顶尖课程&#xff0c;不是什么人、随随便便就能学好的。不然&#xff0c;大家都是黑客&#xff0c;也就没有黑客和网络安全的概念了。 很多朋友抱着学一…