实战挖掘文件导入处的XXE漏洞

  • A+
所属分类:安全文章

实战挖掘文件导入处的XXE漏洞


一、XXE简述


XXE(XML External Entity Injection)全称是XML外部实体注入,当服务端允许引用外部实体时,通过构造恶意payload就可能造成任意文件读取、内网端口探测甚至命令执行等危害。

知识储备,自己之前也是学的迷迷糊糊的,这次重新理一下思路。

DTD(文档定义类型),DTD可在XML内部进行声明,也可以外部引用。


内部声明格式如下:<?xml version="1.0"?><!DOCTYPE note [                                          #定义文档类型 <!ELEMENT note (to,from,heading,body)>  #定义note四个元素“to,from,heading,body” <!ELEMENT to      (#PCDATA)>               #定义元素类型为PCDATA(会被解析的文本) <!ELEMENT from    (#PCDATA)>              #CDATA类型(不会被解析) <!ELEMENT heading (#PCDATA)> <!ELEMENT body    (#PCDATA)>

]>

xml要按下面的格式进行编写

<note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body></note>

 

外部声明格式:

<?xml version="1.0"?><!DOCTYPE note SYSTEM"note.dtd">            #调用note.dtd <note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget themeeting!</body></note>note.dtd内容<!ELEMENT note(to,from,heading,body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>


 

DTD实体,实体是用于定义引用普通文本或特殊字符的快捷方式的变量。

 

内部引用:

XML:<author>&writer;&copyright;</author>               #内部引用DTD实体writer和copyrightDTD:<!ENTITY writer "BillGates">                                  #实体名称“writer” 值“Bill Gates”<!ENTITY copyright "Copyright W3School.com.cn">

 

外部引用:

XML:<author>&writer;&copyright;</author>               DTD:                                                                      #实体内容为外部实体<!ENTITY writer SYSTEM"http://www.w3school.com.cn/dtd/entities.dtd"><!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">


 

 

二、测试过程


Office从2007版本引入了新的开放的XML文件格式,更改为.zip文件进行解压后即可发现相关sheet信息和[Content_Types].xml文件。

      

1、在某次测试中发现了模板下载和导入两个功能点


实战挖掘文件导入处的XXE漏洞



2、点击模板下载,成功下载到本地模板.xls文件,对文件进行另存为.xlsx格式,并对文件修改后缀名为.zip,解压如下:



实战挖掘文件导入处的XXE漏洞



3、向[Content_Types].xml文件中插入dnslog payload进行测试。


实战挖掘文件导入处的XXE漏洞


4、文件保存,重新压缩并重命名为.xlsx文件,上传文件,查看dnslog记录

导入完毕


实战挖掘文件导入处的XXE漏洞


Dnslog出现记录,服务端对XML进行了解析


实战挖掘文件导入处的XXE漏洞


5、由于是java的站,这里使用ftp对数据进行外带(php的站可以使用base64编码进行数据外带)

使用xxeserv工具进行测试,这个工具集成了ftp和http

链接:https://github.com/staaldraad/xxeserv

xxeserv为go编写,go build编译一下

 

外部实体sp2.dtd:


实战挖掘文件导入处的XXE漏洞


 

启动http和ftp,http默认端口2122,ftp默认端口2121


实战挖掘文件导入处的XXE漏洞

 

更改payload,引入外部实体(此处payload要与外部dtd相对应)


实战挖掘文件导入处的XXE漏洞


6、再次导入文件

此时ftp接收到相关信息


实战挖掘文件导入处的XXE漏洞

 

三、总结

       文中简述了XXE漏洞基本原理和DTD类型格式,在某些文件导入的功能处也可能存在相关漏洞。

 

参考链接:https://www.w3school.com.cn/dtd/dtd_intro.asp


本文始发于微信公众号(Khan安全攻防实验室):实战挖掘文件导入处的XXE漏洞

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: