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

发布日期:2019年08月01日
案例研究

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

发布日期:2019年08月01日
查看资源
查看资源

XML外部实体注入攻击,有时简单地缩写为XXE注入,与一些经典的漏洞相比,它相对较新,这些漏洞在出现多年后仍在不断地出现。但它现在在黑客社区中非常流行,而且随着它的成功案例越来越多,也越来越流行。

事实上,OWASP现在将XXE注入列为网站需要注意和积极防御的十大漏洞之一。但不要担心,XXE注入并不比网络攻击中部署的其他漏洞更强大。它只是有点新,有点不被理解。它是可以被预防的,事实上,可以完全停止。

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

  • 攻击者如何使用XXE注入
  • 为什么XXE注射是危险的
  • 可以防止这一漏洞的技术。

攻击者如何触发XXE注入?

当一个恶意用户被赋予提交XML代码的能力时,XXE注入漏洞就会发生。他们利用这种能力来创建一个对外部实体的引用。外部引用和代码被设计成可以避开具有默认设置的XML解析器,或具有弱配置设置的解析器。

攻击者利用了这样一个事实:XML标准将实体的概念定义为某种类型的存储单元,但这种存储可以是外部的,也可以是内部的。使用得当,它可以让XML处理器访问远程资源。更多的时候,攻击者利用这种能力来代替做一些事情,如探测网站的内部结构,通过触发试图访问远程资源的大型系统进程来发动拒绝服务攻击,甚至将数据从本地主机转储到他们控制的远程主机 " 使其成为渗出重要数据的好技术,如XML数据库中包含的密码或个人信息。

攻击中涉及的实际代码往往相当简单,只是利用了实体功能。例如,这可能允许黑客访问主密码文件。

<!ENTITY hackwithxxe SYSTEM file:///etc/password>

为什么XXE注射剂是危险的?

有几个原因导致XXE注入攻击如此危险,而且还很普遍。首先,它是一个目前不太被理解的漏洞。而攻击者通过利用它所获得的收益是相当大的。首先,它可以让持久性攻击者慢慢地映射出内部网络的所有路径,甚至扫描端口。虽然这可能需要相当长的时间,但黑客的活动几乎没有机会被目标网络上的主动防御系统发现,因为他们只是将XML代码发送到一个被可信的XML解析器清除的服务器中。

一旦映射出来,攻击者可以使用相同的XXE注入技术来捕获他们需要的任何文件,要么直接窃取信息,要么通过损害有效的用户凭证并利用它们进行二次攻击。最后,那些只想制造噪音和恶意的攻击者可以做一些事情,比如触发拒绝服务攻击,命令应用程序尝试访问远处的资源,旨在使系统陷入困境。  

消除XXE注入漏洞

由于XXE注入攻击的迅速增加,许多XML解析器开始完全默认禁用外部实体,有时称为DTD。对于那些人来说,关键是不要启用该功能。

但即使是允许DTD的解析器也可以禁用该功能。一般来说,需要像下面这样的语句来完全阻止它,但请检查你的本地框架文档以获得所需的确切代码。

factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

遵循安全原则,所有的用户输入都应该使用应用程序范围内的过滤器进行净化和验证。不要忘记包括GET和POST参数、HTTP头和cookies。你也可以创建一个白名单,列出你希望解析器处理的特定DTD和命令,而不允许其他一切。

虽然白名单和过滤是有效的,但由于XXE注入攻击的数量不断增加,如果不需要该功能,仍然建议完全禁用DTD支持。

关于XXE注射的更多信息

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

查看资源
查看资源

作者

想要更多吗?

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

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

查看博客
想要更多吗?

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

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

资源中心

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

发布日期:2019年08月01日
通过

XML外部实体注入攻击,有时简单地缩写为XXE注入,与一些经典的漏洞相比,它相对较新,这些漏洞在出现多年后仍在不断地出现。但它现在在黑客社区中非常流行,而且随着它的成功案例越来越多,也越来越流行。

事实上,OWASP现在将XXE注入列为网站需要注意和积极防御的十大漏洞之一。但不要担心,XXE注入并不比网络攻击中部署的其他漏洞更强大。它只是有点新,有点不被理解。它是可以被预防的,事实上,可以完全停止。

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

  • 攻击者如何使用XXE注入
  • 为什么XXE注射是危险的
  • 可以防止这一漏洞的技术。

攻击者如何触发XXE注入?

当一个恶意用户被赋予提交XML代码的能力时,XXE注入漏洞就会发生。他们利用这种能力来创建一个对外部实体的引用。外部引用和代码被设计成可以避开具有默认设置的XML解析器,或具有弱配置设置的解析器。

攻击者利用了这样一个事实:XML标准将实体的概念定义为某种类型的存储单元,但这种存储可以是外部的,也可以是内部的。使用得当,它可以让XML处理器访问远程资源。更多的时候,攻击者利用这种能力来代替做一些事情,如探测网站的内部结构,通过触发试图访问远程资源的大型系统进程来发动拒绝服务攻击,甚至将数据从本地主机转储到他们控制的远程主机 " 使其成为渗出重要数据的好技术,如XML数据库中包含的密码或个人信息。

攻击中涉及的实际代码往往相当简单,只是利用了实体功能。例如,这可能允许黑客访问主密码文件。

<!ENTITY hackwithxxe SYSTEM file:///etc/password>

为什么XXE注射剂是危险的?

有几个原因导致XXE注入攻击如此危险,而且还很普遍。首先,它是一个目前不太被理解的漏洞。而攻击者通过利用它所获得的收益是相当大的。首先,它可以让持久性攻击者慢慢地映射出内部网络的所有路径,甚至扫描端口。虽然这可能需要相当长的时间,但黑客的活动几乎没有机会被目标网络上的主动防御系统发现,因为他们只是将XML代码发送到一个被可信的XML解析器清除的服务器中。

一旦映射出来,攻击者可以使用相同的XXE注入技术来捕获他们需要的任何文件,要么直接窃取信息,要么通过损害有效的用户凭证并利用它们进行二次攻击。最后,那些只想制造噪音和恶意的攻击者可以做一些事情,比如触发拒绝服务攻击,命令应用程序尝试访问远处的资源,旨在使系统陷入困境。  

消除XXE注入漏洞

由于XXE注入攻击的迅速增加,许多XML解析器开始完全默认禁用外部实体,有时称为DTD。对于那些人来说,关键是不要启用该功能。

但即使是允许DTD的解析器也可以禁用该功能。一般来说,需要像下面这样的语句来完全阻止它,但请检查你的本地框架文档以获得所需的确切代码。

factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

遵循安全原则,所有的用户输入都应该使用应用程序范围内的过滤器进行净化和验证。不要忘记包括GET和POST参数、HTTP头和cookies。你也可以创建一个白名单,列出你希望解析器处理的特定DTD和命令,而不允许其他一切。

虽然白名单和过滤是有效的,但由于XXE注入攻击的数量不断增加,如果不需要该功能,仍然建议完全禁用DTD支持。

关于XXE注射的更多信息

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

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

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