编码员征服安全。分享与学习系列 - XML注入

2019年6月20日发布
作者:Jaap Karan Singh
案例研究

编码员征服安全。分享与学习系列 - XML注入

2019年6月20日发布
作者:Jaap Karan Singh
查看资源
查看资源

XML注入攻击是黑客发明的讨厌的小漏洞,以帮助他们破坏托管XML数据库的系统。这包括人们在想到传统数据库时想到的那种东西--从药品到电影的详细信息存储。一些XML数据库也被用来检查授权用户,因此向它们注入新的XML代码可以创建新的用户,主机系统将从这一点上接受这些用户。

对于攻击者来说,要实现XML注入,需要有一个依赖XML数据库的应用程序,或者至少要访问这个数据库。每当这时,如果用户的输入没有经过适当的审查,新的XML代码就会被添加到数据存储中。根据攻击者的技能,添加新的XML代码可以造成相当大的破坏,甚至可以提供对整个数据库的访问。

当你继续阅读时,你可能会发现,XML注入与我们之前介绍的SQL注入攻击密切相关。这是因为即使它们针对的是不同类型的数据库,它们也是极其相似的。值得庆幸的是,修复方法也是类似的。学习如何击败一种类型的攻击将使你在防止另一种类型的攻击时处于领先地位。

在这一集里,我们将学习。

  • XML注入是如何工作的
  • 为什么它们如此危险
  • 你如何能将防御措施落实到位,以彻底阻止它们。

攻击者是如何触发XML注入的?

只要未经授权的用户能够编写XML代码并将其插入到现有的XML数据库中,XML注入就会成功。这只需要两点:一个依赖或连接到XML数据库的应用程序和一个不安全的数据通道,以便攻击者发起攻击。

如果用户输入的信息在被发送到服务器处理之前没有经过消毒或其他限制,XML注入几乎总是成功的。这可以让攻击者在正常查询字符串的末尾编写自己的代码,或者注入代码。如果成功的话,这将欺骗服务器执行XML代码,允许它添加或删除记录,甚至揭示整个数据库。

黑客通过在正常查询中添加XML代码来实现XML注入攻击。这可以是任何东西,从一个搜索字段到一个登录页面。它甚至可能包括像cookies或头文件这样的东西。

例如,在一个注册表格中,用户可能会在用户名或密码字段后添加以下代码。


<user></user>
<role>administrator</role>
<username>John_Smith</username><password>Jump783!Tango@12</password>

在这个例子中,一个名为John_Smith的新用户将被创建,具有管理员权限。至少这个新用户采用了良好的密码密度规则。太糟糕了,他们实际上是一个攻击者。

黑客不一定需要总是打出这样的全垒打才能在XML注入方面取得成功。通过操纵他们的查询和记录服务器返回的各种错误信息,他们可能能够摸清XML数据库的结构。而这些信息可以被用来加强其他类型的攻击。  

为什么XML注射剂如此危险?

XML注入攻击所涉及的危险程度取决于目标XML数据库中存储了什么信息,或者这些信息是如何被使用的。例如,在XML数据库被用来验证用户的情况下,XML注入可以让攻击者进入系统。它甚至可能让他们成为目标网络的管理员,这当然是一种极其危险的情况。

对于针对更传统的数据库的XML注入,危险在于信息被窃取,有不正确的数据被添加到存储中,或者可能有好的数据被覆盖。XML代码并不难学,而且一些命令可以非常强大,可以覆盖整个信息字段,甚至显示数据存储的内容。

一般来说,没有人建立数据库,除非存储的信息有价值。黑客们知道这一点,这就是为什么他们经常以数据库为目标。如果这些数据包括诸如员工或客户的个人信息,那么这些信息被泄露可能导致声誉损失、财务后果、巨额罚款甚至诉讼。  

阻止XML注入攻击

XML注入是相当常见的,因为它的难度很低,而且XML数据库也很普遍。但这些攻击已经存在了很长时间。因此,有几个铁定的修复方法可以防止它们的执行。

阻止攻击的最佳方法之一是设计一个只使用预编译的XML查询的应用程序。这就把查询的功能限制在一个授权的活动子集上。任何带有额外参数或不符合预编译查询功能的命令都不会被执行。如果你不想这么严格,你也可以使用参数化。这将用户的输入限制在特定类型的查询和数据上,例如只使用整数。任何超出这些参数的内容都被认为是无效的,并迫使查询失败。

将预编译或参数化的查询与定制的错误信息配对也是一个好主意。与其从失败的查询中发回默认的、描述性的错误信息,应用程序应该拦截这些响应,并用一个更通用的信息来取代它们。理想情况下,你想告诉用户为什么查询失败,但不给他们任何关于数据库本身的信息。如果你把这些自定义信息限制在几个选择上,黑客将无法从失败的查询中编制出任何有用的侦察信息。

XML注入在刚开发出来时是非常成功的。但考虑到那是多长时间以前的事了,今天我们可以很容易地构建起不再被攻破的防御系统。

关于XML注射液的更多信息

要进一步阅读,你可以看一下OWASP关于XML注入的文章。你还可以用Secure Code Warrior 平台的免费演示来测试你新发现的防御知识,该平台可以培训网络安全团队成为最终的网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊的信息,请访问Secure Code Warrior 博客。


查看资源
查看资源

作者

Jaap Karan Singh

想要更多吗?

在博客上深入了解我们最新的安全编码见解。

我们广泛的资源库旨在增强人类对安全编码技术提升的方法。

查看博客
想要更多吗?

获取关于开发者驱动的安全的最新研究

我们广泛的资源库充满了有用的资源,从白皮书到网络研讨会,让你开始使用开发者驱动的安全编码。现在就去探索它。

资源中心

编码员征服安全。分享与学习系列 - XML注入

发布于 2024 年 1 月 22 日
作者:Jaap Karan Singh

XML注入攻击是黑客发明的讨厌的小漏洞,以帮助他们破坏托管XML数据库的系统。这包括人们在想到传统数据库时想到的那种东西--从药品到电影的详细信息存储。一些XML数据库也被用来检查授权用户,因此向它们注入新的XML代码可以创建新的用户,主机系统将从这一点上接受这些用户。

对于攻击者来说,要实现XML注入,需要有一个依赖XML数据库的应用程序,或者至少要访问这个数据库。每当这时,如果用户的输入没有经过适当的审查,新的XML代码就会被添加到数据存储中。根据攻击者的技能,添加新的XML代码可以造成相当大的破坏,甚至可以提供对整个数据库的访问。

当你继续阅读时,你可能会发现,XML注入与我们之前介绍的SQL注入攻击密切相关。这是因为即使它们针对的是不同类型的数据库,它们也是极其相似的。值得庆幸的是,修复方法也是类似的。学习如何击败一种类型的攻击将使你在防止另一种类型的攻击时处于领先地位。

在这一集里,我们将学习。

  • XML注入是如何工作的
  • 为什么它们如此危险
  • 你如何能将防御措施落实到位,以彻底阻止它们。

攻击者是如何触发XML注入的?

只要未经授权的用户能够编写XML代码并将其插入到现有的XML数据库中,XML注入就会成功。这只需要两点:一个依赖或连接到XML数据库的应用程序和一个不安全的数据通道,以便攻击者发起攻击。

如果用户输入的信息在被发送到服务器处理之前没有经过消毒或其他限制,XML注入几乎总是成功的。这可以让攻击者在正常查询字符串的末尾编写自己的代码,或者注入代码。如果成功的话,这将欺骗服务器执行XML代码,允许它添加或删除记录,甚至揭示整个数据库。

黑客通过在正常查询中添加XML代码来实现XML注入攻击。这可以是任何东西,从一个搜索字段到一个登录页面。它甚至可能包括像cookies或头文件这样的东西。

例如,在一个注册表格中,用户可能会在用户名或密码字段后添加以下代码。


<user></user>
<role>administrator</role>
<username>John_Smith</username><password>Jump783!Tango@12</password>

在这个例子中,一个名为John_Smith的新用户将被创建,具有管理员权限。至少这个新用户采用了良好的密码密度规则。太糟糕了,他们实际上是一个攻击者。

黑客不一定需要总是打出这样的全垒打才能在XML注入方面取得成功。通过操纵他们的查询和记录服务器返回的各种错误信息,他们可能能够摸清XML数据库的结构。而这些信息可以被用来加强其他类型的攻击。  

为什么XML注射剂如此危险?

XML注入攻击所涉及的危险程度取决于目标XML数据库中存储了什么信息,或者这些信息是如何被使用的。例如,在XML数据库被用来验证用户的情况下,XML注入可以让攻击者进入系统。它甚至可能让他们成为目标网络的管理员,这当然是一种极其危险的情况。

对于针对更传统的数据库的XML注入,危险在于信息被窃取,有不正确的数据被添加到存储中,或者可能有好的数据被覆盖。XML代码并不难学,而且一些命令可以非常强大,可以覆盖整个信息字段,甚至显示数据存储的内容。

一般来说,没有人建立数据库,除非存储的信息有价值。黑客们知道这一点,这就是为什么他们经常以数据库为目标。如果这些数据包括诸如员工或客户的个人信息,那么这些信息被泄露可能导致声誉损失、财务后果、巨额罚款甚至诉讼。  

阻止XML注入攻击

XML注入是相当常见的,因为它的难度很低,而且XML数据库也很普遍。但这些攻击已经存在了很长时间。因此,有几个铁定的修复方法可以防止它们的执行。

阻止攻击的最佳方法之一是设计一个只使用预编译的XML查询的应用程序。这就把查询的功能限制在一个授权的活动子集上。任何带有额外参数或不符合预编译查询功能的命令都不会被执行。如果你不想这么严格,你也可以使用参数化。这将用户的输入限制在特定类型的查询和数据上,例如只使用整数。任何超出这些参数的内容都被认为是无效的,并迫使查询失败。

将预编译或参数化的查询与定制的错误信息配对也是一个好主意。与其从失败的查询中发回默认的、描述性的错误信息,应用程序应该拦截这些响应,并用一个更通用的信息来取代它们。理想情况下,你想告诉用户为什么查询失败,但不给他们任何关于数据库本身的信息。如果你把这些自定义信息限制在几个选择上,黑客将无法从失败的查询中编制出任何有用的侦察信息。

XML注入在刚开发出来时是非常成功的。但考虑到那是多长时间以前的事了,今天我们可以很容易地构建起不再被攻破的防御系统。

关于XML注射液的更多信息

要进一步阅读,你可以看一下OWASP关于XML注入的文章。你还可以用Secure Code Warrior 平台的免费演示来测试你新发现的防御知识,该平台可以培训网络安全团队成为最终的网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊的信息,请访问Secure Code Warrior 博客。


我们希望得到您的许可,向您发送有关我们产品和/或相关安全编码主题的信息。我们将始终以最谨慎的态度对待您的个人资料,绝不会将其出售给其他公司用于营销目的。

要提交表格,请启用 "分析 "cookies。完成后,请随时再次禁用它们。