跳转到帖子
应急响应中心的俱乐部博客
  • 篇帖子

    283
  • 篇意见

    0
  • 次查看

    2342

关于此博客

背景 这篇文章整理的是一次比较典型的 WebShell 排查过程。场景并不复杂:一套老旧 PHP 业务被发现存在异常外联和可疑文件落地,前端访问基本正常,业务侧最初只看到偶发 500 和目录下出现陌生 PHP 文件。类似事件在实际环境里很常见,真正有长期价值的不是某个“神奇命令”,而是把日志、文件、进程、代码审计串起来,形成可复用的排查闭环。 文中会尽量保留关键技术细节,但不会展开攻击利用或控制类操作,重点放在防守视角的取证、定位、修复和加固。 问题现象 Web 目录下出现非发布流程产生的 PHP 文件,文件名接近缓存文件或图片缩略图命名。 Nginx 访问日志中存在少量异常 POST 请求,User-Agent 比较固定。 业务上传目录中出现可执行脚本,且部分文件修改时间集中在凌晨。 应用错误日志中出现过一次上传组件报错,随后开始出现异常访问。 从这些现象看,优先怀疑入口在文件上传、后台富文本、插件组件或历史遗留接口。因为文件已落地到 Web 可访问目录,排查重点要覆盖“入口点”和“执行点”两部分。 第一步:先固定现场,避免线索被覆盖 很多现场排查容易一上来就删除文件或重启服务,这会
T0xfce
背景 最近在一个授权测试项目里复现了一处典型的 Web 业务漏洞。漏洞本身并不复杂,但它比较适合作为代码审计和漏洞复现的案例:入口看起来是普通查询接口,后端使用了 ORM,但在局部代码里为了拼接动态条件退回了字符串拼接,最终造成可控参数进入 SQL 片段。 这类问题在真实项目里很常见:主框架是安全的,基础库也比较规范,但业务开发为了快速实现筛选、排序、导出等功能,在某些边角逻辑里绕过了统一封装。本文整理复现思路、定位方式和修复建议,重点放在授权环境下的分析流程,不涉及未授权攻击或破坏性操作。 问题场景 目标系统提供了一个列表查询接口,用于后台运营人员查看订单记录。接口支持按状态、时间、关键字查询,同时支持前端传入排序字段和排序方向。 GET /api/order/list?status=paid&keyword=test&sortField=create_time&sortOrder=desc从功能设计上看,查询参数大致分为两类: 值类型参数:如 status、keyword、startTime、endTime,通常进入 where 条件。 结构类型参数:如 s
T0xfce
SSRF(Server-Side Request Forgery,服务端请求伪造)并不是“发现一个可控 URL”这么简单。真正有价值的分析,需要回答三个问题:请求是否真的由服务端发起、请求能否到达不应暴露的网络区域、攻击者能否读取或影响响应结果。本文以代码审计和安全验证为主线,整理一套适用于 Web 服务、Webhook、图片抓取和文档解析功能的 SSRF 分析方法。 一、典型场景与风险边界 常见的 SSRF 入口包括远程图片下载、URL 预览、Webhook 回调、PDF 或网页转码、第三方接口连通性检测等。开发者通常会接收一个 URL,然后由后端使用 HTTP 客户端访问该地址,最后将状态码、响应体或部分响应信息返回给用户。 风险并不只来自访问内网地址。即使目标服务无法直接读取响应,仍可能通过请求时间、状态码、错误信息或日志造成信息泄露。因此,审计时应分别评估网络可达性、响应可见性和请求副作用。 风险维度需要关注的问题网络范围是否可以访问本机、容器网段、办公网或管理网段协议能力是否仅允许 HTTP/HTTPS,是否错误地支持其他协议响应处理是否把完整响应、错误信息或响应头返回给用户
T0xfce
背景 文件上传是 Java Web 项目里很常见的功能,但也是代码审计中高频出问题的位置。很多漏洞并不是因为开发完全没有做校验,而是校验点放错了、信任了客户端参数,或者只处理了扩展名却忽略了存储路径、内容类型和访问控制。 这篇文章整理一个偏通用的审计思路,重点放在如何发现风险、如何验证风险边界,以及如何给出可落地的修复方案。内容不会涉及真实站点攻击,只讨论本地测试环境和代码层面的安全检查。 典型场景 常见业务包括头像上传、附件上传、富文本图片上传、工单附件、导入文件等。审计时我通常会先关注以下几个点: 上传文件是否直接保存到 Web 可访问目录。 文件名是否直接使用用户传入值。 扩展名校验是否只依赖前端或 Content-Type。 是否允许上传 HTML、SVG、JSP、jspx、jspx 等高风险类型。 是否存在路径拼接导致的目录穿越。 上传后的文件是否有独立访问鉴权。 是否对文件大小、数量、解压内容做限制。 很多项目表面上做了白名单,但细看代码会发现只对原始文件名做了字符串判断,保存时又从其他参数取文件名,导致校验和落盘对象不是同一个。 问题代码示例 下面是一段简化后的示例代码,
T0xfce
背景 近几年在代码审计和应急处置里,遇到的供应链投毒样本明显多了起来。它们不一定追求复杂的漏洞利用,更多是借助开发者信任链:包管理器、构建脚本、CI 环境变量、发布流水线等。一旦开发或构建环境被读取到敏感信息,影响范围往往比单点 Web 漏洞更大。 这篇文章整理一次典型投毒样本的静态分析过程,重点放在识别思路、防护点和排查方法上。文中不提供可直接复用的攻击代码,也不讨论绕过检测或持久化控制,只讨论如何判断风险、定位行为和做工程侧加固。 样本场景 样本来自一次内部依赖排查:某个看似正常的 npm 包在安装阶段触发异常网络访问。包名、域名和哈希这里都做了脱敏处理。初步现象包括: 安装依赖时执行了额外脚本。 脚本读取了环境变量、用户目录下的配置文件。 存在对外 HTTP 请求,目标域名与项目业务无关。 包的公开描述与代码实际功能明显不匹配。 这类样本的关键不在于“技术多高级”,而在于它混进了开发流程。很多团队对线上流量有监控,但对 CI Runner、开发机和构建容器的出站行为监控并不充分。 技术分析思路 分析供应链样本时,我一般按以下顺序做静态检查: 先看包元信息:package.json
T0xfce
背景 很多 Web 入侵事件并不是一开始就能看到明确的 WebShell 或异常进程,更多时候只是访问日志里出现了几个奇怪的请求:异常路径、非常规 User-Agent、短时间高频 404、对历史漏洞路径的批量探测等。对运维和安全人员来说,能不能从这些碎片里快速判断风险级别,往往决定了后续处置是否及时。 这篇文章整理一套我平时做 Web 攻击面排查时比较常用的方法,重点放在 Nginx 访问日志、应用日志和主机侧痕迹的交叉分析。内容偏防守和复盘,不涉及未授权利用,也不会提供攻击载荷,只讨论如何识别、验证和加固。 场景描述 某业务系统上线多年,前端由 Nginx 反向代理,后端是 Java 应用。某天监控发现 404 请求量短时间内升高,同时有少量请求命中了敏感路径规则。业务没有明显异常,但从经验看,这类情况通常有几种可能: 互联网扫描器批量探测常见漏洞路径。 针对特定组件版本的漏洞探测。 业务自身存在历史遗留接口,被外部误扫或撞库式访问。 攻击者已经掌握部分目录结构,正在做进一步枚举。 排查目标不是“证明一定被攻击”,而是回答几个问题:请求从哪里来、访问了什么、是否命中真实组件、是否造
T0xfce
背景SSRF(Server-Side Request Forgery)在真实业务里并不少见,尤其是存在“远程图片抓取、Webhook 回调、URL 预览、文档转换、文件导入、第三方接口代理”等功能时,很容易把用户可控 URL 交给服务端发起请求。这类问题的麻烦点在于:表面上只是服务端访问一个 URL,但如果边界控制不足,可能导致内网探测、云元数据访问、访问本机管理端口、打到内部未鉴权接口等风险。本文不讨论攻击利用链,只整理一次代码审计中比较通用的识别、验证和修复方法,适合做安全评审或自查时参考。常见场景审计 SSRF 时,我通常会先按功能入口梳理,而不是一上来全局搜关键字。以下场景值得重点关注:用户头像、文章封面、商品图片的“远程 URL 上传”。富文本编辑器中的 URL 预览、链接解析、OpenGraph 抓取。Webhook 测试功能,允许用户配置回调地址。PDF/Word/HTML 转换服务,支持从 URL 拉取资源。接口代理、数据同步、第三方 API 转发。运维类后台中的健康检查、连通性测试、URL ping。这些功能共同特点是:用户提供一个地址,后端用 HTTP 客户端去访问
T0xfce
背景 任意文件读取是 Web 应用里比较常见、也容易被低估的一类漏洞。它不像远程命令执行那样直接,但在真实事件里经常成为突破口:读取配置文件、源码、密钥、日志、备份文件后,攻击面会迅速扩大。 这篇文章整理一次 Java Web 项目代码审计中的典型问题。场景做了脱敏和简化,重点放在漏洞成因、审计方法、复现边界和修复思路上,避免涉及对真实系统的攻击利用。 问题场景 项目中有一个文件预览接口,用于给后台用户查看上传后的附件。接口大致逻辑是:前端传入文件名,后端拼接上传目录后读取文件内容并返回。 GET /admin/file/preview?name=report.pdf从业务上看,这类接口很常见,尤其是后台管理系统、工单系统、知识库系统中。但如果文件名参数没有做严格约束,就容易出现路径穿越,最终导致任意文件读取。 问题代码示例 审计时看到的代码结构大致如下: String baseDir = uploadConfig.getBaseDir(); String name = request.getParameter("name"); File file = new File(baseDir
T0xfce
背景 文件上传是 Web 系统里最常见、也最容易被低估的功能。很多业务团队会把它理解成“把文件放到对象存储或服务器目录”,但从安全视角看,上传接口同时涉及鉴权、文件类型识别、存储隔离、访问控制、内容解析、异步处理等多个环节。任何一个环节处理不严,都可能从普通的信息泄露演变成更严重的服务端风险。 这篇文章整理一次常见上传接口的代码审计思路,重点放在如何识别风险、如何验证问题、以及如何收敛风险。内容只讨论防护和审计方法,不涉及攻击利用链扩展。 问题场景 某业务系统提供头像、附件、报表模板等上传能力,后端接口大致逻辑如下: 前端限制文件后缀,例如只允许 jpg、png、pdf、xlsx。 后端接收 MultipartFile 后,根据原始文件名取后缀。 将文件保存到 Web 目录或挂载目录。 返回可访问 URL 给前端。 从代码审计角度,这类实现至少需要关注几个问题: 是否只依赖前端校验。 后端是否使用白名单校验,而不是黑名单拦截。 是否信任 Content-Type。 是否直接使用用户提交的文件名。 上传目录是否可执行、可解析动态脚本。 返回 URL 是否导致未授权访问或敏感文件暴露。 图
T0xfce
SSRF(Server-Side Request Forgery,服务端请求伪造)并不只是一个“能让服务器发起请求”的问题。真正影响风险的,通常是请求目标是否可控、服务器所在网络能访问哪些资源、应用是否跟随重定向,以及响应内容是否会回显给用户。本文以代码审计和本地实验为主线,整理一套适合企业 Web 应用的 SSRF 识别、验证与修复方法。一、问题背景与常见场景SSRF 常出现在需要由后端访问外部地址的功能中,例如图片远程导入、Webhook、在线截图、文档转换、URL 预览、第三方接口代理和云资源同步。典型代码逻辑是:用户提交一个 URL,服务端使用 HTTP 客户端访问该地址,再将状态码、响应内容或处理结果返回给用户。风险通常来自以下几个方面:攻击者可以控制完整 URL,服务端缺少协议、域名和端口限制。应用所在网络能够访问仅对内开放的管理接口、数据库面板或内部服务。服务端将响应正文直接返回,导致内部信息泄露。应用允许自动跟随重定向,初始校验通过后又访问了不可信目标。仅使用字符串黑名单拦截内网地址,容易被不同格式的 IP 表示绕过。二、代码审计时的定位思路审计时不要只搜索 SSRF
T0xfce
背景 文件上传是 Java Web 项目里非常常见的功能,头像、附件、导入模板、富文本图片都会用到。它看起来业务属性很强,但安全边界也最容易被低估。很多项目只做了前端限制或简单判断后缀,最后导致任意文件写入、脚本文件落地、路径穿越,甚至配合解析配置形成远程代码执行。 这篇文章不讨论具体攻击站点,也不提供针对真实系统的利用流程,主要整理一次代码审计中常见的文件上传风险点和修复思路。重点放在如何识别问题、如何验证风险、如何把修复做成闭环。 典型场景 审计对象通常是 Spring Boot 或传统 Spring MVC 项目,上传接口大致长这样:接收 MultipartFile,取原始文件名,判断后缀,然后拼接保存路径,最后返回访问 URL。 @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) throws IOException { String originalName = file.getOriginalFilename(); String suff
T0xfce
背景文件上传一直是 Web 安全里比较容易被低估的功能点。很多业务侧认为“只要限制后缀名就够了”,但在真实项目里,上传链路往往同时涉及前端校验、后端解析、对象存储、CDN 回源、图片处理组件、异步任务和访问控制。任何一个环节处理不一致,都可能把一个普通上传点变成风险入口。这篇文章不讨论攻击利用细节,也不提供绕过型 payload。主要结合日常代码审计和漏洞复现经验,整理一套适合研发、安全测试、应急排查使用的分析方法,重点放在如何识别风险、如何复现验证、如何修复和回归。典型场景常见的上传功能包括头像上传、附件上传、工单截图、富文本图片、导入模板、插件包上传等。风险通常不是来自“上传”这个动作本身,而是来自上传后的处理链路。上传文件是否被保存到 Web 可访问目录。服务端是否只依赖文件名后缀判断类型。是否允许用户控制保存路径、文件名或扩展名。是否对压缩包、文档、图片进行二次解析。下载或预览接口是否存在越权访问。对象存储桶权限是否过宽。异步处理任务是否存在命令拼接、模板注入或解析器漏洞风险。审计时不要只看上传接口,还要追踪文件从进入系统到被访问、处理、删除的完整生命周期。问题拆解一个较完整的
T0xfce
背景 文件上传是 Web 系统里很常见的功能,头像、附件、工单截图、富文本图片都会用到。它看起来只是业务能力,但在安全审计里一直属于高风险入口:一旦校验不足,可能导致脚本文件落地、解析规则误用、敏感文件覆盖、存储桶公开访问等问题。 这篇整理来自几次代码审计和复盘里的共性问题,重点放在“如何发现风险”和“如何把上传链路做稳”。不讨论未授权入侵、恶意控制等内容,只从防护和验证角度展开。 常见场景与风险点 一个典型上传链路大致包括:前端选择文件、后端接收 multipart 请求、校验文件、保存到本地或对象存储、返回访问 URL。问题通常不出在某一个点,而是多个小疏忽叠加。 只校验文件后缀,未校验真实文件类型。 使用用户提交的原始文件名保存,存在路径穿越或覆盖风险。 上传目录位于 Web 可执行路径下,被服务器按脚本解析。 图片处理库未限制尺寸,导致内存消耗异常。 对象存储权限配置过宽,上传文件被公开列举或任意读取。 业务接口缺少鉴权或额度限制,被滥用为临时网盘。 审计时建议先看入口 代码审计时,我一般先定位接收 multipart 的接口,再看三个问题:谁能传、能传什么、传到哪里。很多漏洞
T0xfce
背景 接口鉴权问题在代码审计里非常常见,但实际危害往往被低估。很多系统表面上有登录态、网关鉴权、角色菜单控制,真正落到业务接口时却只做了“是否登录”的判断,没有验证当前用户是否有权限访问目标资源。 这类问题不一定表现为传统意义上的漏洞利用链,但在真实业务中影响很直接:越权查看订单、修改他人资料、导出不属于自己的数据,甚至触发后台流程。本文整理一次典型接口鉴权缺陷的审计思路,重点放在如何发现、确认和修复,避免提供攻击性操作引导。 问题场景 审计对象是一个常见的 Java Web 后台系统,技术栈大致如下: Spring Boot + Spring MVC JWT 登录态 MyBatis 访问数据库 前端基于菜单权限展示不同页面 部分接口在网关层校验 Token 是否有效 系统中存在多个资源型接口,例如订单、工单、客户资料、附件下载等。前端菜单权限做得比较完整,但后端部分接口只依赖前端传入的 ID 查询数据,没有绑定当前登录用户或组织范围。 技术分析 审计时先看全局鉴权链路。系统使用拦截器解析 JWT,并把用户信息写入上下文: public class AuthInterceptor im
T0xfce
背景文件上传是 Web 系统里很常见的功能,头像、附件、工单截图、文档导入都会用到。也正因为入口常见、数据不可控,上传点一直是代码审计和渗透测试中优先关注的位置。这篇文章结合我在审计业务系统时经常遇到的问题,整理一套相对完整的分析思路和防护链路。重点不是讲“如何利用”,而是说明为什么某些写法不可靠,以及在工程上如何把风险压下去。常见问题场景很多上传漏洞并不是单点失误,而是多个环节同时薄弱造成的。常见场景包括:仅通过前端限制文件后缀,后端没有重新校验。后端只判断文件名后缀,没有校验 MIME、文件头、内容特征。上传目录位于 Web 可访问路径下,并且服务器可能解析动态脚本。文件名直接使用用户输入,导致路径穿越、覆盖文件或特殊字符问题。图片处理、压缩、解压等二次处理逻辑缺少边界控制。权限控制缺失,普通用户可以上传到全站公共目录。在真实项目中,最危险的情况通常是“上传目录可访问 + 文件类型校验薄弱 + Web 容器存在错误解析配置”。这类组合风险需要从代码和部署两侧一起看。技术分析先看一段比较典型的问题代码,示例使用 Java Spring 风格,其他语言也类似。public String
T0xfce
背景 登录接口看起来简单,但在实际代码审计和渗透测试中,它往往是风险密度比较高的入口。认证链路通常会同时涉及账号枚举、密码校验、验证码、风控限流、会话签发、日志记录等多个环节。任何一个环节处理不当,都可能让攻击面扩大。 这篇文章整理的是我在审计 Web 系统登录模块时常用的一套检查思路,偏长期可复用,不针对某个具体产品,也不提供攻击利用流程。重点是帮助开发和安全同学识别风险点,并给出可落地的修复建议。 典型场景 常见的登录接口大致如下:前端提交用户名、密码、验证码,后端校验账号状态和密码,成功后签发 Session 或 JWT。很多系统会在这个过程中增加图形验证码、短信验证码、失败次数限制、IP 限流等机制。 问题在于,很多实现只做了“功能可用”,但没有完整考虑异常路径。例如:账号不存在和密码错误返回不同提示;验证码只在前端校验;失败次数按 IP 记录但没有按账号记录;JWT 过期时间过长;登录日志里直接记录明文密码等。这些都属于认证链路里的常见缺陷。 技术分析 审计登录接口时,我一般会先从数据流入手,梳理一次请求从入口到会话生成的完整路径: 请求参数:用户名、密码、验证码、设备信息、
T0xfce
背景 文件上传功能在业务系统里很常见,比如头像、附件、工单截图、富文本图片等。它看起来只是一个普通入口,但在实际代码审计中,上传点往往是高风险区域:一旦校验不严,可能导致任意文件写入、脚本文件落地、路径穿越、存储型 XSS,甚至进一步扩大影响面。 这篇文章整理一套偏实战的排查思路,重点放在安全审计、复现验证和加固方案上。内容不讨论未授权入侵或恶意利用,只以授权测试环境为前提,帮助开发和安全同学定位问题、降低风险。 常见场景与风险点 文件上传漏洞通常不是单点失误,而是多个环节叠加导致的。比较常见的问题包括: 只校验前端限制,后端没有做类型判断。 仅根据文件后缀判断类型,未校验真实内容。 允许用户控制文件名或保存路径,导致路径穿越或覆盖文件。 上传目录位于 Web 可访问路径下,且服务端会解析其中的脚本文件。 未限制文件大小、数量和压缩包解压行为,导致资源消耗风险。 图片、SVG、HTML 等类型处理不当,引发存储型 XSS。 实际审计时,不建议只盯着“能不能上传脚本文件”这一种结果。很多上传点即便不能执行服务端脚本,也可能通过 HTML、SVG、PDF、Office 宏、压缩包、文件名污
T0xfce
背景 文件上传一直是 Java Web 项目里比较容易被低估的风险点。很多业务只是做了前端后缀限制,或者在服务端简单判断文件名是否以 .jpg、.png 结尾,但实际落地到生产环境时,还会受到解析容器、静态资源目录、对象存储回源、Nginx 配置、权限控制等因素影响。 这篇文章整理一次比较典型的 Java Web 文件上传代码审计过程,重点放在如何识别风险、如何构造安全的验证链路,以及上线修复时容易遗漏的细节。内容偏防御和审计,不涉及利用链扩展。 问题场景 某个后台系统提供了素材上传功能,支持上传头像、活动图片和附件。审计时看到上传接口大致流程如下: @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) throws IOException { String fileName = file.getOriginalFilename(); if (!fileName.endsWith(".jpg") && !fileName.endsWit
T0xfce
背景 前段时间协助一个内部业务系统做安全排查,系统本身不大:前端是常见管理后台,后端是 Java Spring Boot,数据库为 MySQL,部署在内网 Kubernetes 环境中。问题来源是业务侧发现某个查询接口在异常参数下响应明显变慢,同时日志里出现了几条比较奇怪的 SQL 报错。 这类场景在内网系统里很常见:业务认为“只在内网访问”风险不高,开发为了赶进度也容易把参数校验、权限边界、日志脱敏放得比较松。实际排查下来,问题不止一个 SQL 注入点,还牵出了一些接口权限和审计日志上的薄弱点。这里把排查过程整理成一篇长期可复用的代码审计思路,不涉及攻击利用,只讨论如何发现、验证和修复。 问题场景 业务接口大致是一个列表查询功能,支持按用户、部门、状态、时间范围等条件过滤。接口路径类似: GET /api/order/list?deptId=12&status=paid&sort=create_time&order=desc日志里出现的异常主要集中在排序参数和部分条件参数上。安全排查时比较关注三类问题: 动态 SQL 拼接是否可控,特别是排序字段、排序方向、模
T0xfce
背景SSRF(Server-Side Request Forgery)是代码审计和漏洞复现里很常见的一类问题。它的风险不只在于“服务器帮用户发起请求”,更在于请求发起点往往位于内网、云环境或高权限网络区域,可能触达普通用户无法直接访问的资源。实际项目里,SSRF 经常出现在这些功能中:远程图片抓取、URL 预览、Webhook 回调、文件导入、PDF/截图生成、第三方资源转存、头像上传、站点连通性检测等。很多团队在修复时只做了简单黑名单,例如禁止 127.0.0.1,但真实场景里远远不够。本文只讨论在授权测试、代码审计和本地靶场中的复现与防护思路,不提供针对真实目标的攻击操作。典型场景假设一个业务提供“通过 URL 抓取图片并保存”的接口,后端接收用户传入的 URL,然后服务端下载资源。简化后的逻辑如下:POST /api/image/fetch Content-Type: application/json { \"url\": \" /> }常见的后端实现可能是这样的:// 伪代码 String url = request.getParameter(\"url\")
T0xfce
SSRF(Server-Side Request Forgery,服务端请求伪造)并不是“让服务器代替用户发一个 HTTP 请求”这么简单。真正需要关注的是:用户可控数据是否进入了服务端请求链路,服务端请求具有什么网络权限,响应内容是否会回显,以及应用是否错误地把网络位置当成了可信身份。 在实际审计中,SSRF 往往隐藏在图片抓取、Webhook 调试、在线导入、PDF 生成、链接预览、RSS 订阅和云资源配置等功能中。单独看某个请求参数,风险可能并不明显;但一旦结合内网可达性、云平台元数据接口、管理面板或未授权服务,就可能形成严重的数据泄露和横向影响。 一、先明确需要审计的问题 审计 SSRF 时,不要只搜索 request、get 或 curl 等关键词。更有效的方式是沿着“输入—解析—请求—响应—输出”五个环节建立数据流: 输入:URL 是否来自请求参数、JSON 字段、文件内容、数据库记录或消息队列? 解析:应用是否对协议、主机名、端口和重定向进行过校验? 请求:使用了什么 HTTP 客户端,是否自动跟随重定向,是否支持 file、gopher 等非 HTTP 协议? 响应:响
T0xfce
背景 文件上传是 Web 系统里很常见的功能,头像、附件、导入模板、富文本图片都会用到。也正因为入口常见、业务差异大,上传点长期是代码审计和漏洞复现里的高频区域。 这篇文章整理一次比较典型的文件上传审计思路,重点放在漏洞成因、验证方法和修复方案上。文中不会涉及对真实站点的攻击操作,适合作为开发自查、渗透测试授权场景下的检查清单。 问题场景 某系统提供附件上传接口,后端使用 Java 实现,上传后的文件会存储到 Web 可访问目录,并把访问路径写入数据库。简化后的逻辑如下: String fileName = multipartFile.getOriginalFilename(); String suffix = fileName.substring(fileName.lastIndexOf(".")); List<String> allowExt = Arrays.asList(".jpg", ".png", ".pdf", ".docx"); if (!allowExt.contains(suffix.toLowerCase())) { throw new Ru
T0xfce
背景 任意文件读取在 Java Web 项目里并不算新问题,但在实际代码审计中仍然高频出现。尤其是一些后台系统、报表平台、文件预览服务,会把本地文件路径、附件路径、模板路径直接暴露给接口处理。如果路径校验不充分,就可能被读取到配置文件、日志、源码片段或运行环境中的敏感文件。 这类问题的危险点不一定在于单个接口本身,而在于它常常成为后续风险的入口:例如读取数据库配置、密钥文件、日志中的 token、历史备份文件等。本文整理一套偏实战的审计方法,重点放在如何发现、验证和修复,不涉及未授权攻击或对真实目标的利用。 典型场景 常见问题多出现在以下几类功能中: 文件下载接口:根据 file、path、name、url 等参数读取本地文件。 附件预览接口:PDF、图片、Office 文件在线预览时从磁盘读取文件。 日志查看接口:后台提供按文件名查看日志内容的功能。 模板加载接口:根据参数选择报表模板、邮件模板、导出模板。 临时文件接口:导入导出任务生成临时文件,再由接口返回给用户。 问题代码通常有一个共同特征:用户可控输入最终进入了 File、FileInputStream、Files.readA
T0xfce
背景 文件上传是 Web 系统里很常见的功能,头像、附件、工单截图、导入文件都会用到。也正因为入口普遍,上传点经常成为代码审计和渗透测试中的重点关注对象。实际项目里,上传漏洞并不总是表现为“直接上传可执行脚本”这么简单,更多时候是校验链路不完整、存储目录设计不合理、文件解析行为理解偏差导致的组合风险。 这篇文章整理一次常见文件上传功能的审计思路,重点放在漏洞成因、复现验证、风险判断和修复方案上。内容仅面向授权测试和防护建设,不涉及未授权攻击利用。 典型场景 某业务系统提供附件上传功能,后端使用 Java Spring Boot,前端限制只能上传图片和 PDF。后端代码大致逻辑如下: @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) throws IOException { String originalName = file.getOriginalFilename(); String suffix = originalName.substring(
T0xfce
背景 最近在一次企业内网安全巡检中,遇到一个比较典型的 Web 异常访问事件:边界设备没有发现明显入侵告警,但业务侧反馈某个管理后台偶发 500,且访问日志中出现了大量非常规参数。整体事件没有造成业务中断,但排查过程比较完整,适合整理成一篇复盘,重点放在日志分析、漏洞定位和代码审计闭环上。 本文不会讨论攻击利用细节,也不会提供可直接用于入侵的操作步骤,主要记录防守视角下如何从日志入手,确认风险点并推动修复。 问题场景 受影响系统是一个 Java Web 管理后台,部署在内网网段,通过统一网关反向代理暴露给办公网访问。系统本身历史较久,部分模块仍使用传统 MVC 写法,参数校验依赖业务代码手工判断。 最早的异常来自 Nginx access.log,表现为: 同一来源 IP 在短时间内访问多个历史接口。 请求参数长度明显偏长,包含较多特殊字符。 部分接口返回 500,部分返回 200,但响应体大小异常。 User-Agent 比较杂乱,疑似脚本化探测。 这类现象不一定意味着已经被攻陷,但通常说明系统正在被扫描或被验证历史漏洞,需要尽快确认是否存在可利用缺陷。 日志初筛思路 第一步不是直接
T0xfce