freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Burpsuite靶场|根据网站登录提示差异枚举存在的账号(进阶篇)
2024-06-03 16:25:57

阅读须知

本文的知识内容,仅供网络安全从业人员学习参考,用于已获得合法授权的网站测试,请勿用于其它用途。请勿使用本文中的工具、技术及资料,对任何未经授权的网站、系统进行测试,否则,所造成的直接或间接后果,均由您自行承担。

靶场说明

在上篇文章中,我们介绍了根据网站登录提示差异枚举存在的账号。本文中,我们将继续延用此靶场,通过 TangGo 的独特功能,更便捷更高效的得到测试数据。那我们如何更高效的测试出数据呢?请看对比流程图:

1717402308_665d7ac43eec16085c945.png!small?1717402312132

(流程图)

通过对比流程图,我们可以明确得出以下结论:在基础篇中,我们采取了以下步骤:首先枚举用户名,一旦获取到正确的用户名,我们会继续枚举该用户名的密码,最终成功登录。然而,是否存在一种更为高效的方法,能够一步到位地直接获取到正确的用户名和密码呢?确实,按照传统的思路,我们可能会尝试将多个用户名与多个密码进行交叉匹配以获取数据。但是对于不存在的用户名,我们根本不需要去暴力破解密码,所以这种方法不仅耗时,而且还会多出很多不必要的测试请求。

在 TangGo 的 HTTP模糊测试工具中,我们能够通过设定特定的发包流程来优化这一过程。具体来说,当用户名不存在时,工具将不再进行密码的暴力破解,而是仅在用户名正确的情况下对其进行密码的暴力破解。此外,TangGo 工具还允许我们设置匹配规则,从而能够直接精确地筛选出正确的用户名和密码。这样,我们就不再需要在大量的返回数据条目中逐一查找正确的数据,从而大大提高了效率。

本文中我们将详细讲解如何通过 HTTP模糊测试工具的实用功能更高效便捷的得到测试数据。

使用实操

因为延用之前靶场且“抓取数据包”步骤一致,所以这里我们就不在赘述,详细步骤请参考根据网站登录提示差异枚举存在的账号,此处我们直接从“参数设置”开始讲解。

参数设置

启动HTTP模糊测试工具后,我们将按照以下步骤进行详细的设置:

  • 对用户名和密码进行变体设置。
  • 在发包后流程中,设置<关键节点条件判断>流程,跳过不存在的用户名的后续测试流程(不进行密码破解) 。
  • 设置匹配规则,以便从测试结果中直接筛选出正确的用户名和密码组合。

步骤 1- 设置请求参数

对需要枚举的用户名和密码进行标记,这里标记“username”字段的值“aa”和“password”的字段值“b”:

1717402415_665d7b2fbfc8b241d4254.png!small?1717402417554

(标记 aa 和 b)

步骤 2-设置变体参数

1.重放模式

1717402447_665d7b4f3501689f16a9a.png!small?1717402448044

(模式选择)

重放模式选择多字典交叉爆破模式,因为此处需要对多个用户名和多个密码进行交叉测试,所以选择此模式。

2.变体赋值

在变体 1 中填入靶场给定的用户名:

1717402482_665d7b7207a6fd4383180.png!small?1717402483136

(靶场给定的用户名)


1717402493_665d7b7d325fd8aeefa0d.png!small?1717402494554

(粘贴用户名)

在变体 2 中填入靶场给定的密码:

1717402513_665d7b9104b44f1579a02.png!small?1717402513753

(靶场给定的密码)

1717402526_665d7b9ef1bb5f62df7ac.png!small?1717402530518

(粘贴密码)

设置自定义流程

点开自定义流程模块,可以发现自定义流程中有发包前和发包后流程。

在使用HTTP模糊测试工具时,若在发送数据包之前需执行诸如执行Token获取、验证码识别或提取、系统登录等各类前置流程等前置流程操作,可通过设置发包前流程来完成这些步骤。

在使用HTTP模糊测试工具时,若在发送数据包之后需执行如从响应数据中提取需要的数据、对数据进行处理、将需要的数据发送到某些接口或保存到文件中、判断本次测试是否因为验证码错误等原因需要重新尝试、或者因为某些条件不满足而中止测试等后续流程操作,可以通过设置发包后流程来完成这些步骤。

本文需要根据响应数据执行对应判断,所以选择使用发包后流程模块,设置如下。

点击右上角新建按钮:

1717402604_665d7becb7a13fb3be93e.png!small?1717402605698

(新建规则)

在弹出的页面中选择“关键节点条件判断”。

1717402621_665d7bfd914b78467b131.png!small?1717402622866

(设置操作类型)

在判断规则中点击新建按钮:

1717402641_665d7c111c530e671414f.png!small?1717402642413

(新建规则)

在弹出的页面中设置判断规则:

  • 对象类型:模糊测试响应数据。
  • 对象属性:HTTP 响应 Body。
  • 判断方法:包含字符串。
  • 特征数据:Invalid username。

在上文中我们可以得知,当用户名不存在的时候返回的响应数据中含有字符串“Invalid username”,所以此处我们需要根据响应数据中是否包含字符串“Invalid username”进行判断,故判断方法为包含字符串、特征数据填“Invalid username”。

1717402672_665d7c30b61ff020c8530.png!small?1717402673674

(判断规则)

设置完判断规则后,接下来我们进行匹配规则成立后,需要执行操作的对应设置。

如果匹配上述规则,则说明响应数据中包含字符串“Invalid username”,此时必然是不存在的用户名,所以并不需要对此用户名进行密码暴力破解,而应该直接测试下一个用户名。搞清楚该逻辑后,我们就清楚该如何设置了,首先如果该用户名不存在则不会进行密码暴力破解,也就丢弃此变体本来测试所用变体值;所以勾选丢弃本轮测试所用变体值,其次该规则丢弃的数据应该是用户名,所以规则应用于选择变体 1:aa,最后丢弃数据后应当直接进行下轮测试,继续测试其他的用户名,所以选择直接进行下轮测试。

1717402692_665d7c44c09c5e7dc9192.png!small?1717402693491

(执行操作)

点击确定按钮完成设置。接下来为了方便能够精确的筛选出正确的数据,我们设置匹配规则。

设置匹配规则

点击测试过程模块,在模块中选择匹配规则。

1717402746_665d7c7a062949fe2f722.png!small?1717402747363

(匹配规则)

根据之前的思路我们可以得知,当用户名错误的时候返回数据中包含字符串“Invalid username”,当用户名正确但密码错误的时候,返回数据中包含字符串“Incorrect password”,所以如果排除掉包含“Invalid username”的返回数据包,也排除掉包含“Incorrect password”的返回数据包,那么该数据即为唯一符合的数据,所以设置如下。

点击添加按钮创建新的匹配规则。

1717402766_665d7c8e8f534546af3de.png!small?1717402767629

(添加规则)

在新弹出的页面中:

  • 匹配位置:HTTP 响应头部
  • 匹配类型:包含字符串
  • 匹配规则:Invalid username

1717402790_665d7ca645bfe42a5c981.png!small?1717402791657

(设置规则)

因为我们需要包含两个字符串,所以需要创建两次,同理创建规则包含字符串“Incorrect password”。依次创建好两个匹配规则后,接下来就可以启动测试了。

1717402811_665d7cbbdbaefffd82501.png!small?1717402812707

(完成 2 个匹配规则设置)

启动测试

设置完成后,点击“测试过程”-->“启动测试”:

在测试返回的数据中,可以发现我们成功触发了发包后关键节点判断,丢弃了大量的变体数 (10000),同时发现数据包匹配规则大多数为“是”。

1717402880_665d7d008f9d5ef8b2dfe.png!small?1717402881442

(返回数据)

接下来我们直接通过筛选匹配规则精确得出正确的数据:

1717402941_665d7d3d19dede5f4404a.png!small?1717402941831

(筛选匹配规则)

当我们使用匹配功能筛选“否”的时候,此时返回的数据包即不包含“Invalid username”也不包含“Incorrect password”,所以筛选出的数据即为正确的数据。

1717402958_665d7d4e7ee2d8f303187.png!small?1717402961778

(正确数据)

至此我们成功拿到了靶场用户名“anaheim”和密码“michael”。

测试总结

测试漏洞:用户名枚举和密码暴力破解。

用户名枚举:

  • 攻击方法:发送不同的用户名,观察页面返回数据的响应以判断用户名是否有效。
  • 响应特征:网站可能对存在用户和不存在用户返回不同的数据内容,测试人员通过返回数据来区分存在的和不存在的用户。

密码暴力破解:

  • 攻击方法:对已经存在的用户名尝试多个密码组合,以得出正确的密码。
  • 响应特征:网页可能根据密码的正确性返回不同的数据响应,如密码错误或密码无效,测试人员通过返回数据来区分正确和错误的密码。

解决方案:

  • 用户隐私保护:系统应避免在错误消息中泄露有关用户名的详细信息,例如明确指出“用户名错误”或“密码错误”。
  • 限制登录尝试:实施登录尝试次数限制,例如在多次失败的尝试后锁定用户账户或增加延迟时间。
  • 密码策略:要求用户使用强密码,并实施密码复杂性要求,例如包含大小写字母、数字和特殊字符。
  • 监控和报警:实施实时监控和报警机制,以检测异常登录行为并及时采取响应措施。

注意:工具使用内容请以最新版本为主。


# 漏洞 # web安全 # 系统安全 # 靶场实战 # 靶场复现
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录