# 详细点: XML 被计划为传输和存储数据, XML 文档结构包罗 XML 声明、 DTD 文档类型定义(可 选)、文档元素,其焦点是数据的内容,其把数据从 HTML 分离,是独立于软件和硬件的 信息传输工具。等同于 JSON 传输。 XXE 毛病 XML External Entity Injection , 即 xml 外部实体注入毛病, XXE 毛病发生在应用程序解析 XML 输入时,没禁止外部实体 的加载,导致可加载恶不测部文件,造成文件读取、命令执行、内网扫描、攻击内网等危 害。 XML 与 HTML 的主要差异: XML 被计划为传输和存储数据,其焦点是数据的内容。 HTML 被计划用来显示数据,其焦点是数据的外观。 HTML 旨在显示信息 ,而 XML 旨在传输存储信息。 Example :网站的 xml 文件解析 -XXE 黑盒发现: 1 、获取得到 Content-Type 或数据类型为 xml 时,尝试 xml 语言 payload 举行测试 2 、不管获取的 Content-Type 类型或数据传输类型,均可尝试修改后提交测试 xxe 3 、 XXE 不但在数据传输上大概存在毛病,同样在文件上传引用插件解析或预览也会造成 文件中的 XXE Payload 被执行 -XXE 白盒发现: 1 、可通过应用功能追踪代码定位审计 2 、可通过脚本特定函数搜索定位审计 3 、可通过伪协议玩法绕过相关修复等
XXE 修复防御方案: - 方案 1- 禁用外部实体 PHP: libxml_disable_entity_loader(true); JAVA: DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferenc es(false); Python : from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False)) - 方案 2- 过滤用户提交的 XML 数据 过滤关键词: <!DOCTYPE 和 <!ENTITY ,大概 SYSTEM 和 PUBLIC