阅读须知
靶场说明
测试背景:本靶场设定的登录用户密码为弱密码,请你尝试暴力破解密码并登录。请注意,靶场已实施 IP 请求限制措施,同一账号若连续登录失败3次,将触发 IP 地址封禁机制。然而,可以通过登录时勾选保持登录的复选框,在成功登录靶场之后观察 Cookie 的生成方式,尝试构造 Cookie 进行爆破登录。
使用工具:HTTP抓包测试工具、HTTP模糊测试工具。
必要条件:正确用户名和账号、测试用户名和暴力破解所需账户密码表单均已提供。
测试工具: TangGo测试平台
测试靶场名称:Brute-forcing a stay-logged-in cookie
测试靶场地址:Lab: Brute-forcing a stay-logged-in cookie | Web Security Academy
测试思路
访问目标网站:首先,访问目标网站并进入其登录页面。
验证账号有效性:接下来,输入正确的用户名和密码并勾选“Stay logged in”,以确保账号的有效性并确认能够成功登录。
抓取后台界面数据包:使用HTTP抓包测试工具,抓取带有设置 Cookie 状态的登录数据包。
推测 Cookie 规则:观察正确用户的 Cookie 生成方式,得到其 Cookie 生成为“用户名:md5(密码)”进行 base64 编码后的组合方式。
枚举测试用户密码:利用HTTP模糊测试工具,通过 Cookie 状态对指定的测试用户“carlos”的密码进行枚举尝试。
获取正确密码:通过匹配规则筛选,我们成功找到了“carlos”用户的正确密码。
成功登录验证:最后,使用获取到的账号和密码尝试登录,若登录成功,则说明账号和密码无误。
使用实操
访问和登录
首先启动 HTTP抓包测试工具,打开右上角内置浏览器,之后在浏览器中访问靶场的网站,加载后是一个普通的网页:
分析网页发现,右上角的“My account”其中文翻译为“我的账户”,猜测此处可能为登录入口,点击“My account”后会跳转至新页面,进入后发现为登录页面:
在登录页面中,输入正确的用户名(winner)和密码(peter)并勾选“Stay logged in”,点击登录后,成功进入后台页面,此时我们观察并记录后台页面中的关键字“Update email”,方便后续使用匹配规则筛选出正确的数据。
抓取成功登录后台的请求数据包之后观察 Cookie 的生成方式,操作如下:
首先我们回到 HTTP抓包测试工具中,开启抓包拦截,之后回到内置浏览器中,刷新该页面,此时通过 HTTP抓包测试工具,我们成功抓取到登录请求的数据包:
因为我们勾选了“Stay logged in”,所以登录的状态会进行保持,于是我们分析请求后台页面数据包中的“Cookie”,其中有一个“stay-logged-in”的字段,该字段的值为 base64 编码,我们框选该值,依次点击右键-->编码解码选中的数据-->解码-->base64 解码。
解码完成后,我们可以看到此字段由两部分组成,前半段为登录的用户名(wiener),后半段为一串 32 位的字符串,并使用冒号将两个字段分隔开。
猜测该 32 位的字符串为 md5 加密,复制该字符串进行 md5 解密,果然字符串解密为正确的登录密码“peter”。
至此我们明白了“stay-logged-in”字段值的构成,该值首先由“用户名”+“分隔符冒号”+“密码(md5)”组合构成,其次在对构成后的组合进行 base64 的编码。
MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,它可以将任意长度的“字节串”映射为一个128位(16字节)的大整数,并且以32个十六进制数字表示的字符串的形式给出。
接下来我们可以通过爆破“stay-logged-in”字段的值来尝试登录用户“carlos”。首先我们回到后台页面中,通过点击“Log out”先退出当前用户。
之后开启抓包拦截,然后点击主页的“My account”,在 HTTP抓包测试工具中可以看到我们已经抓取到了登录的数据包。
观察抓取到的数据包,可以发现“stay-logged-in”其字段值为空,接下来我们使用 HTTP模糊测试工具进行爆破测试。
参数设置
在操作选项卡中把抓取到的数据发送到 HTTP模糊测试工具中,工具会自动打开并跳转:
步骤 1- 设置请求参数
设置需要进行爆破的值,此处由于“stay-logged-in”的值为空,所以我们只需要直接点击标记即可:
(标记变体值)
步骤 2-设置变体参数
重放模式选择单字典逐一爆破模式,因为此处只需要对密码进行暴力破解,所以选择此模式。
点击靶场提供的“Candidate password”:
点击粘贴按钮将所复制的密码全部粘贴到 HTTP模糊测试工具中。
2.2 按以下规则对赋值进行处理
之前分析可知该值首先由“用户名”+“分隔符冒号”+“密码(md5)”组合构成,其次在对构成后的组合进行 base64 的编码。我们进行 3 步设置,具体如下:
1.生成密码对应的 MD5 值:
2.添加变体值的前缀
此时密码的 MD5 值已经生成,接下来为该密码添加前缀用户名,注意一并添加分隔符冒号,依旧点击添加规则,然后选择变体值添加前缀,前缀为“carlos:”
3.base64 编码
设置完成后上述两步后,此时我们只需要对整体的值进行 base64 编码即可,依旧点击添加规则,然后选择变体值编码,编码方式为 Base64 编码。
设置匹配规则
通过之前收集后台界面信息可知,成功登录的页面包含字符串“Update email”,所以我们进行规则匹配,具体操作如下:
- 匹配位置:HTTP 响应头部
- 匹配类型:包含字符串
- 匹配规则:Update email
启动测试
设置完成后,点击“测试过程”-->“启动测试”,可以看到返回数据很多:
如果你遇到了状态码返回全部为 302,请在测试配置中切换 HTTP 重定向为“无条件跟踪重定向”。
复制筛选出数据包中的变体值,打开 TangGo 主界面中的编码解码工具:
对数据包依次进行 base64 解码-->md5 解密后即可得到正确的密码值
输入账号“carlos”和密码“121212”成功登录。
至此使用 Cookie 认证的方式爆破得到了用户的密码并成功登录了后台。