初始化: 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
这个提交包含在:
hao
2026-03-16 17:10:23 -07:00
当前提交 cda31e86c7
修改 33 个文件,包含 6072 行新增0 行删除

查看文件

@@ -0,0 +1,321 @@
# Web 安全攻防全景指南 × 福建省政府采购网 漏洞对照分析报告
> **评估时间**2026-03-10
> **评估目标**`zfcg.czt.fujian.gov.cn`(福建省政府采购网)
> **参照标准**Web 安全攻防全景指南10 大领域)
---
## 总览:漏洞与指南章节映射
| 指南章节 | 涉及漏洞数 | 最高等级 | 关键发现 |
|----------|-----------|----------|----------|
| 1. Web 端安全注入 | 2 | 🟢 低 | SQL 注入被 WAF 静默拦截;XSS 风险理论存在 |
| 2. 客户端本地数据安全 | 4 | 🔴 紧急 | JWT/PII 明文存储于 localStorage/sessionStorage |
| 3. 跨域安全与同源策略 | 2 | 🟡 中 | CORS Headers 通配符;缺少 CSRF Token |
| 4. HTTPS 与传输层安全 | 2 | 🔴 高危 | OAuth 重定向使用 HTTP;缺少 HSTS |
| 5. 身份认证与会话安全 | 4 | 🔴 高危 | 无暴力破解防护;弱密码校验关闭;Token 7h 有效期 |
| 6. 服务器端安全漏洞 | 1 | 🟡 中 | 路径遍历测试被拦截 |
| 7. 服务器配置与基础设施 | 5 | 🔴 紧急 | Nacos 8848 对外暴露;Actuator 可公网触达 |
| 8. 开源软件与依赖安全 | 2 | 🟡 中 | jQuery 1.12.4 已知 CVE;CKEditor 历史漏洞 |
| 9. 安全规范与全流程管理 | 2 | 🟡 中 | 版本号暴露;配置文件泄露加密密钥 |
| 10. 提权攻击验证 | 3 | 🟡 中 | userTypeNow 修改被检测;PII 可被社工利用 |
---
## 1. Web 端安全注入
### 1.1 SQL 注入 → 🟢 低危(有防护)
| 测试项 | Payload | 结果 |
|--------|---------|------|
| 经典注入 | `admin'--` | 空响应WAF 拦截) |
| 联合注入 | `UNION SELECT 1,2,3--` | 空响应WAF 拦截) |
| 布尔盲注 | `admin" OR 1=1--` | 空响应WAF 拦截) |
| 认证态注入 | `userId=...%27 OR 1=1--` | 空响应WAF 拦截) |
**指南对照**:系统对 SQL 注入有**有效的 WAF 防护**(静默 DROP 策略,符合参数化查询防御规范。但建议确认后端是否同时使用了参数化查询ORM,而非仅依赖 WAF。
### 1.2 XSS → 🟡 中危(理论风险高)
| 风险点 | 状态 | 影响 |
|--------|------|------|
| CKEditor 富文本编辑器 | 版本未知,历史 XSS 多 | 存储型 XSS 可能 |
| 缺少 CSP 策略 | ❌ 未配置 | 无法防御内联脚本注入 |
| jQuery 1.12.4 CVE | CVE-2020-11022/11023 | DOM XSS |
| Token 在 localStorage | 可被 JS 直接读取 | XSS → Token 窃取 |
**指南对照**
- ❌ 未实施 CSP违反 1.2 输出编码/CSP 规范)
- ❌ Token 未使用 HttpOnly Cookie违反 1.2 HttpOnly Cookie 规范)
- ❌ 使用陈旧 jQuery违反 8.1 版本更新规范)
---
## 2. Web 客户端本地数据安全
### 2.1 Cookies 安全 → 🔴 高危
| Cookie | HttpOnly | Secure | SameSite | 评估 |
|--------|----------|--------|----------|------|
| `access_token` | ❌ 否 | 未确认 | 未设置 | 🔴 **紧急** |
| `tenantId` | ❌ 否 | 未确认 | 未设置 | 🟡 中危 |
**指南对照**
- ❌ 违反 2.1「HttpOnly 属性」规范 — Token Cookie 可被 JS 读取
- ❌ 违反 2.1「SameSite 属性」规范 — 未设置跨站防护
- ❌ 违反 2.1「Cookie 签名与加密」规范 — Token 明文存储
### 2.2 Local Storage 与 Session Storage → 🔴 紧急
| 存储位置 | 键名 | 泄露内容 | 风险 |
|----------|------|----------|------|
| localStorage | `portal-access_token` | 完整 JWT Token | 🔴 XSS → 冒充 |
| localStorage | `errLog` | 后端堆栈/接口路径 | 🟡 架构泄露 |
| sessionStorage | `ice-USER_DATA_INFO` | 手机号/邮箱/CA标识/userId | 🔴 PII 泄露 |
**指南对照**
-**严重违反** 2.2「禁止存储敏感信息」规范 — JWT Token 明文存储于 localStorage
-**严重违反** 2.2 规范 — PII手机号 `13514069349`、邮箱 `3808789405@qq.com`)存储于 sessionStorage
---
## 3. 跨域安全与同源策略
### 3.1 CORS → 🟡 中危
| 测试 | 结果 |
|------|------|
| `Origin: https://evil.com` → Allow-Origin 回显 | ❌ 未回显(✅安全) |
| `Access-Control-Allow-Headers` | `*`(🟡 过宽) |
**指南对照**
- ✅ 未盲目反射 Origin符合 3.1 规范)
- ❌ Headers 使用通配符(违反 3.1「限制允许的头部」规范)
### 3.2 CSRF → 🟡 中危
- 未发现 Anti-CSRF Token 机制
- SameSite Cookie 未设置
- 依赖 OAuth Bearer Token 作为隐式防护
**指南对照**
- ❌ 缺少 Anti-CSRF Token违反 3.2 规范)
- ❌ SameSite 未设置(违反 3.2 规范)
---
## 4. HTTPS 与传输层安全
### 4.1 未加密传输 → 🔴 高危
| 发现 | 详情 |
|------|------|
| OAuth 重定向使用 HTTP | `Location: http://zfcg.czt.fujian.gov.cn/gp-auth-center/oauth/authorize?...` |
| 缺少 HSTS 头 | 未配置 `Strict-Transport-Security` |
**指南对照**
-**严重违反** 4.1 MITM 防护规范 — OAuth 授权码通过 HTTP 明文传输
- ❌ 违反 4.3「强制 HTTPS (HSTS)」规范
### 4.2 重放攻击 → 🟡 中危
- JWT 包含 `jti`Token ID,理论上可用于防重放
- 但未确认后端是否维护 jti 黑名单
- Token 有效期 7 小时,窗口期较长
---
## 5. 身份认证与会话安全
### 5.1 密码安全 → 🟡 中危
| 测试项 | 结果 |
|--------|------|
| 弱密码校验 | ❌ **已关闭**`isShowWeakPassword: false` |
| 验证码强度 | 4 位静态图形码,OCR 可自动识别 |
| 暴力破解防护 | ❌ **不存在** — 5 次快速尝试无阻断 |
| 账户锁定机制 | ❌ 未发现 |
**指南对照**
- ❌ 违反 5.1「防暴力破解」规范 — 无速率限制、无账户锁定、验证码强度极弱
- ❌ 违反 5.1「密码策略」规范 — 弱密码校验被管理员关闭
### 5.2 会话管理 → 🟡 中危
| 维度 | 状态 |
|------|------|
| Token 算法 | ✅ RS256安全 |
| Token 有效期 | ⚠️ ~7 小时(过长) |
| Token 过期校验 | ✅ 正常拒绝code 5560 |
| Session 固定防护 | 未测试 |
---
## 6. 服务器端安全漏洞
### 6.1 SSRF → 未测试
### 6.2 XXE → 未测试(系统主要使用 JSON,非 XML
### 6.3 文件上传 → 未测试
### 6.4 路径遍历 → 🟢 低危
| 测试 | Payload | 结果 |
|------|---------|------|
| 文件下载路径遍历 | `path=../../etc/passwd` | 空响应(被拦截) |
---
## 7. 服务器配置与基础设施安全
### 7.1 Nacos 服务注册中心暴露 → 🔴 紧急
| IP | 端口 | TCP 状态 |
|----|------|----------|
| 112.54.45.252 | 8848 | **OPEN** |
| 120.35.30.176 | 8848 | **OPEN** |
| 114.115.172.176 | 8848 | **OPEN** |
**指南对照**:严重违反 7.x 服务器配置安全规范 — 微服务注册中心核心组件直接对公网暴露。
### 7.2 Spring Boot Actuator → 🟡 中危
- `/gateway/actuator/health|beans|mappings` 返回 401Nginx Basic Auth
- `/gateway/actuator/env` 返回 403额外封锁
### 7.3 安全响应头 → 🟡 中危
| 响应头 | 状态 |
|--------|------|
| `X-Content-Type-Options: nosniff` | ✅ 已配置 |
| `X-XSS-Protection: 1; mode=block` | ✅ 已配置 |
| `X-Frame-Options` | ✅ `SAMEORIGIN` |
| `Content-Security-Policy` | ❌ **缺失** |
| `Strict-Transport-Security` | ❌ **缺失** |
| `Referrer-Policy` | ✅ `no-referrer` |
### 7.4 非标端口暴露 → 🟡 中危
| IP | 端口 | 响应 |
|----|------|------|
| 112.54/120.35 | 8080 | 404 OpenResty |
| 120.35.30.176 | 9090 | 502 Bad Gateway |
| 114.115.172.176 | 8090 | 400 Bad Request |
---
## 8. 开源软件与依赖安全
| 组件 | 版本 | 已知 CVE | 风险 |
|------|------|----------|------|
| jQuery | 1.12.4 | CVE-2020-11022, CVE-2020-11023 | 🟡 中XSS |
| CKEditor | 未知 | 多个历史 XSS CVE | 🟡 中 |
| nginx | 1.20.2(华为云) | 非最新版 | 🟢 低 |
| sm2.min.js | V3.0.0.574 | 未知 | 🟢 低 |
**指南对照**
- ❌ 违反 8.1「版本更新」规范 — jQuery 1.12.4 发布于 2016 年
---
## 9. 安全规范与全流程管理
| 发现 | 对应规范 |
|------|----------|
| HTML `data-tag` 暴露版本号 | 违反「信息最小化原则」 |
| `config.js` 暴露 RSA 公钥/SM4 密钥 | 违反「敏感配置管理」规范 |
| 错误日志写入 localStorage | 违反「生产环境日志管理」规范 |
| `isShowWeakPassword: false` 生产环境暴露 | 违反「安全默认配置」原则 |
---
## 10. 提权攻击验证(实测记录)
### 10.1 userTypeNow 修改提权测试
| 步骤 | 操作 | 结果 |
|------|------|------|
| 1 | 读取 `sessionStorage['ice-USER_DATA_INFO']` | `userTypeNow: "3"` (代理机构) |
| 2 | 修改 `userTypeNow``"1"` (疑似管理员) | ✅ 成功写入 sessionStorage |
| 3 | 刷新页面 `location.reload()` | ⚠️ 弹出"登录超时",会话失效 |
| 4 | 恢复 `userTypeNow``"3"` | 会话已失效,需重新登录 |
**结论**
- ✅ 后端/前端有角色一致性校验机制 — 修改 userTypeNow 后刷新会导致 Token 与 Session 数据不一致检测
- ⚠️ **但未测试不刷新页面的情况** — 如果仅通过前端路由SPA 内部跳转)而非页面刷新切换到管理员模块,可能绕过此校验
- ⚠️ **角色枚举信息泄露** — Token Payload 暴露了角色体系(`userTypeNow: "3"`),攻击者可推断出完整的角色类型列表
### 10.2 PII 提取 → 社工攻击链
```
sessionStorage['ice-USER_DATA_INFO']
→ 手机号: 13514069349
→ 邮箱: 3808789405@qq.com
→ CA标识: 3452585403150523
攻击链:
XSS漏洞 → 窃取 sessionStorage → 提取 PII
→ 伪装成政采网客服致电/发邮件
→ 诱导用户提供密码或 CA 证书
→ 完全控制账户
```
### 10.3 JWT Token 冒充攻击
```
localStorage['portal-access_token']
→ 完整 JWT TokenRS256 签名,7h 有效期)
攻击链:
XSS漏洞 → 窃取 localStorage Token
→ 在攻击者浏览器中设置 Cookie: access_token=<stolen_token>
→ 直接访问 https://zfcg.czt.fujian.gov.cn/all-portal/portal/
→ 完全冒充受害者身份进行所有操作(~7小时窗口
```
---
## 综合风险热力图
```
影响severity →
Low Medium High Critical
┌─────────┬──────────┬─────────┬──────────┐
Confirmed │ SQLi拦截 │ jQuery │ 无暴破 │ Token │
已验证 │ 路径遍历 │ CORS * │ HTTP │ PII明文 │
│ │ Actuator │ OAuth │ Nacos │
├─────────┼──────────┼─────────┼──────────┤
Likely │ │ CKEditor │ CSRF │ XSS→Token│
可能 │ │ 版本暴露 │ IDOR │ 社工攻击 │
├─────────┼──────────┼─────────┼──────────┤
Potential │ │ Session │ 垂直越权│ │
潜在 │ │ Fixation │ SSRF │ │
└─────────┴──────────┴─────────┴──────────┘
可能性 likelihood →
```
---
## 优先修复路线图
### P0 — 今日内
1. 封禁 Nacos 8848/9848 端口公网访问
2. JWT Token 迁移至 HttpOnly + Secure + SameSite Cookie
3. 清除 sessionStorage 中的用户 PII 数据
4. OAuth 重定向强制 HTTPS + 配置 HSTS
### P1 — 一周内
5. 实施登录限速5 次/分钟)+ 账户锁定5 次失败锁 30 分钟)
6. 配置 CSP 安全策略
7. 启用弱密码校验 `isShowWeakPassword: true`
8. 升级 jQuery 至 3.7+
9. Actuator 从公网完全摘除
### P2 — 一月内
10. Token 有效期缩短至 30 分钟 + Refresh Token
11. CORS `Access-Control-Allow-Headers` 精确白名单
12. 引入滑动拼图验证码替代图形码
13. JWT Payload 最小化(移除 PII
14. 配置文件敏感信息改为后端动态下发