背景 接口越权是业务系统里非常常见、也最容易被低估的一类问题。它通常不依赖复杂漏洞链,也不需要特殊环境,根因往往是后端只做了登录校验,却没有把“当前用户是否有权访问当前资源”这件事落实到每一个关键接口。 这篇文章整理一次比较典型的接口越权复盘思路,重点放在代码审计和修复验证上。内容面向企业内部安全自查、研发排查和安全测试复盘,不涉及非法访问或攻击引导。 问题场景 假设一个业务系统中存在订单、工单、客户资料等资源。前端页面会根据登录用户展示自己的数据,但后端接口通过资源 ID 查询详情时,只检查了用户是否登录,没有校验资源归属关系。 常见接口形态如下: GET /api/order/detail?id=10086
GET /api/ticket/detail?ticketId=20240001
POST /api/customer/update问题代码通常并不显眼,甚至在业务逻辑上看起来“很正常”: @GetMapping("/detail")
public OrderDetailVO detail(@RequestParam Long id) {
return orderSer
背景Java Web 反序列化问题这几年一直没有消失,原因很现实:不少业务系统仍然依赖历史框架、缓存组件、消息中间件或远程调用协议,其中一部分组件会在不可信边界上处理序列化数据。单看漏洞公告往往只能知道“某组件存在反序列化风险”,但落到实际审计时,更关键的是确认数据入口、反序列化调用点、类加载环境以及可利用链是否真的成立。这篇文章整理一次相对通用的复现与审计流程,重点放在如何判断风险、如何搭建验证环境、如何做代码层面的定位和修复。文中示例均以本地靶场和无害验证为前提,不涉及对真实目标的攻击操作。问题场景假设某 Java Web 系统具备以下特征:使用 Spring MVC 或传统 Servlet 架构;项目中存在对象缓存、会话同步、RPC、消息消费等功能;依赖中包含 commons-collections、groovy、spring-core、fastjson、xstream、hessian 等序列化相关库;某些接口接收 Base64、二进制流、加密后字符串或自定义协议数据;历史代码中存在 ObjectInputStream、readObject、XMLDecoder、XStream、
背景水平越权是代码审计和渗透测试里最常见、也最容易被低估的问题之一。它通常不依赖复杂利用链,根因往往是接口只校验了登录态,却没有校验当前用户是否有权访问目标资源。这类问题在业务系统中很隐蔽:页面入口可能没有暴露敏感操作,但前端请求里存在资源 ID;后端接口看起来也有鉴权中间件,但实际只做了“是否登录”的判断。长期看,水平越权比单点漏洞更值得关注,因为它反映的是权限模型和数据归属校验的缺失。典型场景一个常见的业务接口如下:用户登录后可以查看自己的订单详情,前端请求类似:GET /api/order/detail?id=10240
Cookie: session=...如果后端只根据 id 查询订单并返回结果,而没有判断订单所属用户是否等于当前登录用户,就可能导致用户 A 访问用户 B 的订单详情。类似场景还包括:通过用户 ID 查看个人资料、收货地址、发票信息。通过项目 ID、团队 ID 访问项目配置、成员列表。通过文件 ID 下载附件、合同、报表。通过任务 ID 修改工单、审批状态、备注内容。问题根因从代码审计角度看,水平越权通常不是“没有鉴权”,而是“鉴权粒度不够”。比较常见的几类
背景文件上传是 Web 安全里非常常见的风险点,但实际排查时不能只盯着“能不能传 WebShell”。很多线上系统即使限制了脚本后缀,也可能因为类型识别、存储路径、访问权限、解析规则、异步处理链路等问题引入风险。本文整理一次偏通用的文件上传点排查思路,重点放在漏洞复现、影响确认和修复验证,避免把分析停留在简单的黑盒尝试上。场景假设是一个业务后台提供头像、附件或富文本图片上传功能,后端会返回文件访问 URL。目标不是提供攻击教程,而是说明安全测试和代码审计时应关注哪些细节,以及如何给研发团队输出可落地的修复建议。问题场景某上传接口大致流程如下:前端限制上传类型为 jpg、png、pdf。后端根据文件后缀做基础校验。文件保存到 Web 可访问目录。上传成功后返回完整访问 URL。Nginx 或应用容器负责静态资源访问。这种实现看起来很常见,但风险也比较集中。审计时需要确认几个核心问题:校验依据是否可靠:只看后缀、Content-Type,还是做了文件头和内容解析。文件是否落在可执行目录或可能被脚本引擎解析的目录。上传后的文件名、路径是否可控,是否存在覆盖、路径穿越等问题。是否有二次处理链路