本文作者: 可乐(Ms08067实验室Web小组成员)
写这篇的主要目的是因为很多CTFer还有一些安全人员不是很清楚xxe漏洞,还有在面试当中,xxe漏洞也经常被问到,所以就写这么一篇文章来学习xxe漏洞.
本篇会结合一些靶场还有CTF来进行讲解
首先来介绍一下XML和DTD
XML被设计用来传输和存储数据,这里提一下xml与html的区别:HTML 旨在显示信息,而 XML 旨在传输信息
而DTD定义 XML 文档的合法构建模块,它使用一系列的合法元素来定义文档结构,DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
一个 XML 文档实例:
之一行是 XML 声明。它定义 XML 的版本 (1.0) 和所使用的编码 (ISO-8859-1=Latin-1/西欧字符集)。
接下来加上DTD进行声明
内部的 DOCTYPE 声明
DTD元素
在一个 DTD 中,元素通过元素声明来进行声明。
声明一个元素
在 DTD 中,XML 元素通过元素声明来进行声明。元素声明使用下面的语法:
只有 PCDATA 的元素
只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:
例子:
带有任何内容的元素
通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合:
例子:
带有子元素(序列)的元素
带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:
或者
例子:
声明只出现一次的元素
例子:
上面的例子声明了:message子元素必须出现一次,并且必须只在 "note"元素中出现一次。
外部文档声明
这个 XML 文档和上面的 XML 文档相同,但是拥有一个外部的 DTD
重点介绍实体声明
内部实体声明
DTD 例子:
将writer 声明为”Bill Gates”,copyright 声明为 “Copyright W3School.com.cn”
XML 例子:
注释: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。
外部实体声明
外部实体引用支持通过协议,来动态的获取值
例子:
DTD 例子:
XML 例子:
可以通过协议来读取文件内容
不同语言支持的协议不同
参数实体:
or
参数实体只能在DTD中申明,DTD中引用,它们使用百分号(%)而不是与字符(&),可以是命名实体或外部实体。,能够解析实体或者uri,进行xml解析,进而获得其中的变量
注:一般用于Bline XXE
公共实体声明
当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。
xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件
如果xml能够被解析,比如输入
如果页面输出了my name is nMask,说明xml文件可以被解析。
接下来测试是否支持DTD引用外部实体而导致xxe注入
可通过查看自己服务器上的日志来判断,看目标服务器是否向你的服务器发了一条请求index.html的请求。
接下里安装漏洞环境
本人在centos下,安装docker后
git clone https://github.com/vulhub/vulhub.git
进入/vulhub/vulhub/tree/master/php/php_xxe
输入即可
环境启动后,访问http://your-ip:8080/index.php即可看到phpinfo
www目录包含四个文件
SimpleXMLElement.php
dom.php
simplexml_load_string.php
首先测试是否能够解析xml
内部实体
外部实体
参数实体
当没有回显即没有这个语句的时候该怎么办呢
这个时候我们可以利用参数实体,通过发起http请求来攻击。
先进行参数实体声明看看~
在远程服务器新建xxe.dtd文件,内容为:
xml内容为
相当于:
如果目标服务器没有回显,就只能用 Blind XXE 了。原理就是带着获取的文件源码以 get
参数或其他形式去访问我们的服务器,然后在日志里就可以找到我们要获取的内容了。
先在我的服务器建一个xxe.xml文件,内容为:
接下来读取内容,我们提交
整个的调用过程如下:解析时%dtd引入xxe.xml,之后%all引入send的定义,最后引用了实体send,把%file文件内容通过一个http请求发了出去。注意需要把payload经过url编码。
然后在服务器的log中看到base64加密后的内容(/var/log/httpd/access.log)
环境搭建:
vulstudy是专门收集当下流行的漏洞学习平台,现在用它来一键搭建bWapp
下载vulstudy项目
git clone https://github.com/c0ny1/vulstudy.git
cd vulstudy/bWapp
docker-compose up -d #启动容器
注:之一次创建应事先访问/install.php来创建数据库
安装好之后,Choose your bug 选择 XML External Entity Attacks (XXE)
先抓包
xxe-1.php页面在向xxe-2.php页面传输数据过程中,其中的xml数据是可控的,也就是说可以构造恶意数据进行传输,添加一个外部实体在XML数据中进行实体调用,从而进行XXE攻击。
http://web.jarvisoj.com:9882/
获得目标机器/home/ctf/flag.txt中的flag值。
将Content-Type的值改为application/xml,然后提交xml发现能够被解析
于是修改payload为:
禁用外部实体
php
java
python
https://blog.csdn.net/com_ma/article/details/73277535
https://github.com/c0ny1/xxe-lab
https://www.freebuf.com/articles/web/126788.html
https://www.freebuf.com/column/188849.html
https://www.ibm.com/developerworks/cn/xml/x-entities/
MS08067实验室官网:www.ms08067.com
公众号:"?Ms08067安全实验室"
Ms08067安全实验室目前开放知识星球:?WEB安全攻防,内网安全攻防,Python安全攻防,KALI?Linux安全攻防,二进制逆向入门
最后期待各位小伙伴的加入!~~~~
本文目录一览: 1、安吉丽娜-朱莉 主演电影 2、安吉丽娜朱丽主演的一部电影 3、安吉丽娜-朱莉版早期拍的一部叫做骇客的电影谁知道 安吉丽娜-朱莉 主演电影 《通缉令/刺客联盟》《贝奥武甫》...
“找寻女结伴游-【王瑞】” ID:3523QQ号:193***170属相:马付款订金是务必滴!不然预约主题活动不可以刚开始哦!要是交货了订金就可以立即迅速的为您分配服务项目了!坚信您可以了解和适用!仅...
黑客能把24小时刷车店关了吗? 网络黑客24小时在线接单;尽量提供该号码较早的使用记录,工作人员将根据您所提交证据的充分性、独创性和正确性进行综合判断。提交的证据充分且与腾讯记录一致,可以通过申诉。不...
夫妻之间最重要的是信任。然而,现实中最缺乏的是夫妻之间的信任。过去,人们常常在手机上打开信件和查看短信。现在,随着科技的进步,他们已经检查了微信QQ的聊天记录。不久前发生的一件事可以说是非常可怕的,其...
编辑导语:用户体验是用户在利用产物时的主观感觉,一个产物最终是为了让用户有精采的体验;每个用户的需求都纷歧样,所以也并不是所有有代价的产物都能取得用户的好评;本文作者阐明白用户体验、用户代价和产物代价...
本文导读目录: 1、在什么情况下QQ和微信好友可以盗取我的付款码甚至银行账号? 2、微信支付被盗刷怎么办 3、微信支付密码泄露了会被别人盗刷? 4、微信支付密码如何被盗? 5、微信被盗...