XXE 外部实体注入

XXE 外部实体注入

1. XML简介

原理

XML是一个可扩展标记语言,用做存储标记数据,定义数据类型。

主要目的是要在不同的机器之间进行通信的数据规范

XML的根元素和子元素允许用户自定义。一个标签用于描述一段数据。

###为什么需要XML

  1. 两个程序间进行数据通信
  2. 给一台服务器,做一个配置文件,当服务器程序启动时,去读取它应当监听的端口号,还有连接数据库的用户名和密码

XML的应用

  1. 解决了程序间数据传输的问题

  2. XML可以做配置文件

    XML文件做配置文件可以说非常普遍,比如我们的Tomcat服务器的server.xml,web.xml。再比如我们的structs中的structs-config.xml文件,和hibernate的hibernate.cfg.xml等等。

  3. XML可以充当小型的数据库

    XML文件可以做小型数据库,也是不错的选择,我们程序中可能用到一些经常要人工配置的数据,如果放在数据库中读取不合适(因为这会增加维护数据库的工作),则可以考虑直接用XML来做小型数据库。这种方式直接读取文件显然要比读数据库快。比如msn中保存用户聊天记录就是用XML文件。

DTD 文档类型定义

​ DTD是用来规范和约束XML的书写

​ 定义实体:就是为一段内容指定一个名称,使用时通过这个名称就可以引用其所代表的的内容。

​ 基本格式:

​ <!ELEMENT NAME CONTENT>

​ 实例:

<!ELEMENT 班级 (学生+)>
<!ELEMENT 学生 (名字,年龄,介绍)>
<!ELEMENT 名字 (#PCDATA)>
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 介绍 (#PCDATA)>

编写XML文件引入DTD文件

<?xml version="1.0" encoding="utf-8"?>
<!--引入dtd文件,约束这个xml-->
<!DOCTYPE 班级 SYSTEM "myClass.dtd">
<班级>
    <学生>
        <名字>周小星</名字>    
        <年龄>23</年龄>
        <介绍>学习刻苦</介绍>
    </学生>   
    <学生>
        <名字>林晓</名字> 
        <年龄>25</年龄>
        <介绍>是一个好学生</介绍>
    </学生>   
</班级>

2. XXE原理

​ 程序在解析XML时,解析了XML中的外部实体引用。

​ 攻击者可以利用外部实体读取任意文件,进行内网探测,执行远程代码和拒绝服务攻击

XXE危害

  1. 敏感信息泄露
  2. 可以探测主机的存活,端口的开放

XXE注入点

  1. URL输入框
  2. 登录框

实例

http://10.10.10.30/xml/example1.php?xml=这个位置填写的是XML标签

构造攻击POC,读取/etc/passwd文件

http://10.10.10.30/xml/example1.php?xml= ]>123&xxebbsjl;

上述payload证明了,XML引用了DTD

上一篇:XXE总结


下一篇:XXE