文章目录
XXE漏洞简介
- 全称: XML External Entity Injection (XML外部实体注入漏洞)
- 触发点: 上传xml文件的位置未进行过滤,导致可以加载恶意外部文件和代码。
- 危害: 任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起DoS攻击等。
XML基础知识
XML介绍及用途
- 用途: 用于传输和存储数据。
- 结构: 树状结构,从根部开始扩展到枝叶。
- 特点: 允许用户定义自己的标签和文档结构。
XML文档的构建模块
- 元素: XML及HTML文档的主要构建模块。
- 属性: 提供有关元素的额外信息。
- 实体: 用于定义普通文本的变量。
- PCDATA: 被解析的字符数据。
- CDATA: 不会被解析器解析的字符数据。
XML语法规则
- 所有XML元素必须有一个闭合标签。
- XML标签对大小写敏感。
- XML必须正确嵌套。
- XML属性值必须加引号。
- 实体引用在XML中,空格会被保留。
XXE漏洞利用
存在XXE漏洞代码
<?php
$xml = file_get_contents('php://input');
$data = simplexml_load_string($xml);
echo "<pre>";
print_r($data); // 注释掉该语句即为无回显的情况
?>
DTD(文档类型定义)
- 作用: 定义XML文档的合法构建模块。
- 声明方式: 内部声明和外部引用。
DTD实体
- 定义: 用于定义引用普通文本或特殊字符的变量。
- 类型: 一般实体和参数实体。
漏洞利用示例
-
读取文档文件
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "file:///c:/post.txt"> ]> <name>&xxe;</name>
-
读取PHP文件
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=conf.php"> ]> <name>&xxe;</name>
XXE的攻击与危害
- 读取任意文件
- 执行系统命令
- 探测内网端口
- 攻击内网网站
防御XXE攻击
-
使用开发语言提供的禁用外部实体的方法
- PHP:
libxml_disable_entity_loader(true);
- JAVA:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setExpandEntityReferences(false);
- Python:
from lxml import etree xmlData = etree.parse(xmlSource, etree.XMLParser(resolve_entities=False))
- PHP:
-
过滤用户提交的XML数据关键词:
<!DOCTYPE
和<!ENTITY
,或SYSTEM
和PUBLIC
相关文章推荐
如果你觉得这篇文章对你有帮助,不妨看看以下几篇相关文章,内容同样精彩:
- 病毒肆虐,电脑遭殃,360和火绒哪家强?
探讨了流行杀毒软件360和火绒的各自优缺点,以及在面对不同病毒威胁时的表现。 - 编码器与译码器的工作原理及应用
详细解析了编码器与译码器的工作原理,特别是n位2^n线编码器的运算规律,对于学习计算机硬件的读者非常有帮助。 - python课程设计作业-TCP客户端-服务端通信
介绍了如何使用Python进行TCP客户端与服务端通信的课程设计作业,适合对网络编程感兴趣的读者。 - 海明检验码过程(超详细)
详尽讲解了海明检验码的原理和实现过程,适合需要了解错误检测与纠正编码的读者。
每篇文章都经过精心编写,涵盖了丰富的知识点和实用技巧,希望能为你的学习和实践提供更多帮助!