目录
XML以及XXE漏洞介绍
XML是指可扩展标记语言,用来传输和存储数据。XML文档结构包括XML声明,DTD文档类型定义(可选),文档元素。XML的焦点是数据的内容,它把数据从HTML分离,是独立于软件和硬件的信息传输工具。HTML旨在显示信息,XML旨在传输和存储信息。
XXE漏洞全称XML External Entity Injection,即XML外部实体注入漏洞。XXE漏洞发生在应用程序解析XML时,没有禁止外部实体的加载,导致客家在恶意外部文件,造成文件读取,命令执行,内网端口扫描,攻击内网网站,发起dos攻击等危害。
XXE漏洞的触发点往往是可以上传XML文件的位置没有对上传的xml文件进行过滤,导致可上传恶意xml文件。
DTD内容参考:DTD 简介 (w3school.com.cn)
实战
注)会涉及到一些php代码。靶场的配置什么的见视频吧。。。实战里面只简述XXE的实现方法
利用XXE漏洞读取文件(有回显)
几种文件路径格式:
- file://path/to/file.ext(读取本地文件)
- http://url/file.ext(读取远程文件)
- php://filter/read=convert.base64-encode/resource=conf.php(php文件需要使用base64编码来读取)
①读取.ext文件
Payload:
如下图所示,直接在请求体写入Payload。返回体里显示已经读取到相应内容。
②读取php文件
Payload:
如下图所示,直接在请求体写入Payload。返回体里显示已经读取到相应内容。
然后再将返回的内容通过base64解密即可得到php文件的内容。
利用XXE漏洞读取文件(无回显)
本节测试原理:(服务器:192.168.1.105,攻击者server:192.168.1.103)
- 攻击者发送一个XML请求到服务器端(参考文件【请求XML】)
- 服务器端接收到攻击者的请求,去攻击者自定义的server端获取dtd校验文件(参考文件【test.dtd】)
- 攻击者server返回dtd文件到服务器端
- 服务器执行对应的XML,在服务器本地获取相应数据,然后将数据信息返回给攻击者server
请求XML:
攻击者构建的dtd文件(test.dtd):
文件内容解析:
- 获取服务器本地的/etc/passwd文件,并将其保存到变量p1中
- 通过http请求使用con参数把p1的内容传递到对应的服务器上
注)前提是服务器存在XXE漏洞这些语句才能执行成功
XXE防御策略
XXE漏洞消亡原因
libxml2.9.0以后,默认不解析外部实体,导致XXE漏洞逐渐消亡。
XXE漏洞防御
①使用开发语言提供的禁用外部实体的方法:
②过滤用户提交的XML数据
关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。