XXE&XML
XML
XML被设计为传输和存储数据,XML文档结构包括XML声明,DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML份里,是独立于软件和硬件的信息传输工具。
XXE
XXE漏洞全称XML External Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载而已外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。
XML与HTML的主要差异
XML被设计为传输和存储数据,其焦点是数据内容
HTML被设计用来显示数据,其焦点是数据外观
XML旨在传输信息,而HTML旨在显示信息
玩法
读文件
1 |
|
这个<x></x>
之间执行xxe实体
内网探针或攻击内网应用(出发漏洞地址)
1 |
|
这里的ip地址192.168.0.103
是内网地址
访问没有报错说明index.php
文件存在,同时也说明8080端口开放
对端口探针的话需要用其他协议
RCE
该CASE是在expect扩展的PHP环境里执行系统命令
1 |
|
引入外部实体dtd
类似于远程文件包含 ,相当于是在自己的服务器上放上一个包含恶意xml语句的evil2.dtd文件,然后让服务器去访问,服务器便会执行dtd文件里的代码
条件:对方服务器未禁止外部实体引用
1 |
|
无回现-读文件
1 |
|
过程:由于没有回显,所以我们读取的文件内容无法显示出来。这里我们先用file(经过base64加密)把文件内容读出来,然后再去访问远程地址(自己的服务器)上的一个dtd文件,这个dtd里访问自己服务器上的文件并且使用了file作为参数,完成这一代码后,我们便可读取自己服务器的日志文件,查看解密参数,便得到文件内容(还可以在自己服务器上写一个参数来接收这个值,http://192.168.xxx.xxx:8081/xxe.php?data=%file;
这里data接收了文件内容)
协议-读文件(绕过)
参考:CTF XXE-绕过
1 |
|
靶场
xxe-lab-php靶场登录框xml数据传输
地址:https://github.com/c0ny1/xxe-lab
wp
首先是用burp抓取数据包,然后右键Send to Spider
,进行爬取
在History
中可以看到爬取结果
然后对爬取内容搜索xml
关键字
找到可以提交xml的页面
再将数据包发送到Repeater构造恶意xml代码进行攻击
CTF-Jarvis-OJ-Web-XXE安全-数据请求格式更改
地址:http://web.jarvisoj.com:9882/
wp
先用burp抓包
再更改数据请求格式Content-Type的值为application/xml
然后POST提交下面的代码
1 |
|
发现flag可疑目录,flag应该在/home/ctf/
下
于是修改payload,得到flag值
1 |
|
vulnhub-xxe lab:1
靶场下载地址:XXE Lab: 1
wp
先用nmap进行扫描
结果如下:
访问后没发现什么,然后用扫描器去扫,发现有robots.txt文件可以访问,并且得到两个有效信息,/xxe/
目录和/admin.php
文件
先访问/xxe/
,登录抓包,发现发送的是xml格式数据
将数据包发往Repeater
,构造攻击语句发包
1 |
显示xxe.php
base64加密后内容
发送到burp的Send to Decoder
去解密
解密得到,但并没有发现什么有用信息
想到之前还有一个admin.php
文件,于是用payload去读取admin.php
,进行相同操作,得到用户名和密码,密码是md5加密的
1 | 用户名:administhebest |
这里登录点要注意,是admin.php
文件,我们应访问/xxe/admin.php
,登进去后点击Flag
进去后跳转如下地址
说明有限制,我们接着用刚才的xxe漏洞去读这个文件flagmeout.php
注意该文件是在站点根部录下./flagmeout.php
解密后得到,这里是base32加密
网上查找base32解密后,得到一串base64加密,再解密后得到flag所在目录/etc/flag.php
再利用xxe漏洞去读,并解密
发现一串认不到的代码,从$
符判断应该是php代码,我们找个php在线运行,把代码扔进去跑就行了,得到flag值
工具
下载:https://github.com/enjoiz/XXEinjector
文章:https://www.cnblogs.com/bmjoker/p/9614990.html