从业者-保持用户登录-对保持登录的Cookie进行暴破
# 实验室:对保持登录状态的 Cookie 进行暴力破解
# 题目
此实验室允许用户 即使在关闭浏览器会话后,也能保持登录状态。用于提供此功能的 Cookie 容易受到暴力破解的攻击。
要解决实验室问题,请暴力破解 carlos 的 Cookie 并访问他的账户页面。
- 你的凭据:
wiener:peter - 受害者的用户名:
carlos - 密码候选列表 (opens new window)
- name: 实验室-从业者
desc: 对保持登录状态的 Cookie 进行暴力破解 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/authentication/other-mechanisms/lab-brute-forcing-a-stay-logged-in-cookie
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 实操
根据题意,可得实验目标:
- 该实验室存在 “保持用户登录” 的功能,该功能通过某种加密方式,将用户信息保存在 Cookie 当中。
- 请对 Cookie 进行暴力破解,推断出它的加密方式。
- 得出加密方式后,伪造 carlos 用户的身份信息,并访问其账户页面。
点击 “Access the lab” 进入实验室。
点击 “My account” 进入登录页面。
# 正常的登录流程
我们先进行一次正常的登录流程,看下会经过哪些操作。
启用浏览器代理,输入用户名和密码wiener:peter,并勾选 “Stay logged in” ,然后进行登录操作。
BurpSuite 不需要启用拦截,起到一个监控作用。
登录成功之后,会分配 2 个 Cookie ,
- 一个是正常的 Cookie,
- 另一个是用于保持登录的 “remember me” Cookie 。
复制 stay-logged-in 的参数值,然后使用 BurpSuite 自带的解码功能,解码之后可以看到 明文的用户名 + 密文的密码。
使用在线md5解密平台 (opens new window)对密码进行解码,可以看到明文的 peter 。
由此得出 “remember me” Cookie 的加密方式为:base64(用户名:md5(密码)) 。
# 编码测试 && 字典制作
知道了 Cookie 的加密方式之后,可以自己尝试一下加密操作,看看最后的字符串是否相同。
我们可以使用 Python 来进行简单的实现:
看到上图的加密结果,与 BurpSuite 数据包中的字符串一致,说明我们实现了正确的加密。
Python 代码:
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# By clincat
import hashlib
password = 'peter' # 原字符串
hl = hashlib.md5(password.encode('utf-8')) # 创建md5对象并进行哈希
print('before: ' + password)
print('after: ' + hl.hexdigest()) # 打印哈希值的十六进制字符串
2
3
4
5
6
7
8
9
10
11
12
我们需要构造一个用户名:md5(密码)格式的字典,用于暴破 Cookie ,这同样可以使用 Python 实现:
运行以下代码,然后在命令行中输入 原密码字典 的文件存储位置,将会得到相应格式的文本。
Python 代码:
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# By clincat
import hashlib
filename = input('请输入字典文件路径: ') # 输入密码字典路径
filename = filename.replace('\\', '/') # 路径处理, 将反斜杠 \ 替换为 /
f = open(filename, 'r', encoding='utf-8') # 打开文件
passwords = f.readlines() # 读取每一行
for password in passwords:
password = password.rstrip('\n') # 将每一行的换行符 \n 去除
hl = hashlib.md5(password.encode('utf-8')) # 进行 md5 编码
print('carlos' + ':' + hl.hexdigest()) # 输出结果
f.close()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
新建 .txt 文件,将命令行输出的文本内容 保存到文件当中。
随机挑选一个加密后的密码,进行 md5 解码操作,确保加密结果无误(验算)。
# 暴破 stay-logged-in Cookie
抓取一个 GET /my-account 的数据包,添加Cookie: stay-logged-in=xxx标头,此时登录失败,说明 Cookie 不正确。
使用 Intruder 功能,将 “stay-logged-in” 的值添加到选区。
导入上一步生成的用户名:md5(密码)字典,但是先别攻击,因为我们还需要 Base64 编码。
选择 “Payload processing --> Add --> Encode --> Base64-encode --> OK” 。
启用该功能后,将自动对 Payload 进行 Base64 编码,形成base64(用户名:md5(密码))的格式。
一切准备就绪,点击 “Start attack” 开始攻击。
对攻击结果进行排序,发现异常条目。
对异常数据包的 Cookie 进行解码,获得用户名和密码carlos:monitor。
回到登录页面,进行登......?提示已经完成了,看来不需要手动登录。
至此,实验完成。
我不管,就是要登录。
