一、题目简介题目场景Java Web 后端项目采用自定义 Token 无过滤器鉴权和你课程项目一模一样后端放弃 Filter 过滤器所有接口通过请求头token字段解析用户 ID。 题目源码泄露核心工具类逻辑java运行// TokenUtil 核心解析逻辑 public static Integer getUserIdByToken(String token){ // 规则token固定前缀 admin 四位数字用户ID if(!token.startsWith(admin)) return null; String uid token.substring(4); return Integer.parseInt(uid); }访问/api/cart购物车接口携带合法管理员 Token 即可获取 Flag未携带 / 非法 Token 返回「未登录请先登录」。二、考点Java Servlet 无过滤器 Token 鉴权原理自定义 Token 规则分析与伪造HTTP 请求头自定义字段渗透前后端分离登录逻辑漏洞三、解题思路分析源码Token 严格格式admin四位数字管理员固定 UID1000构造合法管理员 Tokenadmin1000请求头添加token字段携带伪造 Token成功通过后端鉴权访问接口拿到 Flag四、详细 Writeup漏洞分析后端鉴权逻辑和你改造后的CartServlet/OrderServlet完全一致 从请求头拿 token → 截取解析 UID → 为空 / 报错直接拦截。 源码明确给出前缀 数字规则不存在加密、加盐属于规则可预测漏洞。构造 Payload根据规则拼接管理员 Tokenplaintexttoken: admin1000发包验证三种方式任选方式 1浏览器 F12 修改请求头 方式 2Postman 请求头添加参数 方式 3前端 axios 拦截器临时改写js运行service.interceptors.request.use(config{ config.headers.token admin1000 return config })重新访问/api/cart鉴权通过页面返回 Flagplaintextflag{Servlet_Token_Bypass_2026}五、原理总结本次漏洞成因后端自定义 Token 生成规则公开、无随机盐值、无过期时间。 正常项目 Token 应随机加密本题开发者使用固定拼接规则导致攻击者可直接伪造任意用户身份。六、修复建议Token 使用 UUID 随机生成不绑定用户 ID 明文拼接增加 Token 过期时间校验后端添加盐值加密避免规则爆破