学习
实践
活动
工具
TVP
写文章

分享xxe文件读取案例

欢迎关注:07v8论安全,技术干货等你来

这是07v8的第16篇技术文章,希望对你有用

分享xxe文件读取案例

作者:@Hanmeimei

* 本文参与双dan投稿活动

XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。

xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。

判断

1.检测xml是否会被解析

&test;

返回test,进行第二步

2.是否支持外部实体

%test;

]>

目标服务器是否向你所设置服务器发送请求,如果以上两点都存在的情况下,服务器没有回显可以进行blind xxe。

1. xxe(基于回显和报错)

攻击者只有在服务器有回显或者报错的基础上才能使用XXE漏洞来读取服务器端文件。

观察上面的请求与响应,我们可以看到,应用程序正在解析XML内容,接受特定的输入,然后将其呈现给用户。

为了测试验证XML解析器确实正在解析和执行我们自定义的XML内容,我们发送如下的请求:

我们在上面的请求中定义了一个名为entityes、值为’testing’的实体。 响应报文清晰地展示了解析器已经解析了我们发送的XML实体,然后并将实体内容呈现出来了。

由此,我们可以确认,这个应用程序存在XXE漏洞。

2.blind xxe

如果服务器没有回显,可以使用Blind XXE漏洞来构建一条带外通道提取数据。

为了避免不同xml解析器解析时产生的问题,采用嵌套的方式,且由于某些解析器无法在内层实体直接使用外部链接,所以首先由本地服务器首先读取构造好的xml文件,在远程服务端执行请求本服务器的请求,进而读取到本地服务端的的xml内容,造成远程文件读取。

Xml文件

本地服务端存放源码文件

%remote;

%all;

]>

&send;

在远程服务端发送请求

实体remote,all,send的引用顺序很重要,首先对remote引用目的是将外部文件evil.xml引入到解释上下文中,然后执行%all,这时会检测到send实体,在root节点中引用send,就可以成功实现数据转发。

当然,也直接在DTD中引用send实体,如果在evil.xml中,send是个参数实体的话,即以下方式:

%remote;

%all;

%send;

]>

案例(基于回显)

下书任意文件读取案例部分(基于回显):

1. 某次渗透测试中,提交登录请求发现是通过xml传值

2.于是在头部添加参数进行测试,发现没有成功。

防御

1.检查所使用的底层xml解析库,默认禁止外部实体的解析

2.使用第三方应用代码及时升级补丁

3.同时增强对系统的监控,防止此问题被人利用

对于PHP,由于simplexml_load_string函数的XML解析问题出在libxml库上,所以加载实体前可以调用这样一个函数

附录

测试存在回显xxe站地址:

http://testhtml5.vulnweb.com/

Blind xxe案例:

xml实体:

内容占位符,用于内容转义,代表一些重复的或无法通过键盘输入或与xml 规范保留字符相冲突的字符数据,有点似类于 c# 中的转义字符。

使用实体之前,必需先声时,声明语句位于xml文档的序言的内部子集中,实体声明必需使用大写方式,如: ,ENTITY必需是大写的。使用实本时,在实体名称前面加上 & ,并表在后面加上分号: ;。

07v8 Double-S说

本文作者在文中详细阐述了什么是xxe,同时给予案例供大家学习,希望大家会有所收获!

同时感谢作者Hanmeimei的分享,以及对07V8的支持,请继续关注!

更多干货,敬请关注

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180115G0NL7800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券