当前位置:   article > 正文

XML 外部实体注入_xml外部实体注入攻击

xml外部实体注入攻击

一、什么是漏洞注入

SQL注入是一种web安全漏洞,使攻击者干扰应用程序对其数据库的查询。它通常使攻击者可以查看他们无法检索的数据。这可能包括属于其他用户的数据,或应用程序本身能够访问的任何其他数据。在许多情况下,攻击者可以修改或删除这些数据,从而导致应用程序的数据发生不正常更改。在某些情况下,攻击者可以逐步扩大SQL注入攻击,以危害底层服务器或其他后端基础设施。

1.1 什么是XML

XML(Extensible Markup Language)是一种类似于 HTML,但是没有使用预定义标记的语言。因此,可以根据自己的设计需求定义专属的标记。这是一种强大将数据存储在一个可以存储、搜索和共享的格式中的方法。最重要的是,因为 XML 的基本格式是标准化的,如果你在本地或互联网上跨系统或平台共享或传输 XML,由于标准化的 XML 语法,接收者仍然可以解析数据。

1.2 SQL注入攻击会产生什么影响?

SQL注入攻击可能会导致未经授权访问敏感数据,例如密码、信用卡详细信息或个人用户信息。近年来,许多引人注目的数据泄露都是SQL注入攻击的结果,导致公司声誉受损和监管罚款。在某些情况下,攻击者可以获得进入组织系统的持久后门,从而导致长期的危害,并且可能会在很长一段时间内被忽视。

SQL注入漏洞对于数据安全的影响:

数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。

网页篡改:通过操作数据库对特定网页进行篡改。

网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。

数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。

服务器被远程控制,被安装后门:经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。

破坏硬盘数据,瘫痪全系统。

1.3缓解SQL注入威胁的三种方法

零信任:
首先要确保客户端输入验证的严重不是唯一的防线,如果单纯的采取这样的办法,攻击者就可以通过修改JS代码,或者是利用导致SQL注入的参数对客户端-服务器架构中的后端进行HTTP调用,就能删除客户端的验证,所以增加验证方法非常重要。同时数据库方面也要创建多个数据库用户,并且设置好权限,能有效防止攻击者攻击数据库。
参数是最好的防护手段:
提升软件安全性的一个重要方法就是改变预设预计及查询参数,预设语句能够有效限制可输入的SQL注入预计,在使用存储过程中,参数也是非常重要,在存储过程中参数可能被恶意注入,这时候变化的参数就能有效防止注入。
多层检查和严格检查:
除了参数变化以及输入验证之外,开发人员还应该考虑使用对象关系映射 ( ORM ) 层来防止SQL注入。将数据从数据库转换为对象,反之亦然,从而减少了显式SQL查询和SQL注入攻击的风险。但是需要注意的是,如果使用错误、过时的Sequelize或Hibernate版本,ORM库中仍然会产生漏洞,因此开发人员必须保持警惕。
无论是什么安全策略,都会有被攻破的威胁,所以开发人员要经常检查网站存在的漏洞,并且及时修复漏洞,能够有效防御注入攻击。

二、利用 XML 外部实体注入

在现实生活中大量存在有关系的数据,XML语言出现的根本目标在于描述在现实生活中经常出现的有关系的数据。

在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。(在XML中,用ELEMENT表示元素,用ENTITY表示实体)

2.1 环境准备

1.开启OWASP靶机和Kali虚拟机

我的OWASP靶机IP为 192.168.139.153
kali linux为 192.168.139.166

2.2 利用XML外部实体注入案例

1.浏览器打开:


http://192.168.___.___(靶机IP)/mutillidae/index.php?page=xml-validator.php
  • 1
  • 2

请添加图片描述

2.这是一个 XML 验证器。
提交样例进行测试:在 XML 框中,输入 <somexml><message>HelloWorld</message></somexml>
,然后点击 Validate XML。(测试显示效果)
请添加图片描述
可以看到Text Content Parsed From XML显示的正是我们在 XML 框中输入的HelloWorld

3.测试它是否正确地处理了实体标记。输入以下内容:

<!DOCTYPE person [

 <!ELEMENT person ANY>

 <!ENTITY person "Mr Bob">

 ]>

 <somexml><message>Hello World &person;</message></somexml>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

如下图
请添加图片描述
提示:在这里,只定义了一个名字为person的内部实体将 Mr Bob 设为其值。解析器在显示结果时解释了实体并替换该值(测试使用实体的显示效果),所以显示:Hello World Mr Bob

4.这就是内部实体的使用
再尝试一个外部实体的使用,在这个结果,可以看到注入后返回文件的内容:

<!DOCTYPE fileEntity [

 <!ELEMENT fileEntity ANY>

 <!ENTITY fileEntity SYSTEM "file:///etc/passwd">![请添加图片描述](https://img-blog.csdnimg.cn/214907184cb64d2bbbaffdabdda2b4c4.jpeg)


 ]>

 <somexml><message>Hello World &fileEntity;</message></somexml>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

请添加图片描述
(利用XML的外部注入漏洞,获取本地,也就是靶机上的passwd文件内容)

使用这种技术,可以读取系统中任何对运行 web 服务器用户可读的文件。

总结

XML外部实体注入攻击原理:
XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击,由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的。
我们可以利用外部实体的引用功能实现对任意文件的读取
这个是解析的xml文件,定义了一个通用实体,并且在文件中去引用这个实体。
password.txt文件中记录了敏感的一些信息。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/590084
推荐阅读
相关标签
  

闽ICP备14008679号