阅读须知
本文的知识内容,仅供网络安全从业人员学习参考,用于已获得合法授权的网站测试,请勿用于其它用途。请勿使用本文中的工具、技术及资料,对任何未经授权的网站、系统进行测试,否则,所造成的直接或间接后果,均由您自行承担。
靶场说明
测试背景:本靶场模拟了一个Web登录界面,其中包含一个安全机制。当同一账户连续错误登录三次时,该机制会触发IP封禁,以此防止暴力破解攻击。
靶场提供了一个有效用户的账户和一个测试的账户,请你暴力破解测试用户的密码。为了绕过登录处的IP封禁机制,尝试利用后台的修改密码功能进行暴力破解。具体来说,我们先登录有效用户的账户,然后使用修改密码功能,将用户名修改为测试的用户,最后通过观察页面返回的提示信息暴力破解出密码。
使用工具:HTTP抓包测试工具、HTTP模糊测试工具。
下载地址:TangGo测试平台
必要条件:正确用户名的账号、测试用户名和暴力破解所需账户密码表单均已提供。
测试靶场名称:Password brute-force via password change
(靶场原文描述)
思路
访问目标网站:首先,访问目标网站并进入其登录页面。
验证账号有效性:接下来,输入正确的用户名和密码,以确保账号的有效性并确认能够成功登录。
修改密码:成功登录后台发现存在修改密码功能,猜测是否存在任意用户密码修改漏洞。
判断存在漏洞:使用HTTP抓包测试工具,抓取修改密码当前用户 wiener 密码的数据包,发现修改密码的用户名可控。
查看数据响应:尝试修改 carols 用户密码,页面提示当前密码不正确,猜测此处可以根据页面响应暴力破解出用户的密码。
枚举测试用户密码:利用HTTP模糊测试工具,对指定的测试用户“carlos”的密码进行枚举尝试。
获取正确密码:通过设置发包后流程,我们成功找到了“carlos”用户的正确密码。
成功登录验证:最后,使用获取到的账号和密码尝试登录,若登录成功,则说明账号和密码无误。
使用实操
访问和登录
首先启动 HTTP抓包测试工具,打开右上角内置浏览器,之后在浏览器中访问靶场的网站,加载后是一个普通的网页:
(靶场首页)
分析网页发现,右上角的“My account”其中文翻译为“我的账户”,猜测此处可能为登录入口,点击“My account”后会跳转至新页面,进入后发现为登录页面:
(登录页面)
在登录页面中,输入正确的用户名(winner)和密码(peter),点击登录后,成功进入后台页面,发现后台页面中不仅包含了“Update email”,还有一个新功能“Change password”。
(登录后台)
抓取修改密码当前用户 wiener 密码的数据包,首先我们回到 HTTP抓包测试工具中,开启抓包拦截,之后回到内置浏览器中,在修改密码框中,依次填写当前密码(peter)和两次新密码(123456),之后点击“Change password”,此时通过 HTTP抓包测试工具,我们成功抓取到修改密码的请求数据包:
(修改密码数据包)
通过分析抓取到的修改密码请求数据包,我们可以得出数据包中的“username”字段的值为用户名(winner),“current-password”字段的值为输入的密码(peter),“new-password-1”和“new-password-2”字段的值为两次填写的新密码(123456)。
既然显示了“username”字段,我们尝试修改“username”字段的值为测试用户 “carols”,查看修改的用户名是否可控。
关闭 HTTP抓包测试工具中拦截开关,回到浏览器中可以发现页面返回:
(当前密码无效)
发现页面显示“Current password is incorrect”,提示密码不正确,说明username字段生效了,后端尝试去修改了carols的密码,不过密码错误所以失败了,同时也说明了此处没有越权修改他人密码的漏洞。在这个靶场中,我们还看到了修改失败后,页面显示的用户变为了“carols”,进一步验证了我们的猜想。多尝试几次,发现此处没有对修改用户密码的次数进行限制,那么我们就可以通过修改密码来对其他用户的密码进行暴力破解。
如果我们利用该规则,对“carlos”的密码进行暴力破解,那么当爆破出正确密码的时候,返回的数据包中就不包含“Current password is incorrect”的字段。
那么如何爆破“carlos”的密码,具体操作如下:
我们只需要抓取修改密码的请求数据包,并且把用户名“wiener”修改用户名为“carols”,然后通过 HTTP模糊测试工具对 password 字段的值进行爆破即可。
参数设置
再次抓取修改密码请求数据包,在操作选项卡中把抓取到的数据发送到 HTTP模糊测试工具中,工具会自动打开并跳转:
(发送到 HTTP模糊测试工具中)
步骤 1- 设置请求参数
修改“username”后的字段值为测试用户的名字,即把“winner”修改为“carlos”:
(修改 winner)
对需要破解的密码字段进行标记,这里标记需要“current-password”字段的值“peter”:
(标记 peter)
注意:这里我们并没有输入一致的新密码,原因是如果当我们输入一致的新密码,当爆破出正确密码的时候,往往会修改掉测试用户的密码,这并不是我们的本意。
步骤 2-设置变体参数
1.重放模式
(模式选择)
重放模式选择单字典逐一爆破模式,因为此处只需要对密码进行暴力破解,所以选择此模式。
2.变体赋值
点击靶场提供的“Candidate password”:
(Candidate password)
点击链接后,在弹出页面中,复制所有的密码。
(复制密码)
点击粘贴按钮将所复制的密码全部粘贴到 HTTP模糊测试工具中。
(粘贴密码)
设置自定义流程
根据之前分析我们可以得知,当页面不显示“Current password is incorrect”的时候,证明我们已经爆破出了正确的用户名,所以我们就不用继续爆破后续的密码了。这里我们使用发包后流程实现上述规则。
点开自定义流程模块,在发包后流程中点击右上角新建按钮。
(新建规则)
在弹出的页面中选择“关键节点条件判断,根据判断结果决定流程走向”。
(设置操作类型)
点击蓝色选项框新建选项,在弹出的新建匹配规则中进行如下设置:
设置规则发包运行如下:
- 对象类型:因为需要提取响应后的数据,所以选择模糊测试响应数据。
- 对象属性:因为需要提取内容,所以选择 HTTP 响应 Body。
- 判断方法:因为需要不包含指定的内容,所以选择不包含字符串。
- 特征数据:填写需要匹配的特征数据,这是为字符串“Current password is incorrect”。
(设置匹配规则)
设置匹配结果,如果响应数据中不包含字符“Current password is incorrect”则会结束所有测试。
(设置匹配后执行规则)
设置完成后点击确定按钮,完成发包后流程设置。
(发包后流程设置完成)
启动测试
设置完成后,点击“测试过程”-->“启动测试”:
成功触发了发包后流程,结束了测试流程。
(返回数据)
点击错误进行排序,可以发现顶部的数据显示“发包后关键节点判断流程匹配规则, 结束所有测试”并且只有一条,所以我们可以肯定该数据包的变体为正确的密码“princess”。
(错误排序)
点击该数据包在右侧中选择页面浏览,我们可以看到确实不包含“Current password is incorrect”字段,而是“New passwords do not match”。
输入账号“carlos”和密码“princess”成功登录。
(成功登录)
至此,在用户登录存在登录次数限制(错误次数过多会封禁IP)的情况下,使用一个可登录的用户进入系统,通过修改密码模块,成功暴力破解出其他用户的密码。
测试总结
漏洞总结:
- 登录密码更改功能中,如果输入错误的当前密码,系统会根据新密码是否匹配来返回不同的错误消息,从而泄露当前用户的正确密码。
- 攻击者可以利用这一漏洞通过尝试不同的新密码组合来枚举正确的当前密码。
解决方法:
- 在密码更改功能中,始终返回相同的错误消息,无论新密码是否匹配,以防止攻击者通过错误消息来推断当前密码是否正确。
- 在密码更改请求中,不要将当前密码作为隐藏输入字段发送给客户端,以降低攻击者获取当前密码的可能性。
注意:工具使用内容请以最新版本为主。
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)