描述
要解决这个实验室,首先以管理员(administrator)身份登录,然后删除 carlos。
所需知识
要解决这个实验室,你需要掌握以下知识:
- 如何使用 URL 查询语法尝试修改服务器端请求。
- 如何利用错误消息来理解服务器端 API 如何处理用户输入。
这些内容在我们的 API 测试学院主题中有涵盖。
进入实验室
解决方案
1、 在 Burp 的浏览器中,触发管理员用户的密码重置操作。
2、 在 Proxy > HTTP history 中,注意 POST /forgot-password 请求和相关的 /static/js/forgotPassword.js JavaScript 文件。
3、 右键单击 POST /forgot-password 请求,选择 Send to Repeater。
4、 在 Repeater 标签页中,重新发送请求以确认响应是一致的。
在 HTTP history 中
5、 将 username 参数的值从 administrator 更改为一个无效的用户名,例如 administratorx。发送请求。注意到这会导致一个“Invalid username”(无效用户名)错误消息。
6、 尝试在服务器端请求中使用 URL 编码的 & 字符来添加第二个参数值对。例如,添加 URL 编码的 &x=y:
username=administrator%26x=y |
发送请求。注意到这会返回一个“Parameter is not supported”(参数不支持)错误消息。这表明内部 API 可能将 &x=y 解释为一个单独的参数,而不是 username 的一部分。
7、 尝试使用 URL 编码的 # 字符来截断服务器端的查询字符串:
username=administrator%23 |
发送请求。注意到这会返回一个“Field not specified”(未指定字段)错误消息。这表明服务器端的查询可能包含一个额外的名为 field 的参数,而这个参数已被 # 字符移除。
8、 在请求中添加一个带有无效值的 field 参数,并在添加的参数值对之后截断查询字符串。例如,添加 URL 编码的 &field=x#:
username=administrator%26field=x%23 |
发送请求。注意到这会返回一个“Invalid field”(无效的字段)错误消息。这表明服务器端应用程序可能识别了注入的 field 参数。
9、 对 field 参数的值进行暴力破解:
- 右键单击 POST /forgot-password 请求,选择 Send to Intruder。
-
在 Intruder 标签页中,将 field 参数的值设置为 payload 位置,格式如下:
username=administrator%26field=§x§%23 |
3. 在 Intruder > Payloads 中,点击 Add from list。选择内置的 Server-side variable names 负载列表,然后开始攻击。
4. 查看结果。注意到带有用户名和电子邮件负载的请求都返回了 200 响应。
10、 将 field 参数的值从 x# 更改为 email:
username=administrator%26field=email%23 |
发送请求。注意到这会返回原始的响应。这表明 email 是一个有效的字段类型。
11、 在 Proxy > HTTP history 中,查看 /static/js/forgotPassword.js JavaScript 文件。注意密码重置端点,它涉及 reset_token 参数:
/forgot-password?reset_token=${resetToken} |
可知密码修改是通过 token 鉴权
接下来想办法获得 token
12、 在 Repeater 标签页中,将 field 参数的值从 email 更改为 reset_token:
username=administrator%26field=reset_token%23 |
发送请求。注意到这会返回一个密码重置令牌。记下这个令牌。
读取 token
成功读取 token
13、 在 Burp 的浏览器中,将密码重置端点地址输入到地址栏中,并将你的密码重置令牌作为 reset_token 参数的值添加。例如:
/forgot-password?reset_token=123456789 https://0a13002204ca32d1853f4546004700f9.web-security-academy.net/forgot-password?reset_token=n4wdpwaulzr1jqef23e0zj65u4t60a6f |
14、 设置一个新密码。
15、 使用你的新密码作为管理员用户登录。
16、 进入管理面板,然后删除 carlos 以解决实验室。