| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(十五)-XXE(1) -> 正文阅读 |
|
[系统运维]山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(十五)-XXE(1) |
前言:本篇博客记录下XXE漏洞的相关知识,并思考如何搭建XXE漏洞靶场环境。 1、XXE漏洞简介1.1、简介1.1.1、XML想了解 XXE,首先要了解一下 XML: XML 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML 文档结构包括 XML 声明、DTD 文档类型定义(可选)、文档元素。 所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:
下面是每个构建模块的简要描述。
空的 HTML 元素的例子是 “hr”、“br” 以及 “img”。 2、属性
3、实体 4、PCDATA 5、CDATA DTD(文档类型定义): DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。 DTD 可以在 XML 文档内声明,也可以外部引用。 1,内部声明: ex:
2,外部声明(引用外部DTD): ex:
而note.dtd的内容为:
DTD实体: DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。 实体又分为一般实体和参数实体 1,内部实体声明:<!ENTITY 实体名称 "实体的值"> ex:
&writer;?right; 2,外部实体声明:<!ENTITY 实体名称 SYSTEM "URI">
在了解了基础知识后,下面开始了解xml外部实体注入引发的问题。 1.1.2、什么是XXE漏洞?了解完了 XML 后,便可以进一步了解一下什么是 XXE 漏洞。 XXE 全称是—— XML External Entity。 简单来说,XXE 就是 XML 外部实体注入。当应用程序允许引用外部实体时,通过构造恶意内容,就可以导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。 1.2、危害主要可能造成的危害:
1.3、利用通常攻击者会将 payload 注入 XML 文件中,一旦文件被执行,将会读取服务器上的本地文件,并对内网发起访问扫描内部网络端口。换而言之,XXE 是一种从本地到达各种服务的方法。此外,在一定程度上这也可能帮助攻击者绕过防火墙规则过滤或身份验证检查。 Blind OOB XXE 在某些情况下,即便服务器可能存在XXE,也不会向攻击者的浏览器或代理返回任何响应。遇到这种情况,我们可以使用 Blind XXE 漏洞来构建一条外带数据 (OOB) 通道来读取数据。虽然我们无法直接查看文件内容,但我们仍然可以使用易受攻击的服务器作为代理,在外部网络上执行扫描以及代码。 场景1 - 端口扫描 我们可以通过 URI 将请求指向了/etc/passwd 文件,并最终成功的为我们返回了文件中的内容。除此之外,我们也可以使用 http URI 并强制服务器向我们指定的端点和端口发送 GET 请求,将 XXE 转换为 SSRF(服务器端请求伪造)。 以下请求将被发送到应用程序以演示和测试该方法:
场景2 - 通过DTD窃取文件 外部文档类型定义(DTD)文件可被用于触发 OOB XXE。攻击者将 .dtd 文件托管在 VPS 上,使远程易受攻击的服务器获取该文件并执行其中的恶意命令。 上述代码一旦由易受攻击的服务器处理,就会向我们的远程服务器发送请求,查找包含我们的payload的DTD文件:
让我们花点时间了解上述请求的执行流程。结果是有两个请求被发送到了我们的服务器,第二个请求为/etc/passwd文件的内容。 在我们的VPS日志中我们可以看到,带有文件内容的第二个请求,以此我们也确认了OOB XXE漏洞的存在:
场景3 - 远程代码执行 这种情况很少发生,但有些情况下攻击者能够通过XXE执行代码,这主要是由于配置不当/开发内部应用导致的。如果我们足够幸运,并且PHP expect模块被加载到了易受攻击的系统或处理XML的内部应用程序上,那么我们就可以执行如下的命令:
响应:
场景4 - 钓鱼 我们使用Java的XML解析器找到了一个易受攻击的端点。扫描内部端口后,我们发现了一个侦听在25端口的SMTP服务,Java支持在sun.net.ftp.impl.FtpClient中的ftp URI。因此,我们可以指定用户名和密码,例如ftp://user:password@host:port/test.txt,FTP客户端将在连接中发送相应的USER命令。 但是如果我们将%0D%0A (CRLF)添加到URL的user部分的任意位置,我们就可以终止USER命令并向FTP会话中注入一个新的命令,即允许我们向25端口发送任意的SMTP命令:
当FTP客户端使用此URL连接时,以下命令将会被发送给VULNERABLESYSTEM.com上的邮件服务器:
这意味着攻击者可以从从受信任的来源发送钓鱼邮件(例如:帐户重置链接)并绕过垃圾邮件过滤器的检测。除了链接之外,甚至我们也可以发送附件。 1.4、防范方案一:使用开发语言提供的禁用外部实体的方法 PHP:
JAVA:
Python:
方案二:过滤用户提交的XML数据 关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。 下一篇文章记录XXE漏洞靶场环境的关键代码编写。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 15:58:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |