阅读须知
本文的知识内容,仅供网络安全从业人员学习参考,用于已获得合法授权的网站测试,请勿用于其它用途。请勿使用本文中的工具、技术及资料,对任何未经授权的网站、系统进行测试,否则,所造成的直接或间接后果,均由您自行承担。
测试背景:本靶场设定的登录用户密码为弱密码,请你尝试暴力破解密码并登录。请注意,靶场已实施 IP 请求限制措施。具体而言,同一账号若连续登录失败3次,将触发 IP 地址封禁机制。然而,在达到3次失败限制之前,若账号登录成功,系统将重置该 IP 的失败次数限制。
使用工具:HTTP抓包测试工具、HTTP模糊测试工具。
必要条件:正确用户名和账号、测试用户名和暴力破解所需账户密码表单均已提供。
测试靶场:https://portswigger.net/web-security/authentication/password-based/lab-broken-bruteforce-protection-ip-block
靶场原文描述
访问目标网站:首先,访问目标网站并进入其登录页面。验证账号有效性:接下来,输入正确的用户名和密码,以确保账号的有效性并确认能够成功登录。
抓取登录数据包:使用HTTP抓包测试工具,抓取正确用户名的登录数据包,并保存下来,以便后续使用。
规避IP限制:在进行密码爆破之前,设定一个发包前置流程,即先使用正确用户名进行登录,以解除IP登录限制。
枚举测试用户密码:利用HTTP模糊测试工具,对指定的测试用户“carlos”的密码进行枚举尝试。
获取正确密码:通过比较和分析响应状态码的差异,我们成功找到了“carlos”用户的正确密码。
成功登录验证:最后,使用获取到的账号和密码尝试登录,若登录成功,则说明账号和密码无误。
访问和登录
首先启动 HTTP抓包测试工具,打开右上角内置浏览器,之后在浏览器中访问靶场的网站,加载后是一个普通的网页:
靶场首页
分析网页发现,右上角的“My account”其中文翻译为“我的账户”,猜测此处可能为登录入口,点击“My account”后会跳转至新页面,进入后发现为登录页面:
登录页面
在登录页面中,输入正确的用户名(winner)和密码(peter),点击登录后,成功进入后台页面:
登录后台
点击“Log out”回到登录界面,抓取登录的请求数据包,操作如下:
首先我们回到 HTTP抓包测试工具中,开启抓包拦截,之后回到内置浏览器中,在登录框中输入账号(winner)和密码(peter)后点击登录,此时通过 HTTP抓包测试工具,我们成功抓取到登录请求的数据包:
登录数据包
通过分析抓取到的登录请求数据包,我们可以得出数据包中的“username”字段的值为输入的用户名(winner),“password”字段的值为输入的密码(peter),此数据包为正确用户的登录请求数据包,我们将此数据包发送到数据重放模块以便于保存和后续使用。
在操作选项卡中把抓取到的数据发送到数据重放模块中保存起来。
因为可以通过修改登录请求包的‘username’和‘password’字段来进行接下来的暴力破解测试,所以不需要重新抓取新的登录请求数据包,只需要修改数据包中对应的字段值即可进行测试。
参数设置
在操作选项卡中把抓取到的数据发送到 HTTP模糊测试工具中,工具会自动打开并跳转:
发送到 HTTP模糊测试工具中
步骤 1 - 设置请求参数
修改“username”后的字段值为测试用户的名字,即把“winner”修改为“carlos”:
修改 winner
对需要破解的密码字段进行标记,这里标记需要“password”字段的值“peter”:
标记 peter
步骤 2 - 设置请求参数
模式选择
重放模式选择单字典逐一爆破模式,因为此处只需要对密码进行暴力破解,所以选择此模式。
点击靶场提供的“Candidate password”:
Candidate password
点击链接后,在弹出页面中,复制所有的密码。
复制密码
点击粘贴按钮将所复制的密码全部粘贴到 HTTP模糊测试工具中。
粘贴密码
启动测试
点击“测试过程”-->“启动测试”。
在测试返回的数据中,我们发现前三个数据返回的长度和后面长度不一致,我们分别查看对应长度返回的数据内容:
返回数据
长度为 3322 的数据包响应内容为“Incorrect password”,表示无效的密码。
长度 3322
长度为 3385 的数据包响应内容为“You have made too many incorrect login attempts. Please try again in 1 minute(s).”
长度 3385
翻译成中文的意思为“您进行了太多不正确的登录尝试。请在1分钟后重试”,表明我们爆破的次数过多,IP 已经被限制登录,这时候我们会考虑,如果使用 IP伪造能不能绕过限制呢?
IP伪造:通过添加X-Forwarded-For、Client-IP等头部来伪造IP地址,以绕过目标站点获取IP地址的检测(仅适用于目标站点获取客户端IP地址机制存在缺陷的情况下)
IP伪造
通常 IP伪造 的做法是在 HHTP 请求头中添加“X-Forwarded-For”,而 TangGo 中只需要在“测试配置”中勾选 IP 伪造。
勾选伪造 IP
再次点击测试,我们可以发现测试返回数据包前三个的长度依旧为“3322”,后三个为“3385”:
返回数据
查看返回长度为“3385”的数据包,显示内容为“You have made too many incorrect login attempts. Please try again in 1 minute(s).”说明 IP 伪造后依旧被限制了登录。
长度 3385
通过上面测试发现,靶场做了对应的 IP 请求限制, 如果同一账号登录失败 3 次则限制该 IP 地址,那么如果在登录失败 3 次之前,进行一次正确的登录,是否能绕过该限制呢?
传统的方法涉及到一个用户名 carlos 和 winner 交替的字典生成,并在该字典中为每个 winner 用户名添加对应的密码 peter。然后,进行交替的暴力破解尝试,模拟 carlos 不断猜测密码和 winner 正常登录的场景。然而,这种方法需要消耗时间去构建密码字典,即使可以借助代码或程序自动化这个过程,也仍然需要投入学习和开发的时间。
而TangGo 的做法简单了许多,我们只需要在自定义流程中设置一个发包前流程,在每次爆破密码前进行正确用户名的登录。具体方法如下:
设置自定义流程
点开自定义流程模块,在发包前流程中点击右上角新建按钮。
新建规则
在弹出的页面中选择“发送 HTTP 请求”。
设置操作类型
选择请求数据包,导入之前存放在 HTTP抓包测试工具重放模块中的正确用户请求登录数据包,最后响应数据绑定到变量中,即可全局调用该变量本文中并未使用绑定变量值,因为此处的发包前流程只模拟正确的用户登录。
导入数据
点击右下角的测试按钮,在弹窗中可以通过点击“流程测试”按钮,查看请求数据包是否成功发送,响应数据是否正确;此处响应数据中的响应码为 302,表示正确登录。
测试数据
设置完成后点击确定按钮,完成发包前流程设置。
发包前流程设置完成
启动测试
设置完成后,点击“测试过程”-->“启动测试”:
可以发现返回的数据长度均为“3245”,并且绕过了 3 次登录的 IP 请求,说明我们的猜想是正确。
返回数据
如果您觉得测试速度很慢,可以在“测试配置”中使用多线程,不过请注意,为了避免同一时间的请求线程超过对应的 IP 限制,这里的线程数应当小于 IP 请求的限制数,所以设置线程数为 2。
多线程设置
查看响应数据中的状态码,正确的密码会成功登录页面,所以响应的状态码为 302,通过点击状态码进行排序,得到正确的密码为“thomas”。
302 状态码
输入账号“carlos”和密码“thomas”成功登录。
成功登录
至此绕过了 IP 登录的限制并且成功拿到了正确的用户密码。
测试漏洞:密码暴力破解漏洞。
● 用户连续输入错误密码后系统会暂时禁止登录,但可通过重置计数器来规避此限制。
● 攻击者利用此漏洞进行密码暴力破解攻击,尝试多个用户名和密码组合。
解决方案:
● 强化密码策略,要求用户使用更强密码,并定期更换密码。
● 实施账号锁定策略,在一定次数的错误尝试后暂时禁止登录。
● 增加登录验证机制,采用多因素身份验证来提高身份验证的复杂度和安全性。
● 实施延迟响应机制,在用户连续输入错误密码后增加登录尝试的时间间隔。
注意:工具使用内容请以最新版本为主。
下载和反馈
TangGo社区版本下载:
· https://tanggo.nosugar.tech/
反馈问题:
· https://github.com/TangGolang/TangGo/issues
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...