返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >xml注入漏洞
  • 177
分享到

xml注入漏洞

xmlphp安全 2023-09-02 15:09:33 177人浏览 安东尼
摘要

一、先认识XML XML有两个先驱——SGML(标准通用标记语言)和html(超文本标记语言),这两个语言都是非常成功的标记语言。SGML多用于科技文献和政府办公文件中,SGML非常复杂,其复杂程度对于网络上的日常使用简直不可思议。HTML

一、先认识XML

XML有两个先驱——SGML(标准通用标记语言)和html(超文本标记语言),这两个语言都是非常成功的标记语言。SGML多用于科技文献和政府办公文件中,SGML非常复杂,其复杂程度对于网络上的日常使用简直不可思议。HTML免费、简单,已经获得了广泛的支持,方便大众的使用。而XML(可扩展标记语言)它既具有SGML的强大功能和可扩展性,同时又具有HTML的简单性。

XML注入攻击也称为XXE(XML External Entity attack)漏洞,XML文件的解析依赖于libxml库,libxml 2.9及以前的版本默认支持并开启了外部实体的引用,服务端解析用户提交的XML文件时未对XML文件引用的外部实体(含外部普通实体和外部参数实体)进行合适的处理,并且实体的URL支持file://和PHP://等协议,攻击者可以在XML文件中声明URI指向服务器本地的实体造成攻击。

XXE漏洞一旦被攻击者利用,可以读取服务器任意文件、执行任意代码、发起DDos攻击。

在XML中引入外部实体一定要注意其安全性,需要进行严格的检查,或者禁止引入。

(1)对用户的输入进行过滤,如<、>、"、"、&等。

(2)常见的XML解析方法有DOMDocument、SimpleXML、XMLReader,这三者都基于libxml库解析XML,所以均受影响。xml_parse()函数则基于expact解析器,默认不载入外部DTD,不受影响。可以在php解析XML文件之前使用libxml_disable_entity_loader(true)来禁止加载外部实体(对上述三种XML解析组件都有效),并使用libxml_use_internal_errors()禁止报错。

二、XML 与 HTML 的主要差异

XML 被设计为传输和存储数据,其焦点是数据的内容。

HTML 被设计用来显示数据,其焦点是数据的外观。

HTML 旨在显示信息 ,而 XML 旨在传输信息。

三 、DTD

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。 DTD如果存在那么一定会被包裹在 DOCTYPE 声明中 ,DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。不过,XML对于标记的语法规定比HTML要严格地多

  1. 区分大小写,在标记中必须注意区分大小写,在XML中,是两个截然不同的标记
  2. 要有正确的结束标记,结束标记除了要和开始编辑在拼写和大小上完全相同,还必须在前面加上一个斜杠“/”。若开始标记,结束标记则为
  3. XML严格要求标记配对,HTML中的

    的元素形式在XML中是不合法的。当一对标记之间没有任何文本内容时,可以不写结束标记,在开始标记的末尾加上斜杠”/”来确认,例如: 这样的标记被称为“空标记”。
  4. 标记要正确嵌套,在一个XML元素中允许包含其他XML元素,但这些元素之间必须满足嵌套性
  5. 有效使用属性,标记中可以包含任意多个属性。在标记中,属性以名称/取值对出现,属性名不能重复,名称与取值之间用等号“=”分隔,且取值用引号引起来。

举子:<衣服 品牌=“耐克” 类型=“T恤” >

四、 XML基础

XML声明:

内部DTD声明:

在DTD中定义属性:

外部实体声明:

xml包括xml声明、文档类型定义(可选)、文档元素,如下图所示:

五、XML文件引用DTD的方式

  1. 内部直接定义DTD

  1. 引用外部DTD

六、xml原理

七、xml分类

① 普通xml攻击

(1)xml原理

XML注入攻击和sql注入攻击的原理一样,利用了XML解析机制的漏洞,如果系统对用户输入"<",">"没有做转义的处理,攻击者可以修改XML的数据格式,或者添加新的XML节点,就会导致解析XML异常,对流程产生影响。

(2)攻击手段

  1. 如下XML是用于注册访问用户,其中用户名是由用户自己输入的。

  1. 攻击者在输入用户的时候,可以构造" user1 < /user> < user role=“admin”>user2"数据去拼接XML,之后整个XML字符串将会变成如下格式。这样就添加了一个管理员权限的用户。

(3)如何防御

  1. 使用白名单校验,可以使用正则的方式对用户的输入做严格的校验,比如用户输入的用户名只能含有中文,英文大小写字母,数字以及下划线等等。
  2. 使用安全的XML库,正确代码使用dom4j来构建XML,dom4j是一个定义良好,开源的XML工具库,Dom4j将会对文本数据进行XML编码,从而使得XML的原始结构和格式免受破坏。代码中最终生成的XML会进行编码,会被替换,从而防止了XML注入。
  3. 对用户输入的字段进行转码处理,代码中对传过来的参数进行了转码处理,之后去构造XML字符串,就不会导致XML字符串结构被篡改。

② XML外部实体注入攻击

(1)原理

XML外部实体注入(XML External Entity)简称XXE漏洞。

XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击,由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的。

概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。

(2)攻击手段

1、 利用外部实体的引用功能实现对任意文件的读取
这个是解析的xml文件,我们定义了一个通用实体,并且在文件中去引用这个实体。
passWord.txt文件中记录了敏感的一些信息。

具体解析代码


2. 使用参数实体和避免XML解析语法错误,构造恶意的实体解析
使用参数实体和避免XML解析语法错误,构造恶意的实体解析:
XML文件:构造参数实体 % start;% Goodies;% end;% dtd 定义一个恶意的combine.dtd

恶意DTD combine.dtd中定义实体&all;

甚至可以这样构造恶意的DTD combine.dtd,将结果发送到目标地址,最后会获得file:///etc/fstab文件。

(3)防御

  1. 禁止解析DTDs
  2. 禁止解析外部实体

③内部xml实体注入

(1)原理

内部 实体攻击比较常见的是XML Entity Expansion攻击,它主要试图通过消耗目标程序的服务器内存资源导致DoS攻击。外部实体攻击和内部实体扩展攻击有不同的防护措施(禁止DTDs解析可以防护外部实体和内部实体攻击)。

(2)攻击

拒绝服务攻击
下面恶意的XML内部实体解析,占用服务器内存资源,导致拒绝服务攻击。

(3)防御

内部实体扩展攻击最好的防护措施是禁止DTDs的解析。另外也可以对内部实体数量进行限制,以消减内部实体 展攻击发生的可能性。所以在不需要使用内部实体时,应该禁止DTDs解析,需要使用内部实体时,严格限制内部实体的数量及xml内容的大小。

八、xml格式举例

]>

&test;

]>

&xxe;

九、靶场

在pikachu靶场中,以xxe漏洞举例:

XXE -"xml external entity injection"
既"xml外部实体注入漏洞"。
概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"
也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。

现在很多语言里面对应的解析xml的函数默认是禁止解析外部实体内容的,从而也就直接避免了这个漏洞。
以PHP为例,在PHP里面解析xml用的是libxml,其在≥2.9.0的版本中,默认是禁止解析xml外部实体内容的。

在任意在文本框中输入一个数据:a

提示: XML声明、DTD文档类型定义、文档元素这些都搞懂了吗?

也可以使用抓包工具对其抓包,如下,发现提交的数据使用了xml格式,初步判断存在漏洞

在文本框中输入xml语句:

]>

&xxe;

构造payload,通过外部实体获取后台数据库的本地信息

]>

&xxe;

来源地址:https://blog.csdn.net/weixin_45095113/article/details/127571102

--结束END--

本文标题: xml注入漏洞

本文链接: https://lsjlt.com/news/391022.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • xml注入漏洞
    一、先认识XML XML有两个先驱——SGML(标准通用标记语言)和HTML(超文本标记语言),这两个语言都是非常成功的标记语言。SGML多用于科技文献和政府办公文件中,SGML非常复杂,其复杂程度对于网络上的日常使用简直不可思议。HTML...
    99+
    2023-09-02
    xml php 安全
  • 【Web漏洞探索】命令注入漏洞
    【Web漏洞探索】命令注入漏洞 文章目录 【Web漏洞探索】命令注入漏洞一、什么是命令注入漏洞二、命令注入漏洞成因三、漏洞攻击利用手法命令执行函数命令执行连接符 四、过滤绕过绕过空格过...
    99+
    2023-09-07
    前端 安全 服务器
  • PbootCMS search SQL注入漏洞
    漏洞描述 i ⭐PbootCMS 搜索模块存在SQL注入漏洞。通过漏洞可获取数据库敏感信息 漏洞影响 s ✅PbootCMS < 1.2.1 空间测绘 d ⭕FOFA:app="PBO...
    99+
    2023-09-07
    php 安全 开发语言
  • XXE&XML漏洞详解
    XXE&XML漏洞详解 1.XML基础1.1.XML基础介绍1.2.XML文档结构1.3.DTD介绍1.4.实体类介绍1.5.外部实体 2.XXE漏洞基本介绍2.1.XXE漏洞基本概念2....
    99+
    2023-09-10
    xml 网络 安全 php web安全
  • Jfinal CMS命令注入漏洞
    漏洞环境 jfinal_cms 5.0.1 中存在命令执行漏洞 JDK 版本要求: 基于 RMI...
    99+
    2023-09-05
    java 安全 php
  • sql注入漏洞怎么修
    可以通过以下方法修复 sql 注入漏洞:1. 参数化查询;2. 输入验证和清理;3. 使用安全 api;4. 限制数据库权限;5. 保持软件更新;6. 使用 web 应用程序防火墙 (w...
    99+
    2024-05-30
    数据访问
  • XXE(XML外部实体注入)漏洞分析——pikachu靶场复现
    XML基础 XML是一种非常流利的标记语言,在解析外部实体的过程中,XML解析器可以根据URL中指定的方案(协议)来查询各种网络协议和服务(DNS,FTP,HTTP,SMB等)。外部实体对于在文档中创...
    99+
    2023-09-01
    xml 安全 web安全 学习 php
  • 【PHP代码注入】PHP代码注入漏洞
    漏洞原理 RCE为两种漏洞的缩写,分别为Remote Command/Code Execute,远程命令/代码执行 PHP代码注入也叫PHP代码执行(Code Execute)(Web方面),是指应用程序过滤不严,用户可以通过HTTP请...
    99+
    2023-09-01
    PHP代码注入漏洞 PHP代码执行漏洞 PHP常见的代码执行函数和语句 PHP代码执行漏洞利用 PHP代码执行漏洞防御 Powered by 金山文档
  • 漏洞复现 泛微OA E-Cology V9 browser.jsp SQL注入漏洞
    漏洞复现 泛微OA E-Cology V9 browser.jsp SQL注入漏洞 漏洞描述 泛微新一代移动办公平台e-cology不仅组织提供了一体化的协同工作平台,将组织事务逐渐实现全程电子化,改变传统纸质文件、实体签章的方式。泛微OA...
    99+
    2023-08-21
    java sql 开发语言
  • PHPCMS各种注入漏洞补丁
    1、宽字节注入漏洞/phpcms/modules/pay/respond.php 位置约16行原来代码$payment = $this->get_by_code($_GET['code']);替换为$payment = $this->get...
    99+
    2016-04-12
    PHPCMS 注入 漏洞 补丁
  • 如何修复sql注入漏洞
    修复sql注入漏洞的方案:对所有查询语句,使用标准化的数据库查询语句API接口,设定语句的参数进行过滤一些非法的字符。对用户提交的参数进行安全过滤,像一些特殊的字符(,()*&……%#等等)进行字符转义操作网站的代码层编码统一使用utf8编...
    99+
    2024-04-02
  • sql注入漏洞在什么层
    sql注入可以分为平台层注入和代码层注入,平台层注入是由不安全的数据库配置或数据库平台的漏洞所导致出现,而代码层注入主要是由于程序员对用户输入数据未进行细致地过滤导致的。...
    99+
    2024-04-02
  • 如何修补sql注入漏洞
    修补sql注入漏洞的方法:对所有查询语句,使用标准化的数据库查询语句API接口,设定语句的参数进行过滤一些非法的字符。对用户提交的参数进行安全过滤,像一些特殊的字符(,()*&……%#等等)进行字符转义操作。网站的代码层编码统一使用...
    99+
    2024-04-02
  • 如何测试sql注入漏洞
    测试sql注入漏洞的方法:在登录页面的用户名输入框中,填上正常用户名admin,并且在用户名后增加一个单引号,单击"登录"或在URL地址栏直接输入登录后台,若出错证明没有对'进行过滤,存在SQL注入漏洞。...
    99+
    2024-04-02
  • sql注入漏洞怎样防止
    为了防止 sql 注入漏洞,组织应采取以下步骤:使用参数化查询替换敏感数据。验证数据输入的格式和字符。限制用户输入的字符列表。转义特殊字符以避免被解释为 sql 命令。使用预编译的存储过...
    99+
    2024-06-17
    敏感数据
  • PHP入门指南:代码注入漏洞
    近年来,网络安全问题越来越频繁地被人们所关注。其中,代码注入漏洞是常见的安全问题之一。PHP作为一种常用的后端编程语言,被广泛应用于网站开发中。然而,PHP由于其灵活性和易用性,在编写代码的过程中会存在安全漏洞,那么,如何避免代码注入漏洞呢...
    99+
    2023-05-20
    漏洞 PHP 代码注入
  • 网站漏洞修复方案防止SQL注入攻击漏洞
    SQL注入漏洞在网站漏洞里面属于高危漏洞,排列在前三,受影响范围较广,像asp、.net、PHP、java、等程序语言编写的代码,都存在着sql注入漏洞,那么如何检测网站存在sql注入漏洞? SQL注入漏洞测试方法 在程序代码里不管是g...
    99+
    2023-06-04
  • sql注入漏洞是什么意思
    今天就跟大家聊聊有关sql注入漏洞是什么意思,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。        &...
    99+
    2024-04-02
  • php如何预防sql注入漏洞
    php预防sql注入漏洞的方法:利用magic_quotes_gpc指令或它的搭挡addslashes()函数进行过滤,例如:<php//php防注入和XSS攻击通用过滤$_GET    &nb...
    99+
    2024-04-02
  • jsp如何修复sql注入漏洞
    jsp修复sql注入漏洞的方法:采用PreparedStatement预编译语句集,它内置了处理SQL注入的能力,使用它的setXXX方法传值即可。使用正则表达式过滤传入的参数,例如:要引入的包:import java.util.regex...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作