千家信息网

XML注入的示例分析

发表于:2024-11-21 作者:千家信息网编辑
千家信息网最后更新 2024年11月21日,小编给大家分享一下XML注入的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!0x01 介绍一些 Web 应用程序将
千家信息网最后更新 2024年11月21日XML注入的示例分析

小编给大家分享一下XML注入的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

0x01 介绍

一些 Web 应用程序将 XML 文件用于各种用途,从配置到完整数据库功能。用户输入通常会传

播到这些文件中,进而定制配置或更新应用程序数据库。如果在使用用户输入之前未清理或验证错误字符,那么这会成为安全隐患。当未采取任何预防措施时,恶意用户可以变更配置指令,添加新用户(如果用户列表通过 XML 文件进行维护),获取更高的特权等等。以下证明易受攻击的 J2EE 应用程序:

            Document doc = docBuilder.newDocument();              Element rootElement = doc.createElement("root");              doc.appendChild(rootElement);              Element firstElement = doc.createElement("first");              rootElement.appendChild(firstElement);              Element childElement = doc.createElement("child");              childElement.appendChild(doc.createTextNode(--User_Supplied_Text--)); // un-sanitized text              rootElement.appendChild(childElement);

以下内容演示类似的易受攻击的 .NET 应用程序:

            String nodeText = request.getParameter("node");              XmlWriterSettings settings = new XmlWriterSettings();              writer = XmlWriter.Create(m_Document, settings);              writer.WriteElementString("newNode", nodeText); // un-sanitized text               writer.WriteEndElement();

以此代码为例,用户输入传播到 XML 文件中而未适当清理。根据应用程序使用 XML 文件的方式,可以各种方法利用此漏洞。

0x02 威胁影响

由于未对用户输入正确执行危险字符清理,此攻击的最坏情形取决于在客户端所修改的页面上下文,可能会破坏应用程序逻辑

0x03 修复思路

若干问题的补救方法在于对用户输入进行清理。通过验证用户输入未包含危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务,例如:启动任意 SQL 查询、嵌入将在客户端执行的 Javascript 代码、运行各种操作系统命令,等等。

1 建议过滤字符

[1] |(竖线符号)

[2] & (& 符号)

[3];(分号)

[4] $(美元符号)

[5] %(百分比符号)

[6] @(at 符号)

[7] '(单引号)

[8] "(引号)

[9] \'(反斜杠转义单引号)

[10] \"(反斜杠转义引号)

[11] <>(尖括号)

[12] ()(括号)

[13] +(加号)

[14] CR(回车符,ASCII 0x0d)

[15] LF(换行,ASCII 0x0a)

[16] ,(逗号)

[17] \(反斜杠)

以下部分描述各种问题、问题的修订建议以及可能触发这些问题的危险字符:

2 SQL 注入和 SQL 盲注

A. 确保用户输入的值和类型(如 Integer、Date 等)有效,且符合应用程序预期。

B. 利用存储过程,将数据访问抽象化,让用户不直接访问表或视图。当使用存储过程时,请利用 ADO 命令对象来实施它们,以强化变量类型。

C. 清理输入以排除上下文更改符号,例如:

[1] '(单引号)

[2] "(引号)

[3] \'(反斜线转义单引号)

[4] \"(反斜杠转义引号)

[5] )(结束括号)

[6] ;(分号)

3 跨站点脚本编制

A. 清理用户输入,并过滤出 JavaScript 代码。我们建议您过滤下列字符:

[1] <>(尖括号)

[2] "(引号)

[3] '(单引号)

[4] %(百分比符号)

[5] ;(分号)

[6] ()(括号)

[7] &(& 符号)

[8] +(加号)

B. 如果要修订

0