初始化: Web安全攻防知识库
- 靶场环境: DVWA/WebGoat/Pikachu/BWAPP/SQLi-Labs/XSS-Labs - SQL注入工具: sqli-scanner.py, blind-sqli.py, sqli-exploit.go - XSS工具: xss-fuzzer.py, xss-scanner.go - 认证攻击: web-brute.py, jwt-cracker.py - 服务端安全: port-scanner.py, tls-scanner.py - 防御配置: nginx-hardening.conf - 案例研究: 福建政采网安全评估报告 (13份) - 同步脚本: sync-gitea.sh
这个提交包含在:
@@ -0,0 +1,158 @@
|
||||
# 认证态 IDOR 越权与同体系政务子域名安全扫描报告
|
||||
|
||||
> **测试时间**:2026-03-10
|
||||
> **测试目标**:`zfcg.czt.fujian.gov.cn` 及同体系 `*.fujian.gov.cn` 子域名
|
||||
|
||||
---
|
||||
|
||||
## 一、认证态 API 越权测试
|
||||
|
||||
### 1.1 Token 传递机制分析
|
||||
|
||||
| 方式 | 结果 | 说明 |
|
||||
|------|------|------|
|
||||
| Cookie: `access_token=<JWT>` | ❌ code 5560 | Token 无效 |
|
||||
| Header: `Authorization: Bearer <JWT>` | ❌ 空响应 | 被网关静默忽略 |
|
||||
| 两者同时使用 | ❌ 无效 | 网关不接受 |
|
||||
|
||||
**分析**:网关层(OpenResty + Spring Gateway)的 Token 认证机制可能依赖以下额外要素:
|
||||
1. **网关 Session Cookie**:OAuth 回调后网关可能生成独立的 session ID
|
||||
2. **Token 加密/签名**:Token 在浏览器与网关间可能经过二次加密
|
||||
3. **IP 绑定**:Token 可能绑定了签发时的客户端 IP
|
||||
|
||||
**风险评估**:🟢 低危 — 这种机制实际上**增强了安全性**,即使 Token 被窃取(XSS),攻击者也无法在外部直接使用 Token 调用 API(除非同时窃取了网关 session)。
|
||||
|
||||
### 1.2 checkToken 端点信息泄露
|
||||
|
||||
```
|
||||
POST /gateway/api/oauth/checkToken
|
||||
Response: {"msg":"404 NOT_FOUND \"No matching handler\"","code":"-1","status":500}
|
||||
```
|
||||
|
||||
- **风险**:🟡 中危 — 泄露了后端 Spring 框架的错误信息格式
|
||||
- **建议**:返回通用错误消息,隐藏框架细节
|
||||
|
||||
---
|
||||
|
||||
## 二、Host 头注入测试
|
||||
|
||||
### 2.1 测试结果
|
||||
|
||||
| 测试 | Host 值 | 结果 | 风险 |
|
||||
|------|---------|------|------|
|
||||
| 替换 Host | `evil.com` | ✅ 正常返回页面内容 | 🟡 缓存投毒 |
|
||||
| X-Forwarded-Host | `evil.com` | 空响应 | ✅ 被过滤 |
|
||||
| 双重 Host | 正常 + evil | 正常返回 | 🟡 |
|
||||
| HTTP 请求走私 | CL.TE | 405 Not Allowed | ✅ 被拒绝 |
|
||||
|
||||
### 2.2 Host 头注入风险分析
|
||||
|
||||
服务器在收到 `Host: evil.com` 时仍然返回了完整的页面内容(HTML),这意味着:
|
||||
1. OpenResty 的 `server_name` 配置可能使用了通配符或 `default_server`
|
||||
2. 如果前方有 CDN 或反向代理缓存,攻击者可利用此特性进行**缓存投毒**
|
||||
3. 如果页面中使用了 `Host` 头生成链接(如密码重置邮件链接),可导致**开放重定向**
|
||||
|
||||
**建议**:在 Nginx/OpenResty 配置中添加 Host 头严格校验:
|
||||
```nginx
|
||||
if ($host !~* ^(zfcg\.czt\.fujian\.gov\.cn)$) {
|
||||
return 444;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、同体系政务子域名安全扫描
|
||||
|
||||
### 3.1 安全配置对比矩阵
|
||||
|
||||
| 域名 | CSP | HSTS | X-Frame-Options | X-Content-Type | WAF (SQLi) | Actuator |
|
||||
|------|-----|------|----------------|---------------|------------|----------|
|
||||
| **zfcg.czt.fujian.gov.cn** | ❌ 缺失 | ❌ | ❌ (主页) | ❌ | WAF DROP | 401 |
|
||||
| rst.fujian.gov.cn (人社厅) | ✅ frame-ancestors | ❌ | ✅ SAMEORIGIN | ❌ | ✅ 493 | 493 |
|
||||
| slt.fujian.gov.cn (水利厅) | ✅ frame-ancestors | ❌ | ✅ SAMEORIGIN | ❌ | ✅ 493 | 493 |
|
||||
| zjt.fujian.gov.cn (住建厅) | ✅ frame-ancestors | ❌ | ✅ SAMEORIGIN | ❌ | ✅ 493 | 493 |
|
||||
| sthjt.fujian.gov.cn (生态环境厅) | ✅ frame-ancestors | ❌ | ✅ SAMEORIGIN | ❌ | ✅ 493 | 493 |
|
||||
| mzt.fujian.gov.cn (民政厅) | ✅ frame-ancestors | ❌ | ✅ SAMEORIGIN | ❌ | ✅ 493 | 493 |
|
||||
| tjj.fujian.gov.cn (统计局) | ✅ frame-ancestors | ❌ | ✅ SAMEORIGIN | ❌ | ✅ 493 | 493 |
|
||||
|
||||
### 3.2 关键发现
|
||||
|
||||
**A. 统一 WAF 防护(HTTP 493)**
|
||||
|
||||
所有 `*.fujian.gov.cn` 子域名对恶意请求(SQL 注入探测、Actuator 路径访问)统一返回 **HTTP 493**(自定义状态码),表明福建省政务网站群部署了**统一的 WAF 防护平台**。
|
||||
|
||||
> [!IMPORTANT]
|
||||
> `zfcg.czt.fujian.gov.cn`(政采网)未走此统一 WAF,而是使用自己的 OpenResty 层做防护。这造成了防护标准不统一的风险。
|
||||
|
||||
**B. CSP frame-ancestors 白名单暴露了完整政务网站拓扑**
|
||||
|
||||
从 CSP 头中我们可以提取完整的政务网站关系图:
|
||||
|
||||
```
|
||||
福建省政府门户 (www.fujian.gov.cn / www.fj.gov.cn)
|
||||
├── 平台管理 (ptgl.fujian.gov.cn)
|
||||
├── 人社厅 (rst.fujian.gov.cn)
|
||||
├── 水利厅 (slt.fujian.gov.cn)
|
||||
├── 住建厅 (zjt.fujian.gov.cn)
|
||||
├── 生态环境厅 (sthjt.fujian.gov.cn)
|
||||
├── 交通运输厅 (jtyst.fujian.gov.cn)
|
||||
├── 农业农村厅 (nynct.fujian.gov.cn)
|
||||
├── 民政厅 (mzt.fujian.gov.cn / mzzjt.fujian.gov.cn)
|
||||
├── 教育厅 (jyt.fujian.gov.cn)
|
||||
├── 科技厅 (kjt.fujian.gov.cn)
|
||||
├── 体育局 (tyj.fujian.gov.cn)
|
||||
├── 应急厅 (yjt.fujian.gov.cn)
|
||||
├── 统计局 (tjj.fujian.gov.cn)
|
||||
├── 海洋渔业局 (hyyyj.fujian.gov.cn)
|
||||
├── 商务厅 (swt.fujian.gov.cn)
|
||||
├── 林业局 (lyj.fujian.gov.cn)
|
||||
├── 自然资源厅 (zrzyt.fujian.gov.cn)
|
||||
├── 司法厅 (sft.fujian.gov.cn)
|
||||
├── 财政厅 (czt.fujian.gov.cn)
|
||||
│ └── 政府采购 (zfcg.czt.fujian.gov.cn) ← 本次评估目标
|
||||
├── 市场监管局食药监 (yjj.scjgj.fujian.gov.cn)
|
||||
└── 国际化域名 (xn--imr30xzi13b942dz5d08ej3e.xn--zfr164b)
|
||||
```
|
||||
|
||||
**C. 所有子域名共同缺陷**
|
||||
|
||||
| 缺陷 | 影响 | 建议 |
|
||||
|------|------|------|
|
||||
| ❌ 无 HSTS | 全体易受 SSL 剥离 | 统一部署 HSTS |
|
||||
| ❌ 无 X-Content-Type-Options | MIME 嗅探风险 | 添加 nosniff |
|
||||
| CSP 使用 HTTP + HTTPS | CSP 白名单过宽 | 仅保留 HTTPS |
|
||||
|
||||
---
|
||||
|
||||
## 四、综合风险发现
|
||||
|
||||
### 本轮新增风险
|
||||
|
||||
| # | 风险项 | 等级 | 章节对照 |
|
||||
|---|--------|------|----------|
|
||||
| R-01 | Host 头注入(缓存投毒) | 🟡 中危 | Ch7 服务器配置 |
|
||||
| R-02 | checkToken 泄露 Spring 框架信息 | 🟡 中危 | Ch7 |
|
||||
| R-03 | 政采网未走统一 WAF (493) | 🟡 中危 | Ch7/Ch9 |
|
||||
| R-04 | CSP 白名单暴露政务网站拓扑 | 🟡 中危 | Ch3 信息泄露 |
|
||||
| R-05 | 全省政务网站无 HSTS | 🟡 中危 | Ch4 HTTPS |
|
||||
| R-06 | Token 双重保护机制 | ✅ 安全 | Ch5 会话管理 |
|
||||
|
||||
### 累计风险统计(全部 12 轮测试)
|
||||
|
||||
| 等级 | 数量 | 新增 |
|
||||
|------|------|------|
|
||||
| 🔴 紧急 | 5 | 0 |
|
||||
| 🔴 高危 | 6 | 0 |
|
||||
| 🟡 中危 | 21 | +6 |
|
||||
| 🟢 低危 | 3 | 0 |
|
||||
| ✅ 安全 | 5 | +1 |
|
||||
|
||||
---
|
||||
|
||||
## 五、建议
|
||||
|
||||
1. **政采网应接入全省统一 WAF**(HTTP 493 机制),统一防护标准
|
||||
2. **OpenResty 配置 Host 头严格校验**,拒绝不匹配的 Host
|
||||
3. **全省政务网站统一部署 HSTS**
|
||||
4. **CSP 白名单移除 HTTP,仅保留 HTTPS 源**
|
||||
5. **API 错误响应统一化**,隐藏框架细节
|
||||
在新工单中引用
屏蔽一个用户