阅读须知
本文的知识内容,仅供网络安全从业人员学习参考,用于已获得合法授权的网站测试,请勿用于其它用途。请勿使用本文中的工具、技术及资料,对任何未经授权的网站、系统进行测试,否则,所造成的直接或间接后果,均由您自行承担。
系列说明
本系列文章为Burp靶场测试教学。我们将基于Burp提供的实验靶场,结合TangGo的各种工具对其进行复现和测试,以帮助你掌握TangGo在各类网络安全测试场景中的应用技巧。
测试背景:此靶场存在一个漏洞,它会受到用户名枚举攻击和密码暴力破解。请枚举出一个有效的用户名,并暴力破解此用户的密码,然后访问其帐户页面。
使用工具:HTTP抓包测试工具、HTTP模糊测试工具。
必要条件:测试枚举所需要的账户用户名表单和账户密码表单均已提供。
测试靶场:https://portswigger.net/web-security/authentication/password-based/lab-username-enumeration-via-different-responses
靶场原文描述
访问目标网站:访问目标网站并进入登录页面。
判断漏洞是否存在:尝试输入一个不存在的用户名和密码并点击登录。页面内容显示“Invalid username”,初步推测网站可能存在用户名枚举的漏洞。
枚举用户名:使用 HTTP模糊测试工具,对用户名进行了枚举测试。通过观察返回的数据,若数据包含“Invalid username”,则判断该用户名不存在;反之存在。
得到正确的用户名:通过返回数据的不同,成功找到了正确的用户名。当用户名正确而密码错误的时候,此时页面返回提示变为“Incorrect password”,接下来只需要进行密码爆破。
枚举密码:填入正确的用户名后,利用HTTP模糊测试工具,针对该用户名下的密码进行了暴力破解。通过观察返回数据,若数据包含“Incorrect password”,则判断该密码不正确;反之正确。
得到正确的密码:通过返回数据的不同,成功找到了正确的密码。
成功登录:使用得到的账号和密码,成功登入网站,说明账号和密码无误。
访问和登录
首先启动 HTTP抓包测试工具,打开右上角内置浏览器,之后在浏览器中访问靶场的网站,加载后是一个普通的网页:
靶场首页
分析网页发现,右上角的“My account”其中文翻译为“我的账户”,猜测此处可能为登录入口,点击“My account”后会跳转至新页面,进入后发现为登录页面:
登录页面
在登录页面中,输入任意账号和密码后点击登录(本文中使用账号“aa”和密码“b”进行举例),页面返回会出现提示“Invalid username”:
无效的用户名
该提示的中文翻译为“无效的用户名”,根据该翻译可以大胆推测此处存在用户名枚举漏洞。
枚举测试(Enumeration Testing)是一种特定的安全测试方法,主要用于识别和发现系统中潜在的安全漏洞和攻击面。通过枚举系统中可能存在的敏感信息或资产,测试人员能够更全面地了解系统的安全状况,并据此采取相应的防护措施。这种测试方法主要用于发现系统中的用户名、文件路径、服务信息、应用程序版本、端口状态等敏感信息,从而帮助安全团队评估系统的安全性和潜在风险。
枚举用户名
根据提供的账户用户名,进行用户名枚举,观察枚举后响应内容的数据,通过对比返回数据的不同来判断用户名是否存在。
抓取数据包
首先启动 HTTP抓包测试工具,开启抓包拦截,之后回到内置浏览器中,在登录框中输入账号(aa)和密码(b)后点击登录,此时通过 HTTP抓包测试工具,我们成功抓取到登录请求的数据包:
登录数据包
通过分析抓取到的登录请求数据包,我们可以得出数据包中的“username”字段的值为输入的用户名(aa),“password”字段的值为输入的密码(b),接下来使用 HTTP模糊测试工具对 “username”字段的值进行枚举。
在操作选项卡中把抓取到的数据发送到 HTTP模糊测试工具中,工具会自动打开并跳转:
发送到 HTTP模糊测试工具中
参数设置
在 HTTP模糊测试工具中,我们需要对用户名进行测试枚举测试,设置方法如下。
步骤 1- 设置请求参数
对需要枚举的用户名进行标记,这里标记“username”字段的值“aa”:
标记 aa
步骤 2-设置变体参数
模式选择
重放模式选择单字典逐一爆破模式,因为此处只需要对用户名进行枚举,所以选择此模式。
点击靶场提供的“Candidate usernames”:
Candidate usernames
点击链接后,在弹出页面中,复制所有的用户名。
复制用户名
点击粘贴按钮将所复制的用户名全部粘贴到 HTTP模糊测试工具中。
粘贴用户名
启动测试
设置完成后,点击“测试过程”-->“启动测试”:
启动测试
根据之前测试思路,我们可以得出以下总结:如果用户名有效,响应数据中将不会包含字符串“Invalid username”。由于不同响应数据的长度不同,因此我们可以利用“长度”按钮对返回数据进行排序。
排序完成后,顶部的数据长度明显和其余数据长度明显不一致,而其余数据中内容均带有字符串“Invalid username”。
选择顶部的数据,在右侧中单击“页面浏览”查看返回内容的界面,可以看到用户名正确的时候页面返回的提示内容变为“Incorrect password”。
用户名正确
至此成功枚举出账户的用户名为“arizona”,接下来只需要暴力破解出此用户的密码即可。
枚举密码
因为之前抓取到的登录数据包中包含用户名和密码,所以不需要重新抓包,只需要重新设置对应的请求参数之后再次进行测试。
步骤 1-设置请求参数
回到“请求包及变体设置”,修改 “username”字段值为之前枚举出的正确用户名“arizona”,因为需要暴力破解密码,所以此处标记“password”字段的值“b”:
标记 b
步骤 2-设置变体参数
设置重放模式
重放模式选择单字典逐一爆破模式,因为此处只需要对密码进行破解,所以选择此模式。
点击靶场提供的“Candidate passwords”。
Candidate passwords
点击链接后,在弹出页面中,复制所有的密码。
复制密码
点击粘贴按钮将所复制的密码全部粘贴到 HTTP模糊测试工具中。
粘贴密码
启动测试
设置完成后,点击“测试过程”-->“启动测试”:
启动测试
根据之前思路可以得知,此时用户名是正确的,如果密码正确,返回的响应数据中就不会包含字符串“Incorrect password”,由于不同响应数据的长度不同,因此我们可以利用“长度”按钮对返回数据进行排序。
排序完成后,顶部的数据长度明显和其余数据长度明显不一致,顶部数据中的变体值即为正确的密码,而其余数据中内容均带有字符串“Incorrect password”。
此时成功枚举出用户名并暴力破解了用户密码,账户的用户名为“arizona”,用户密码为“000000”,回到登录页面输入用户名和密码后,成功进入账户页面。
成功登录
测试漏洞:用户名枚举和密码暴力破解。
用户名枚举:
● 攻击方法: 发送不同的用户名,观察页面返回数据的响应以判断用户名是否有效。
● 响应特征: 网站可能对存在用户和不存在用户返回不同的数据内容,测试人员通过返回数据来区分存在的和不存在的用户。
密码暴力破解:
● 攻击方法: 对已经存在的用户名尝试多个密码组合,以得出正确的密码。
● 响应特征: 网页可能根据密码的正确性返回不同的数据响应,如密码错误或密码无效,测试人员通过返回数据来区分正确和错误的密码。
解决方案:
● 用户隐私保护:系统应避免在错误消息中泄露有关用户名的详细信息,例如明确指出“用户名错误”或“密码错误”。
● 限制登录尝试:实施登录尝试次数限制,例如在多次失败的尝试后锁定用户账户或增加延迟时间。
● 密码策略:要求用户使用强密码,并实施密码复杂性要求,例如包含大小写字母、数字和特殊字符。
● 监控和报警:实施实时监控和报警机制,以检测异常登录行为并及时采取响应措施。
注意:工具使用内容请以最新版本为主。
下载和反馈
TangGo社区版本下载:
· https://tanggo.nosugar.tech/
反馈问题:
· https://github.com/TangGolang/TangGo/issues
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论