|
93 | 93 | | postMessage XSS | 页面HTML5特性/PostMessage XSS | `<img src=x onerror=alert(1)>` | 接收窗口未校验origin且用`innerHTML`写入消息 | |
94 | 94 |
|
95 | 95 |
|
96 | | - |
97 | 96 | ## SQL注入 |
98 | 97 |
|
99 | 98 | SQL注入模块适合作为综合性Java靶场的核心模块:当前覆盖了JDBC原生拼接、伪预编译拼接、JdbcTemplate拼接、参数化查询、MyBatis动态SQL、Hibernate HQL/原生SQL、JPA JPQL/动态排序等常见开发栈。 |
@@ -194,5 +193,73 @@ SQL注入模块适合作为综合性Java靶场的核心模块:当前覆盖了J |
194 | 193 | | JPA排序白名单 | `GET /sqli/jpa/safe-order?orderBy=username` | 合法字段 | 正常排序 | |
195 | 194 | | JPA排序白名单拦截 | `GET /sqli/jpa/safe-order?orderBy=username desc` | 非白名单字段 | 返回排序字段不合法 | |
196 | 195 |
|
| 196 | +## 任意文件操作 |
| 197 | + |
| 198 | +任意文件操作模块适合作为综合性Java靶场的基础模块:当前覆盖了任意文件上传、任意文件读取、任意文件下载、任意文件删除四类常见风险,能串联“上传恶意文件 -> 通过静态映射访问 -> 读取/下载敏感文件 -> 删除业务文件”的典型文件安全链路。 |
| 199 | + |
| 200 | +本次已将页面描述统一为:任意文件类漏洞的本质是用户可控的文件名、路径、内容或文件元数据进入文件系统操作后,应用没有正确限制目录边界、文件类型、访问方式和业务权限。修复时不要只依赖字符串替换、黑名单或前端限制,应使用后端白名单、服务端生成文件名、路径标准化、真实路径校验、目录隔离、权限校验和审计日志。 |
| 201 | + |
| 202 | +已覆盖类型 |
| 203 | + |
| 204 | +| 分类 | 已有场景 | 结论 | |
| 205 | +| -------- | ----------------------------------------------- | ------------------------------------------------------------ | |
| 206 | +| 文件上传 | 任意类型上传、图片后缀白名单、图片内容校验 | 覆盖上传入口、后缀校验误区和上传后访问方式的影响 | |
| 207 | +| 文件读取 | 绝对路径/目录穿越读取、上传目录限制 | 覆盖敏感文件读取和安全目录边界校验 | |
| 208 | +| 文件下载 | 绝对路径/目录穿越下载、文件名校验、上传目录限制 | 覆盖附件下载类接口的常见风险 | |
| 209 | +| 文件删除 | 任意路径删除、上传目录限制 | 覆盖破坏性文件操作风险,并强调只使用临时文件测试 | |
| 210 | +| 静态映射 | `/file/**` 映射到上传目录 | 说明上传文件可被访问,需关注脚本解析、内容类型和独立域名隔离 | |
| 211 | + |
| 212 | +模块覆盖符合综合性靶场定位。后续如需增强,可补充“Zip Slip压缩包目录穿越”“文件覆盖/路径可控文件名”“软链接绕过专项”“MIME/魔数绕过”“大文件/压缩炸弹DoS”“日志文件读取/下载”等场景。当前 XSS 模块已包含 HTML/SVG/PDF/XML 上传导致 XSS 的内容安全案例,任意文件模块保留为文件系统操作主线即可。 |
| 213 | + |
| 214 | +### 文件上传测试 |
| 215 | + |
| 216 | +页面:`/file/upload` |
| 217 | + |
| 218 | +| 场景 | 请求/入口 | 测试输入 | 预期结果 | |
| 219 | +| --------------------- | --------------------------- | ------------------------------------ | -------------------------------------------------- | |
| 220 | +| 任意文件上传 | `POST /file/upload/vul` | `test.jsp` 或任意扩展名文件 | 返回“上传文件成功”及 `/file/<文件名>` 访问路径 | |
| 221 | +| 上传后访问 | `GET /file/<文件名>` | 上一步返回文件名 | 文件可被静态映射访问;Spring Boot 默认不会解析 JSP | |
| 222 | +| 安全上传-图片 | `POST /file/upload/safe` | 真实 `png/jpg/gif/jpeg/bmp/ico` 图片 | 后缀白名单和图片内容校验均通过,上传成功 | |
| 223 | +| 安全上传-脚本拦截 | `POST /file/upload/safe` | `jsp/php/html` | 返回“只能上传图片哦!” | |
| 224 | +| 安全上传-伪造后缀拦截 | `POST /file/upload/safe` | 内容不是图片的 `test.png` | 返回“文件内容与图片类型不匹配!” | |
| 225 | +| 流量包/示例Payload | 页面右上角 Payload/流量分析 | `test.jsp`、`upload.pcapng` | 可下载对应测试文件 | |
| 226 | + |
| 227 | +### 文件读取测试 |
| 228 | + |
| 229 | +页面:`/file/read` |
| 230 | + |
| 231 | +| 场景 | 请求 | 测试输入 | 预期结果 | |
| 232 | +| --------------------- | --------------------------------------------------- | ------------------ | ------------------------------------------ | |
| 233 | +| 绝对路径读取 | `GET /file/read/vul?fileName=/etc/hosts` | `/etc/hosts` | 返回文件内容 | |
| 234 | +| 目录穿越读取 | `GET /file/read/vul?fileName=../../../../etc/hosts` | `../` payload | 如果路径解析到真实文件,返回文件内容 | |
| 235 | +| 安全读取-越权拦截 | `GET /file/read/safe?fileName=/etc/hosts` | 绝对路径 | 返回“访问被拒绝:文件路径不合法”或不可访问 | |
| 236 | +| 安全读取-目录内文件 | `GET /file/read/safe?fileName=<上传目录内文件名>` | 上传目录内普通文件 | 返回文件内容 | |
| 237 | +| 安全读取-符号链接绕过 | `GET /file/read/safe?fileName=<指向外部的软链接>` | 上传目录内软链接 | 返回“文件真实路径不合法” | |
| 238 | + |
| 239 | +### 文件下载测试 |
| 240 | + |
| 241 | +页面:`/file/download` |
| 242 | + |
| 243 | +| 场景 | 请求 | 测试输入 | 预期结果 | |
| 244 | +| --------------------- | ------------------------------------------------------- | ------------------ | -------------------------------- | |
| 245 | +| 绝对路径下载 | `GET /file/download/vul?fileName=/etc/passwd` | `/etc/passwd` | 以附件形式返回文件,存在则可下载 | |
| 246 | +| 目录穿越下载 | `GET /file/download/vul?fileName=../../../../etc/hosts` | `../` payload | 如果路径解析到真实文件,返回附件 | |
| 247 | +| 安全下载-非法文件名 | `GET /file/download/safe?fileName=/etc/hosts` | 绝对路径 | 返回 400 或 404,不允许下载 | |
| 248 | +| 安全下载-目录内文件 | `GET /file/download/safe?fileName=<上传目录内文件名>` | 上传目录内普通文件 | 正常下载 | |
| 249 | +| 安全下载-符号链接绕过 | `GET /file/download/safe?fileName=<指向外部的软链接>` | 上传目录内软链接 | 返回 403 “文件真实路径不合法” | |
| 250 | + |
| 251 | +### 文件删除测试 |
| 252 | + |
| 253 | +页面:`/file/delete` |
| 254 | + |
| 255 | +| 场景 | 请求 | 测试输入 | 预期结果 | |
| 256 | +| --------------------- | ------------------------------------------------------------ | ------------------ | -------------------------------- | |
| 257 | +| 任意路径删除 | `GET /file/delete/vul?filePath=./src/main/resources/static/upload/demo.txt` | 临时测试文件 | 文件存在时返回删除成功 | |
| 258 | +| 目录穿越删除 | `GET /file/delete/vul?filePath=../../tmp/demo.txt` | 仅限临时文件 | 如果路径存在且有权限,会尝试删除 | |
| 259 | +| 安全删除-越权拦截 | `GET /file/delete/safe?fileName=../test` | `../` payload | 返回“访问被拒绝:文件路径不合法” | |
| 260 | +| 安全删除-目录内文件 | `GET /file/delete/safe?fileName=<上传目录内文件名>` | 上传目录内普通文件 | 文件存在时删除成功 | |
| 261 | +| 安全删除-符号链接绕过 | `GET /file/delete/safe?fileName=<指向外部的软链接>` | 上传目录内软链接 | 返回“文件真实路径不合法” | |
| 262 | + |
| 263 | +### |
197 | 264 |
|
198 | 265 | # Java 专题 |
0 commit comments