skills/code-audit/java/java-file-audit/SKILL.md
Java 源码文件操作类漏洞审计。当在 Java 白盒审计中需要检测文件相关漏洞时触发。 覆盖 5 类文件风险: 任意文件上传(MultipartFile/Servlet Part/类型绕过)、任意文件读取(NIO/IO流/路径穿越)、 任意文件写入(覆盖配置/WebShell落地)、归档提取漏洞(ZipInputStream/Zip Slip)、文件删除/重命名竞争。 需要 java-audit-pipeline 提供的数据流证据。
npx skillsauth add wgpsec/AboutSecurity java-file-auditInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
本 skill 聚焦源码层面判断"文件操作漏洞是否成立",核心是验证路径可控性、文件名可控性和内容可控性。构造上传绕过 payload、目录穿越利用链等运行时利用技术属于对应黑盒 exploit skill 范畴。
根据遇到的 Sink 函数类型,进入不同审计分支:
| Sink 函数 | 分支 | 典型严重度 |
|-----------|------|-----------|
| MultipartFile.transferTo() / Part.write() | 文件上传 | Critical-High |
| FileInputStream / Files.readAllBytes() / new File(path) / ClassLoader.getResourceAsStream() | 文件读取 | High-Medium |
| FileOutputStream / Files.write() / FileWriter | 文件写入 | Critical-High |
| ZipInputStream.getNextEntry() / ZipFile.entries() | 归档提取 | High |
| File.delete() / Files.delete() | 文件删除 | Medium |
上传漏洞本质是三要素同时满足: 可执行扩展名 + Web 可达存储路径 + 未被重命名/内容清洗。
file.transferTo(new File(dir + file.getOriginalFilename())) — getOriginalFilename() 返回客户端原始文件名,可含 ../ 路径穿越或恶意扩展名part.write(uploadPath + fileName) — 检查 fileName 是否来自 part.getSubmittedFileName() 且未净化file.getContentType() 来自客户端 HTTP 头,完全可伪造;扩展名白名单更可靠但需 toLowerCase() 处理../ 跳出上传目录,Paths.get(dir, fileName).normalize() 后需验证前缀spring.servlet.multipart.location / max-file-size / max-request-size 配置影响上传行为,检查是否限制合理ImageIO.read() 或 Apache Tika),而非信任 Content-Type路径穿越是文件读取漏洞的核心,../ 及其变体可跳出预期目录:
../: new FileInputStream("/data/" + userPath) — 用户输入 ../../etc/passwd 读取任意文件Path resolved = baseDir.resolve(userInput).normalize(); if (!resolved.startsWith(baseDir)) throw ... — normalize() 消除 ../,startsWith() 校验前缀%2e%2e%2f(../)、双重编码 %252e%252e%252f — 检查框架是否自动解码后再传入路径classpath: 协议限于类路径内,file: 协议可访问文件系统 — 检查协议是否用户可切换写入漏洞需要: 路径可控 + 内容可控 + 写入路径可被 Web 容器执行。
Files.write(Paths.get(dir + filename), content.getBytes()) — 路径和内容同时可控时,写入 .jsp 到 Web 根即获得 RCEapplication.yml / application.properties 修改数据源、重定向等配置;覆写 web.xml 添加恶意 Servlet 映射Zip Slip 是归档提取最经典的漏洞,恶意归档条目名含 ../ 导致任意路径写入:
../: new File(destDir, entry.getName()) — 条目名如 ../../webapps/ROOT/shell.jsp 直接写入 Web 目录file.getCanonicalPath() 和 destDir.getCanonicalPath(),验证文件路径以目标目录为前缀new File(dir + userInput).delete() — 用户输入 ../../important.conf 删除关键文件Files.delete(path) 删除链接目标而非链接本身(取决于实现),File.delete() 仅删除链接testing
Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产(Blob Storage/App Service/Azure VM/Azure Functions)、获取 Azure 凭据(Service Principal/Managed Identity/Access Token)、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面
tools
Mythic C2 操作方法论。当需要部署 Mythic、选择 Mythic Agent、安装 C2 Profile、配置 HTTP/DNS/WebSocket/SMB/TCP 通信、生成 payload、管理回连任务,或把 Mythic 作为跨平台 C2 框架用于授权红队演练时使用。覆盖 mythic-cli 安装、Agent/Profile 选择、SSL 证书配置、payload 构建和基础 OPSEC 判断
development
Docker 安全测试与容器渗透方法论。当需要评估 Docker 容器、Docker Daemon、Docker Registry、镜像层、构建产物或容器逃逸风险时使用。覆盖容器环境识别、特权容器逃逸、docker.sock/Remote API 利用、procfs/cgroup/capabilities 滥用、Docker 用户组提权、运行时/内核 CVE、Registry 枚举、镜像层 Secret 分析和构建上下文泄露。发现 Docker 容器环境、Registry 暴露、镜像凭据或容器配置错误时应使用此技能
development
使用 PadBuster 进行 Padding Oracle 攻击。当发现 Web 应用使用 CBC 模式加密且存在 Padding Oracle 漏洞时使用。PadBuster 可自动解密密文和伪造任意明文对应的合法密文,适用于加密 Cookie/Token/URL 参数。任何涉及 Padding Oracle 攻击、CBC 密文解密、Cookie 伪造的场景都应使用此技能