
目录一.实验环境二.通过有缺陷的状态机实现的认证绕过登录账户观察bp历史记录漏洞分析漏洞利用三.小结一.实验环境实验室通过有缺陷的状态机实现的认证绕过 |网络安全学院https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-authentication-bypass-via-flawed-state-machine二.通过有缺陷的状态机实现的认证绕过登录账户观察bp历史记录在登录账户输入wiener和peter之后出现了一个选择role的选项这里可能就是这个实验存在的错误点。选项里并没有管理员选项我们先选择user观察。成功登录。观察已经存在的请求并没有发现什么异常情况。漏洞分析从题目来看同样是通过事件顺序来进行漏洞利用这里我们可以思考一下存在什么情况可以直接让账户默认变成admin而不选择user或者别的低权限账户。我们可以再大胆猜想一下我们只要跳过选择的步骤有可能系统会将用户默认为管理员。漏洞利用我们开始尝试先将账户登出重新进入登录页面。这里不着急登录打开bp开启拦截。再发送登录请求。可以发现请求被拦截然后我们放行自己的login请求。放行之后产生了新的请求我们全部选择丢弃再回到浏览器观察。出现错误。这里的错误是role-selector的选择直接丢弃我们就可以跳过选择低权限用户。直接访问/my-account。成功进入了管理员界面。删除即可成功。三.小结该实验室的漏洞源于登录流程中状态机State Machine实现的缺陷。应用程序假设用户会按照“提交凭证 → 选择角色 → 访问主页”的固定顺序完成登录并依赖客户端必须完成/role-selector这个中间步骤来最终确定用户权限。攻击者可以打破这个预期流程在提交登录凭证POST /login后直接丢弃Drop访问角色选择页面的请求GET /role-selector。由于服务端未能正确校验登录状态机是否完整执行当用户跳过角色选择步骤直接访问主页时系统便错误地将用户权限默认为“管理员”administrator从而完全绕过正常认证流程获得管理员权限。为防范此类风险首先应在服务端对登录等关键流程实施严格的状态机校验确保每个步骤如身份认证、角色选择、权限授予必须按顺序依次完成任何步骤的缺失或跳跃都应被视为非法并终止会话其次用户的最终权限状态必须与会话Session强绑定并在服务端进行持久化记录绝不可依赖客户端的后续请求来补充或决定权限——若角色选择步骤未完成应默认拒绝授予任何权限即“默认拒绝”原则而非降级为高权限角色同时在每个受保护资源的访问请求中均应独立进行完整的权限检查而非仅在登录流程的某个环节进行一次判断此外应避免在认证流程中引入可被绕过的中间状态如非必要不应设计“角色选择”这类依赖客户端交互才能完成的权限授予环节若必须保留则应在服务端对角色参数进行严格的合法性校验最后应对异常的状态转换行为如跳过中间步骤、非法状态跳转等实施全面的日志记录与实时监控以便及时发现并阻断此类绕过攻击。