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. 如果要修订