# 提权攻击与本地存储利用分析报告 > **测试时间**:2026-03-10 > **测试目标**:`zfcg.czt.fujian.gov.cn` 登录态安全性 --- ## 一、JWT Token 深度解析 ### 1.1 Token 头部 (Header) ```json {"alg":"RS256","typ":"JWT"} ``` - **签名算法**:RS256(RSA + SHA256),属于**非对称加密**签名,安全性优于 HS256。 - **评估**:✅ 算法选择合理,无法通过暴力猜解密钥伪造 Token。 ### 1.2 Token 载荷 (Payload) 完整解码 ```json { "userStatus": "1", "loginType": 1, "user_name": "福建万行项目管理有限公司", "userTypeInfos": [{"userTypeId":"3","commonType":"3","systemType":"3","status":"1"}], "userName": "福建万行项目管理有限公司", "userId": "045B6EAE4A7549478279462DAD77862B", "client_id": "gp-gateway-center", "aud": ["ALL"], "organizationInfos": [{ "orgId": "8a1d0f918c2ff0bc018c5cda4bd50ec8", "orgName": "福建万行项目管理有限公司", "orgCode": "91350111MAD4RQ9K3C", "orgType": "3", "orgStatus": "Y" }], "identityType": 1, "userAccount": "91350111MAD4RQ9K3C", "scope": ["read","write"], "systemType": "3", "tenantId": "ZF_JGBM_000016", "userTypeNow": "3", "exp": 1773084858, "jti": "9f7afa8e-e6d9-4408-9eb6-dc069540c4f3" } ``` ### 1.3 Token 安全性分析 | 维度 | 状态 | 说明 | |------|------|------| | 签名算法 | ✅ RS256 | 非对称加密,无法伪造 | | 有效期 | ✅ ~7小时 | `exp` 字段有效,过期后 API 正确拒绝 | | Token ID | ✅ JTI 唯一 | 每次签发使用 UUID,可用于撤销 | | 信息过载 | 🔴 **高危** | Payload 内嵌了过多敏感信息(见下方详述) | --- ## 二、🔴 本地存储提权攻击路径 ### 2.1 攻击路径一:XSS → Token 窃取 → 完全冒充 ``` 1. 攻击者找到 XSS 漏洞(如 CKEditor 富文本注入) 2. 注入 JS 读取 localStorage['portal-access_token'] 3. 将 Token 外传至攻击者服务器 4. 攻击者使用该 Token 直接访问所有 API(直到过期 ~7小时) 5. 期间可执行:查看项目列表、修改采购公告、下载标书、操作专家抽取等 ``` - **风险等级**:🔴 紧急 — Token 在 localStorage 中明文存储且可被 JS 直接读取 - **实际验证**:我们成功通过 `document.cookie` 和 `localStorage` 均提取到了有效 Token ### 2.2 攻击路径二:SessionStorage PII 泄露 → 社工攻击 浏览器 `sessionStorage` 中存储的完整用户信息(已提取验证): | 泄露字段 | 实际值 | 社工利用方式 | |----------|--------|-------------| | **手机号码** | `13514069349` | 钓鱼短信/电话诈骗 | | **电子邮箱** | `3808789405@qq.com` | 钓鱼邮件 | | **CA 唯一标识** | `3452585403150523` | 数字证书冒充 | | **用户 ID** | `045B6EAE4A7549478279462DAD77862B` | IDOR 越权 | | **机构 ID** | `8a1d0f918c2ff0bc018c5cda4bd50ec8` | 跨机构数据访问 | | **租户 ID** | `ZF_JGBM_000016` | 租户隔离突破 | ### 2.3 攻击路径三:JWT Payload 信息泄露 → 定向攻击 JWT Payload(Base64URL 编码,非加密)中包含: - `userId`、`orgId`、`orgCode`、`tenantId` 等内部标识 - `userTypeNow: "3"`(用户角色类型,3=代理机构) - `scope: ["read","write"]`(表示该 Token 同时具有读写权限) **风险**:攻击者截获任意一个 Token(通过网络嗅探 HTTP 页面、XSS、浏览器扩展等),即可无需解密直接读取用户的完整身份信息和权限范围。 ### 2.4 攻击路径四:角色类型枚举与垂直越权(理论推演) Token 中暴露了角色体系: - `userTypeNow: "3"` → 代理机构 - 推测 `"1"` = 采购人, `"2"` = 供应商, `"4"` = 管理员/监管 若后端在部分接口中使用前端传参的 `userTypeNow` 而非从 Token 内验证: ``` # 理论攻击示例 修改 sessionStorage 中 userTypeNow 为 "4" → 前端渲染出管理员菜单 → 调用管理员专属 API → 如后端仅校验 Token 存在性而不校验角色,则完成垂直越权 ``` --- ## 三、Token 过期与撤销机制测试 | 测试项 | 结果 | |--------|------| | Token 过期后 API 是否拒绝 | ✅ 正确返回 `{"msg":"没有有效的token","code":"5560"}` | | Token 有效期 | ~7 小时(从签发到 exp) | | Token 撤销(Revocation) | ⚠️ 未测试(需要在 Token 有效期内注销账号后重试) | **风险**:7 小时的有效期较长,如 Token 被窃取,攻击者有充足时间执行恶意操作。 **建议**:缩短 Token 有效期至 30-60 分钟,配合 Refresh Token 机制续签。 --- ## 四、子域名矩阵与同源攻击面 ### 4.1 存活的同体系子域名 | 子域名 | HTTP 状态 | 服务类型 | |--------|----------|----------| | `rst.fujian.gov.cn` (人社厅) | 200 | 政务服务 | | `slt.fujian.gov.cn` (水利厅) | 200 | 政务服务 | | `zjt.fujian.gov.cn` (住建厅) | 200 | 政务服务 | | `sthjt.fujian.gov.cn` (生态环境厅) | 200 | 政务服务 | | `mzt.fujian.gov.cn` (民政厅) | 200 | 政务服务 | | `tjj.fujian.gov.cn` (统计局) | 200 | 政务服务 | ### 4.2 横向穿透风险 如果这些子域名共享统一 CA/OAuth 认证体系,则一个站点的 Token 泄露可能导致跨部门访问。 --- ## 五、TCP 端口扫描重新评估 ### 5.1 SYN 代理现象说明 > [!IMPORTANT] > 三台服务器(112.54.45.252、120.35.30.176、114.115.172.176)在 TCP 端口扫描中几乎所有端口均报告 OPEN(1-100 全部 OPEN),这是由于网络链路上存在**透明代理或负载均衡设备**对所有 SYN 请求进行了代理应答。 > 实际暴露的真实 HTTP 服务仅为:80 (301→HTTPS)、443 (HTTPS)、8080 (HTTP 404)。 ### 5.2 真实暴露的服务端口 | 端口 | 协议 | 服务 | 真实响应 | |------|------|------|----------| | 80 | HTTP | OpenResty | 301 → HTTPS | | 443 | HTTPS | OpenResty | 200 OK | | 8080 | HTTP | OpenResty | 404 Not Found | | 8848 | TCP | Nacos? | TCP OPEN / HTTP 超时 | --- ## 六、综合提权风险矩阵 | 编号 | 攻击向量 | 前置条件 | 严重程度 | 可行性 | |------|----------|----------|----------|--------| | E-01 | XSS → Token 窃取 → 冒充 | 存在 XSS | 🔴 紧急 | 高 | | E-02 | SessionStorage PII → 社工 | 存在 XSS | 🔴 高危 | 高 | | E-03 | JWT Payload 信息泄露 | Token 截获 | 🟡 中危 | 中 | | E-04 | 修改 userType → 垂直越权 | 后端不校验 | 🔴 高危 | 待验证 | | E-05 | 7h Token 窗口期攻击 | Token 窃取 | 🟡 中危 | 中 | | E-06 | 子域名横向穿透 | 共享认证 | 🟡 中危 | 待验证 | --- ## 七、紧急修复建议 ### ⚡ 立即执行 1. **Token 仅存 HttpOnly Cookie**:禁止 JS 读取 Token 2. **清除 sessionStorage 用户 PII**:仅保留最小化用户标识 3. **缩短 Token 有效期**:缩至 30 分钟,引入 Refresh Token ### 🔧 一周内 4. 后端所有接口从 Token 内验证角色,禁止接受客户端传参的 `userType` 5. JWT Payload 最小化:移除手机号、邮箱等 PII,仅保留 userId 和 orgId 6. 配置严格 CSP 策略防止 XSS