https://owasp.org/www-project-top-ten

XXE基础

xxe外部实体注入
外部实体
xml(用于传输和存储数据)
html(用于显示数据)
注入:
SQL注入:用户输入数据被当做代码执行
1输入点
2.输入数据可以结合到数据库当中

什么是XML?
XML是可扩展标记语言(EXtensible MarkupLanguage),XML是独立于软件和硬件的信息传
输工具。
XML的特点:
1.是一种可扩展标记语言
2.被设计来进行数据传输
3.标签没有被预定义,需要自行定义标签(如)<pwj>标签自定义,但需成对出现</pwj>
4.具有层级结构
5.具有自我描述性

XML作用:
1.简化数据共享
2.简化数据传输
3.简化平台变更
4.使数据更加有用
5.把数据从HTML分离

XML和HTML之间的差异:
XML:用来传输和存储数据,其焦点是数据的内容,旨在传输信息
HTML:用来显示数据,其焦点是数据的外观,旨在显示信息。

XML数据格式组成:
1.元素/节点
a.根元素:有且必须只有一个根元素
b.子元素:可以嵌套,可以重复
c.每个元素必须成对出现
2.属性
a.每个元素/节点可以有多个属性
b.属性以键值对的方式出现:名称=”值”。属性的值添加双引号,多个属性以空格分
开。
3.实体DTD

<bookstore>
<book category="cookING">    属性要以键值对的形式书写key="value",value值要带有""
然后就是元素要成对出现,包括<author>,<year>,<price>这些都是成对出现的<title lang="en">EverydayItalian</title><author>Giada De Laurentiis</author><year>2025</year><price>30.00</price>
</book>
<book category="CHILDREN"><title lang="en">Harry Potter</title><author>)K.Rowling</author><year>2025</year><price>29.99</price>
</book>
<book category="WEB"><title lang="en">Learning XML</title><author>Erik T.Ray</author><year>2023</year><price>39.95</price>
</book>

语法规范:
1.开闭合元素一致大小写敏感
2.属性值必须加引号,单双都可
3.标签必须正确嵌套
4.XML中空格会被保留,不像html中只保留一个
注意:
XML不会做任何事情,仅仅是纯文本,有能力处理纯文本的软件都可以处理XML。我们
需要编写软件或者程序,才能传送、接收和显示出这个文档。(造成该漏洞的原因只有攻击者恶意使用)

DTD实体

1.定义:
DTD全称是Thedocumenttypedefinition,即是文档类型定义,可定义合法的xML文档构
建模块。它使用一系列合法的元素来定义文档的结构。DTD可被成行地声明于XML文档
中,也可作为一个外部引用。
2.DTD分类
(1)内部DTD
1.内部的DOCTYPE声明
语法格式:<!DOCTYPE内部实体名称(根元素名称)[
        元素声明
]>

内部DTD<?xml version="1.0"?>                       //<?php     ?>与PHP语法声明方式一致
<!DOCTYPEnote[                             //!DOCTYPE note定义此文档是 note类型的文档<!ELEMENTnote(to,from,heading,body)>  //!ELEMENTnote定义note元素有四个元素:"to,from,heading,body"<IELEMENT to (#PCDATA)>             //IELEMENT to定义to元素为 “#PCDATA"类型<!ELEMENT from (#PCDATA)>          //!ELEMENTfrOm定义frOm元素为“#PCDATA"类型<IELEMENT heading (#PCDATA)>      //IELEMENT heading定义heading元素为“#PCDATA"类型<!ELEMENT body (#PCDATA)>        //!ELEMENT body定义body元索为"#PCDATA"类型
]>
<note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body>
</note>

(2)外部DTD
DTD位于XML源文件的外部
语法格式:<!DOCTYPE外部实体名称SYSTEM、PUBLIC(根元素名称)“URI/URL>

外部DTD<?xmlversion="1.e"?>
<IDOCTYPEnoteSYSTEM"note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reninder</heading>
<body>Don't forget the meetingl</body>
</note>//这是位于xML源文件的外部的DTD“note.dtd"文件,外部这里的语法格式和内部都是相同的
<!ELEMENTnote(to,from,heading,body)>
<!ELEMENT to(#PCDATA)>
<!ELEMENT from (#PCDATA)>
<IELEMENT heading(#PCDATA)>
<IELEMENT body (#PCDATA)>

外部与内部的区别在于引用时,内部是将所有文件都放在了xml里面,而外部是只进行了文件的引用在" "中写入了文件名称让计算机能找到这个文件后再进行引用。

DTD实体

1.实体定义:实体是用于定义引用普通文本或特殊字符的快捷方式的变量。实体可在内部或外部进行声明。
(1)内部实体:
语法:<!ENTITY entity-name"entity-value">

内部实体<!ENTITY writer "Donald Duck.">   
<!ENTITY copyright "Copyrightrunoob.com">  实体名称 copyright 和实体值Copyrightrunoob.com从哪里开始引用XML 实例:
<author>&writer;&copyright;</author>  通过$符号开始引用,引用名称

(2)外部实体
语法:<lENTITY entity-name SYSTEM “URI/URL'>

外部实体<!ENTITYwriter SYSTEM"http://www.xxx.com/xxx.dtd">
<!ENTITYcopyright SySTEM"http://ww.xxx.com/xxx.dtd">XML example:
<author>&uriter;$copyright;</author>   同样使用$符号进行引用

$引用实体名称并没有区分内外部,要区分会出现在内容不一样时

关键字:
system:表示实体来自本地计算机
public:表示实体来自公共计算机

支持协议类型:
外部引用不同版本支持协议不同,具体如下:

libxml2PHPJAVA.NET
file
http
ftp
file
http
ftp
php
compress.zlib
compress.bzip2
data
glob
phar
http
https
ftp
file
jar
netdoc
mailto
gopher  *
file
http
https
ftp

.net 就是aspx , 我们常说的webshell就是网站使用的语言根据不同的语言所支持的不同协议来编写的

(3)参数实体
语法:<!ENTITY %实体名称[SYSTEM]"URL'>
参数实体实例:

参数实体<!DOCTYPE author[<!ENTITY % writer "DonaldDuck.">
}>
<author>%writer;</author>

注意:实体引用由三部分构成:一个与号和百分号(&%),一个实体名称,以及一个分号(;)。

PCDATA:解析字符数据。XML的特殊字符(&、<和>)在PCDATA中可以识别,并用于解析元素名称和实体。PCDATA(字符数据)区域被解析器视为数据块,从而允许您在数据流中包含任意字符。

XML与DTD结合

外部实体注入漏洞定义:
XXE(xmlexternalentityinjection)即xml外部实体注入漏洞。XXE是针对应用程序解析XML输
入类型的攻击。也就是说服务端接收和解析了来自用户端的xm数据而又没有做严格的安
全控制。从而导致xm外部实体注入。
攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行导
致问题。

漏洞产生原因:
xxe漏洞核心就是允许了引入外部实体的加载,导致程序在解析xml时,可以加载恶意外
部文件,从而造成文件读取等危害。

漏洞危害:
1.任意文件读取。通过file协议等进行辅助读取源代码/配置文件
2.执行系统命令
3.服务器端请求伪造
        a.暴露内部服务。
        b.通过端口扫描枚举内部服务。
        c.通过元数据实例窃取云凭证。
4. DOS拒绝服务
5.解析器细节可能的影响
        a.目录列表(仅适用于JavaSAX解析器)
        b.远程代码执行(仅适用于PHP/expects或ASP)

漏洞防范:
1.过滤和验证用户提交的XML数据,过滤关键词<!DOCTYPE、<!ENTITYSYSTEM、PUBLIC等
2.禁用外部实体方法

PHP:
libxml_disable_entity_loader(true);JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);Python:
from lxml import etree
xmlData = etree.parse(xmlsource,etree.xMLParser(resolve_entities=False))

3.禁止XML中包含除自己外声明的DTD
4.有效的措施:配置XMLparser只能使用静态DTD,禁止外来引I入;对于Java来说,直接设置相应的属性值为false即可
5,一个最小的平台,没有任何不必要的功能、组件、文档和样本。删除或不安装未使用的功能和框架。
6.及时审查和更新相关补丁包(漏洞都有针对性,针对某一版本)
7.注意:XXE的造成与libxml库的版本有关,与PHP版本无关。libxml<=2.9.0中,默认启用了外部实体,libxml>2.9.0中默认禁用了外部实体。XXE并不是直接由libxml库造成,libxml库提供了一些XML核心功能,包括禁用外部实体的libxmldisable_entity_loader0函数,SimpleXML库提供了解析XML的函数,SimpleXML库依赖于libxml库。

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

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

相关文章

ros2获取topic信息解析

ros2 ros_discovery_info topic 发布逻辑疑问&#xff1a; 在运行ros2 topic info -v /topic时&#xff0c;运行的是p3&#xff0c;如何与p1进程通讯的呢&#xff1f; 进程间理论上应该是IPC

FFmpeg合成mp4

本章主要介绍如何使用FFmpeg来将一个音频文件和一个视频文件合成一个MP4文件&#xff0c;以及在这个过程中我们如何对编码过程进行封装以及sample_rate 重采样的过程&#xff08;由于提供的音频文件的编码类型为S16&#xff0c;所以我们需要转化为MP4支持的FLTP浮点类型&#x…

第十九章 使用LAMP架构部署动态网站环境

第十九章 使用LAMP架构部署动态网站环境 文章目录第十九章 使用LAMP架构部署动态网站环境一、安装Httpd服务1、安装httpd服务2、启动httpd服务3、设置允许通过防火墙4、验证http服务是否成功二、安装Mariadb服务1、安装Mariadb服务2、启动Mariadb服务三、安装PHP服务1、列出可用…

Selenium应用中的核心JavaScript操作技巧

Selenium是一款强大的浏览器自动化测试工具&#xff0c;其操作浏览器的能力部分来自于其内嵌的JavaScript执行引擎。这使得Selenium不仅能够模拟用户在浏览器中的各种操作&#xff0c;还能执行复杂的JavaScript脚本&#xff0c;以实现更为精细的控制。本文将探讨如何通过Seleni…

《Linux 基础指令实战:新手入门的命令行操作核心教程(第一篇)》

前引&#xff1a;当你第一次面对 Linux 系统中那片闪烁着光标、只有黑白字符的终端界面时&#xff0c;或许会和很多初学者一样感到些许茫然&#xff1a;这些由字母和符号组成的 “指令” 究竟该如何输入&#xff1f;它们又能完成哪些神奇的操作&#xff1f;其实&#xff0c;Lin…

03.【Linux系统编程】基础开发工具1(yum软件安装、vim编辑器、编辑器gcc/g++)

目录 1. 软件包管理器 1.1 什么是软件包 1.2 Linux软件生态 1.3 yum具体操作 1.3.1 查看软件包 1.3.2 安装软件 1.3.3 卸载软件 1.3.4 注意事项(测试网络) 1.3.5 yum指令集总结 1.4 yum源目录、安装源 2. Vim编辑器的使用 2.1 Linux编辑器-vim使用 2.2 vim的基本概…

3DMAX自动材质开关插件AutoMaterial安装和使用方法

3DMAX自动材质开关AutoMaterial&#xff0c;是一个3dMax脚本插件&#xff0c;它根据材质编辑器中当前活动的材质自动将材质应用于3dMax中新创建的对象&#xff0c;也适用于您复制的没有材质的对象。它作为一个开关&#xff0c;可以绑定到按钮或菜单来打开和关闭它。该工具的创建…

Linux内核调优实战指南

内核调优通常通过修改内核运行时参数来实现&#xff0c;这些参数的配置文件是 Linux 系统中核心的性能调整点。 内核调优配置文件名称 /etc/sysctl.conf: 这是最传统和主要的内核参数配置文件。系统启动时或手动执行 sysctl -p 命令时会读取并应用其中的设置。/etc/sysctl.d/*.…

Java基础常见知识点

Java 中 和 equals() 的区别详解_java中与equals的区别及理解-CSDN博客https://blog.csdn.net/m0_64432106/article/details/142026852深入理解Java中方法的参数传递机制 - 悟小天 - 博客园https://www.cnblogs.com/sum-41/p/10799555.html浮点型精度是什么意思&#xff1f;为…

OD C卷 -【高效货运】

文章目录高效货运高效货运 货车的额定载货量为wt&#xff1b;货物A单件重量为wa&#xff0c;单件运费利润为pa;货物B单件重量wb&#xff0c;单件运费利润为pb;每次出车必须包含A、B货物&#xff0c;且单件货物都不可分割&#xff0c;总重量达到额定的载货量wt;每次出车能够获取…

手动解压并读取geo 文件 series_matrix_table_begin series_matrix_table_end之间的数据

手动解压并读取geo 文件 series_matrix_table_begin series_matrix_table_end之间的数据 1. 手动解压并读取文件内容 file_path <- “K:/download/geo/raw_data/GEO/GSE32967_series_matrix.txt.gz” 使用latin1编码读取文件所有行 con <- gzfile(file_path, “r”) all_…

主板硬件研发基础--DP/DP++

现在的主板大多数使用的是比DP功能更加强大的DP++。 DisplayPort++(DP++)是 DisplayPort 技术的增强版,旨在提升与多种视频接口的兼容性和连接性能。以下是关于它的详细介绍: 功能特性 多协议兼容:DP++ 接口不仅支持 DisplayPort 标准的信号传输,还可以通过内部的转换电…

科技行业新闻发布平台哪家好?多场景推广专业方案服务商推荐

面对海量得新闻发布平台和碎片化的传播场景&#xff0c;如何精准选择推广方案无疑是企业主面临的一大难题&#xff0c;对于技术迭代迅速的科技行业更是如此。针对复杂的市场环境&#xff0c;一些专业的新闻发布平台往往能够针对性地给出营销方案&#xff0c;并提供一定技术支持…

SystemVerilog 学习之SystemVerilog简介

SystemVerilog简介SystemVerilog是一种硬件描述和验证语言&#xff08;HDVL&#xff09;&#xff0c;由Accellera开发并于2005年成为IEEE标准&#xff08;IEEE 1800&#xff09;。它在传统Verilog基础上扩展了高级验证和设计功能&#xff0c;广泛应用于数字电路设计、验证及系统…

JavaWeb--day3--AjaxElement路由打包部署

&#xff08;以下内容全部来自上述课程及课件&#xff09; Ajax &#xff08;此章节纯粹演示&#xff0c;因服务器端url链接失效&#xff0c;所以无法实战&#xff09; 1. 同步与异步 同步&#xff1a; 浏览器页面在发送请求给服务器&#xff0c;在服务器处理请求的过程…

IMF GDP的bug

IMF GDP 数据底子是官方数字&#xff0c;基本是沿用官方的&#xff0c;虽然经过修订或估算&#xff0c;存在4大“bug”&#xff1a;1. 依赖官方上报&#xff0c;真实性不保证2. PPP GDP 虚高&#xff0c;居民实际消费力低很多ppp gdp高&#xff0c;甚至gdp高的地方&#xff0c;…

第2篇:数据持久化实战

在上一篇中&#xff0c;我们构建了一个基于内存存储的食谱助手。说实话&#xff0c;内存存储虽然简单&#xff0c;但有个致命问题&#xff1a;程序一重启&#xff0c;数据就全没了。 所以这篇我们要解决数据持久化的问题&#xff0c;将食谱助手从内存存储升级到SQLite数据库。 …

Java推荐系统与机器学习实战案例

基于Java的推荐系统与机器学习实例 以下是一些基于Java的推荐系统与机器学习实例的参考方向及开源项目,涵盖协同过滤、矩阵分解、深度学习等常见方法。内容根据实际项目和技术文档整理,可直接用于学习或开发。 协同过滤实现 用户-物品评分预测 使用Apache Mahout的基于用户…

AI生成内容检测的综合方法论与技术路径

一、AI内容检测技术的分类与原理当前AI内容检测技术主要分为四大类&#xff0c;每类都有其独特的原理和应用场景&#xff1a;1. 基于语言特征分析的检测方法这类方法通过挖掘人类写作与AI生成文本之间的统计学差异进行判断&#xff1a;1.1 词汇使用模式分析AI生成的文本在词汇选…

可可图片编辑 HarmonyOS(5)滤镜效果

可可图片编辑 HarmonyOS&#xff08;5&#xff09;滤镜效果 前言 可可图片编辑也实现了滤镜效果&#xff0c;主要是利用 Image组件的 colorFilter 属性实现。滤镜的关键属性 colorFilter colorFilter 的主要作用是给图像设置颜色滤镜效果。 其核心原理是使用一个 4x5 的颜色矩阵…