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

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

实际上,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系统通常都是嵌入式的,它们经常因配置错误或代码变化的缘故而不进行相关的检查,这种情况经常发生。

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

小结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

css3 flex弹性布局详解

css3 flex弹性布局详解 一、flexbox弹性盒子 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。…

【一起啃书】《机器学习》第五章 神经网络

文章目录 第五章 神经网络5.1 神经元模型5.2 感知机与多层网络5.3 误差逆传播算法5.4 全局最小与局部极小5.5 其他常见神经网络5.6 深度学习 第五章 神经网络 5.1 神经元模型 神经网络是由具有适应性简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统…

生产流程图怎么制作?思路提供

生产流程图是一种图表,用来展示生产流程中的各个环节及其顺序。这种图表可以帮助企业管理者更好地了解生产过程中的各个环节,从而更好地进行管理和优化。生产流程图通常包括各个生产环节的名称、所需时间、参与人员、设备和工具等信息。 在制作生产流程图…

七大软件架构设计原则详解

目录 1、概述 2、七大设计原则 2.1、开闭原则 2.2、里氏替换原则 2.3、依赖倒置原则 2.4、单一职责原则 2.5、接口隔离原则 2.6、迪米特法则 2.7、合成复用原则 3、最后 VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...&…

基于jdk1.8的Java服务监控和性能调优

JVM的参数类型 X参数 非标准参数-Xint: 解释执行-Xcomp: 第一次使用就编译成本地代码-Xmixed: JVM自己来决定是否编译成本地代码 默认使用的是mixed mode 用的不多, 只需要做了解, 用的比较多的是XX参数 XX参数 非标准化参数相对不稳定主要用来JVM调优和Debug Boolean: …

【Vue3+TS项目】硅谷甄选day02--后台管理系统模板搭建/项目配置

1 项目初始化 一个项目要有统一的规范,需要使用eslintstylelintprettier来对我们的代码质量做检测和修复,需要使用husky来做commit拦截,需要使用commitlint来统一提交规范,需要使用preinstall来统一包管理工具。 1.1 环境准备 n…

阿里云u1服务器通用算力型CPU处理器性能测评

阿里云服务器u1通用算力型Universal实例高性价比,CPU采用Intel(R) Xeon(R) Platinum,主频是2.5 GHz,云服务器U1实例的基准vCPU算力与5代企业级实例持平,最高vCPU算力与6代企业级实例持平,提供2c-32c规格和1:1/2/4/8丰富…

elasticsearch结构化查询(一)

在上一篇中我们介绍了DSL相关的知识,接下来我们将会学习elasticsearch的结构化查询,同时也实践一下上一篇的DSL的查询用法 什么是结构化搜索? 从《Elasticsearch权威指南》上摘取部分解释如下: 结构化搜索是指查询包含内部结构的数据。日期&#xff0…

MATLAB 之 函数文件、特殊形式的函数和程序调试与优化

文章目录 一、函数文件1. 函数文件的基本结构2. 函数调用2.1 函数调用的格式2.2 函数的递归调用2.3 函数参数的可调性2.4 全局变量与局部变量 二、特殊形式的函数1. 子函数2. 内联函数3. 匿名函数 三、程序调试与优化1. 程序调试方法1.1 利用调试函数进行程序测试1.2 利用调试工…

MySQL数据库,JDBC连接数据库操作流程详细介绍

前言: 在学完 MySQL 和 Java 后,我们通常会尝试使用 Java编译器 连接 MySQL数据库,从而达到使用编译器来操作数据库的效果。连接的这个过程会用 JDBC 相关知识,因此我把 JDBC 包的下载及导入流程,以及 JDBC 的使用流程…

1.Buffer_Overflow-1.Basic_Jump

github上面的练习题 git clone https://github.com/Adamkadaban/LearnPwn 然后开始做 先进行 readelf 然后进行执行看看 是怎么回事 ./buf1发现就是一个输入和输出 我们checksec看看 发现stack 保护关闭 开启了NX保护 我们进入ida64看看反汇编 我习惯先看看字符串 SHITF…

C#异步编程之数据并行及任务并行

基于Parallel.ForEach的数据并行使用 1.数据非并行 var items new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; DateTime t1 DateTime.Now; foreach (var item in items) {Console.WriteLine("数据非并行输出:{0}", item); } 2.数据并行,只要使用Parallel.ForEach P…

Docker高频使用命令总结(镜像与容器命令)

目录 一.Docker常用命令总结 1.镜像命令管理 2.容器命令管理 二.Docker镜像操作命令 1.docker search:搜索镜像 2.docker pull:下载镜像 3.docker push:上传镜像 4.docker images:查看本地镜像 5.docker inspect &#x…

360+ChatGLM联手研发中国版“微软+OpenAI”

文章目录 前言360与智谱AI强强联合什么是智谱AI360智脑360GLM与360GPT大模型战略布局写在最后 前言 5月16日,三六零集团(下称“360”)与智谱AI宣布达成战略合作,双方共同研发的千亿级大模型“360GLM”已具备新一代认知智能通用模…

Springboot——事物管理

文章目录 事务管理一、 Spring事务管理1.1 事务回顾1.2 案例: 解散部门(未开启事务)1.3 事务管理注解Transactional1.4 事务管理日志开关1.5 rollbackFor 异常回滚属性1.6 propagation 事务传播行为1.7 解散部门并记录操作日志1.7.1 创建数据…

技术探秘:揭秘Bean Factory与FactoryBean的区别!

大家好,我是小米,一个热衷于技术分享的29岁小编。今天,我们来聊一聊在Spring框架中常用的两个概念:beanFactory和FactoryBean。它们虽然看似相似,但实际上有着不同的用途和作用。让我们一起来揭开它们的神秘面纱吧&…

离散数学_九章:关系(6)

🪐9.6 偏序 1、⛺偏序关系和偏序集⛲偏序关系⛲偏序(关系)的例子 a. “大于或等于” 关系b. “整除” 关系c. “包含” 关系 🎬偏序集🎬可比性(comparability) " ≼ " 符号a. 可比 &a…

基于野火F407骄阳开发板的苹果采摘机器人机械臂的采摘轨迹与夹持器的采摘动作的设计(1)

基于野火F407骄阳开发板的苹果采摘机器人机械臂的采摘轨迹与夹持器的采摘动作的设计(1) 苹果采摘机器人1、采摘流程与硬件设计2、机械臂驱动以及采摘轨迹设计2.1、台达A2电机驱动实现2.2、机械臂寻找苹果巡逻轨迹 苹果采摘机器人 1、采摘流程与硬件设计…

C++/Qt 小知识记录3

工作中遇到的一些小问题,总结的小知识记录:C/Qt 小知识 QLineEdit限制输入大于0的正整数QLayout内清空已布局的WidgetWindows结束进程直接结束,子进程不响应结束事件正常结束,子进程响应结束事件 CMake关闭控制台Console实体与值对…

尾调用优化

尾调用优化 最近遇到一个堆栈溢出的问题,分析后发现可收敛为递归边界问题。结合“红宝书”中相关内容和ES6规范中的一些优化机制,整理记录如下。 前言 程序运行时,计算机会为应用程序分配一定的内存空间。应用程序会自行分配所获得的内存空…