• DAY34:XXE 漏洞基础


    DAY34:XXE 漏洞

    1、XML 外部实体注入( Extensible markup language )

    2、XML 基本格式

    ​ XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素

    2.1、构建模块

    • 元素
    元素是 XML 以及 HTML 文档的主要构建模块,元素可包含文本、其他元素或者是空的
    
    • 1
    • 属性
    属性可提供有关元素的额外信息
    
    • 1
    • 实体
    实体是用来定义普通文本的变量。实体引用是对实体的引用
    
    • 1
    • PCDATA
    PCDATA 的意思是被解析的字符数据(parsed character data)。
    PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记
    
    • 1
    • 2
    • CDATA
    CDATA 的意思是字符数据(character data)。
    CDATA 是不会被解析器解析的文本
    
    • 1
    • 2
    	#XML文件声明 DTD为XML文档定义语义约束
    <bookstore>
    	<book category="test">   #属性
    		<title>XML Studytitle>
    		<day>2022-08-18day>
    	book>
    bookstore>	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
     
    DOCTYPE xxe [
    <!ELEMENT name ANY >
    ]>
    <root>
    <name>&xxe;name>
    root>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
     
    DOCTYPE foo [
    ]>    //内部实体为 file
    <user>
    <username>&file;username>					  //此处应为 &file;
    <password>111password>
    user>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    请添加图片描述

    外部声明(引用外部DTD):

     
    
    
    • 1
    • 2
    
    
    • 1

    3、基本语法

    (1)所有的 XML 元素都必须有关闭标签

    (2)XML 标签对大小写敏感

    (3)XML 属性值必须加引号

    (4)XML 必须正确嵌套

    (5)XML 标签自定义

    4、DTD

    DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。

    DTD 可以在 XML 文档内声明,也可以外部引用

    内部声明:

     
    
    • 1

    外部声明:

     
    
    • 1

    4.1、DTD 实体

    (1)一般实体

    (2)参数实体

    4.3、一般实体

    声明语法:

    
    
    • 1

    引用实体的方式:

    &实体名;
    
    • 1

    4.4、参数实体:

    只能在DTD中使用,参数实体的声明格式:

     
    
    • 1

    引用实体的方式:

    %实体名
    
    • 1

    内部实体声明:

    
    
    
    ]>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5、构建外部实体注入方式

    5.1、直接通过DTD外部实体声明

    
    DOCTYPE xxe [
    	]>
    <c>&file;c>
    
    • 1
    • 2
    • 3
    • 4

    5.2、通过DTD文档引入外部DTD文档,再引入外部实体声明

    XML:

    
    
    &file;
    
    • 1
    • 2
    • 3

    DTD:

    
    
    • 1

    5.3、通过DTD外部实体声明引入外部实体声明

    XML:

    
    
    	%a;
    ]>
    &file;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    DTD:

    
    
    • 1

    6、XXE 的危害

    (1)读取任意文件

    (2)执行系统命令

    (3)探测内网端口

    (4)攻击内网网站

    7、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))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    (2)过滤用户提交的 XML 数据

    • 1
    • 2
    • 3
  • 相关阅读:
    定额人工费调整差额的几个解决方案
    web3 前端dapp从redux过滤出 (我创建与别人创建)正在执行的订单 并展示在Table上
    06-jQuery中的防抖和节流
    LNMP编译安装
    智能照明控制系统助力“双碳”目标
    传统行业 CRUD 六年,疫情期间备战一个月,三面阿里巴巴定级 P7
    【每周一测】Java阶段三阶段考试
    双向链表的操作
    在 WSL2 上部署 PyTorch
    宝塔面板快速搭建贪吃蛇小游戏web网站 - 无需云服务器,网站发布上线
  • 原文地址:https://blog.csdn.net/qq_49433473/article/details/126409211