从业者-有缺陷的假设-有缺陷的状态机制
# 实验室:通过有缺陷的状态机制绕过身份验证
# 题目
此实验室 对登录过程中的事件顺序 做出了有缺陷的假设。要解决实验室问题,请利用此缺陷绕过实验室的身份验证,访问管理界面并删除carlos
用户。
你可以使用以下凭据登录到自己的帐户:wiener
:peter
- name: 实验室-从业者
desc: 通过有缺陷的状态机制绕过身份验证 >>
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/logic-flaws/examples/lab-logic-flaws-authentication-bypass-via-flawed-state-machine
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 实操
根据题意,可得实验目标:
- 该实验室的 登录过程 中存在逻辑缺陷,可以绕过身份验证。
- 利用逻辑缺陷,绕过身份验证 并 访问账户管理面板,然后删除 carlos 用户。
点击 “ACCESS THE LAB” 进入实验室。

点击 “My account” 转到登录页面。

输入题目中提供的用户名和密码,登录相应账户。

提交登录表单之后,并没有直接登录成功,而是让我们选择一个角色。

有两个角色可供选择,普通用户/作者。

登录过程产生了三个请求数据包。
第一个数据包,提交登录表单之后发出,携带用户名和密码。如果校验成功,则跳转至角色选择界面。

第二个数据包,跳转至角色选择界面。

第三个数据包,选择角色后发出。

还是第三个数据包,选择的角色名称不同。

站点的/admin
路径中存在管理界面,只有 administrator 身份才可以登录。

# 角色修改测试
登录之后,在角色选择的界面中,启用浏览器代理 并提交表单。

捕获请求数据包。

将 role 参数值修改为 administrator ,然后放行数据包。

再次访问管理界面,失败。看来修改 role 的方法行不通。

# 跳过角色选择
既然无法更改角色,那如果不选择角色呢?
后来我试过,如果不进行角色选择 就无法登录,会被强制注销。
# 登录之后,选择角色之前,访问管理界面
既然无法 更改/不选择 角色,那如果在 登录和选择角色 之间的那段时间内访问 /admin 路径会发生什么?
回到登录界面,启用浏览器代理,再次登录。

这是第一个数据包,放行。

这是第二个数据包,会跳转到角色选择页面,但我们不想选择。

将原来的路径 /role-selector 修改为 /admin ,然后放行数据包。

跳转之后,URL 显示的虽然还是原来的路径,但是内容却是实打实的管理界面,并且没有被拦截。

在账户页面中,可以看到用户名为 administrator ,并且可以通过 “Admin panel” 进入管理界面。
(好家伙,我登录的 wiener 账户,如果不选择角色,默认即为管理员)

点击 “Delete” 删除 carlos 账户。

删除成功,实验完成。

# 修复建议
身份验证绕过漏洞3 - 默认的管理员身份
- 当账户访问某个功能点时,如果该账户没有选择身份,则注销其登录状态 / 或默认他是个普通用户,尽量给低权限。
程序:这个用户好奇怪呀,他虽然登录了,但是身份信息是空的。那我默认给你个管理员身份吧,rm -rf
随便用 别客气!