XPATH 注入的介绍与代码防御
Posted 煜铭2011
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XPATH 注入的介绍与代码防御相关的知识,希望对你有一定的参考价值。
0x01 介绍
软件未正确对 XML 中使用的特殊元素进行无害化处理,导致攻击者能够在终端系统处理 XML 的语法、内容或命令之前对其进行修改。在 XML 中,特殊元素可能包括保留字或字符,例如“<”、“>”、“"”和“&”,它们可能用于添加新数据或修改 XML 语法。我们发现用户可控制的输入并未由应用程序正确进行无害化处理,就在 XPath 查询中使用。例如,假定 XML 文档包含“user”名称的元素,每个元素各包含 3 个子元素 -“name”、“password”和 “account”。这时下列 XPath 表达式会产生名称为“jsmith”、密码为“Demo1234”的用户的帐号(如果没有这样的用户,便是空字符串):
string(//user[name/text()='jsmith' and password/text()='Demo1234']/account/text())
以下是应用程序的示例(采用 Microsoft ASP.NET 和 C#):
XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load("...");
...
XPathNavigator nav = XmlDoc.CreateNavigator();
XPathExpression expr = nav.Compile("string(//user[name/text()='"+TextBox1.Text+"' and password/text()='"+TextBox2.Text+"']/account/text())");
String account=Convert.ToString(nav.Evaluate(expr));
if (account=="")
{
// name+password pair is not found in the XML document - login failed.
}
else
{
// account found -> Login succeeded. Proceed into the application
}
使用此类代码时,攻击者可以注入 XPath 表达式(非常类似 SQL 注入),例如,提供以下值作为用户名:
' or 1=1 or ''='
此数据会导致原始 XPath 的语义发生更改,使其始终返回 XML 文档中的第一个帐号。
这意味着虽然攻击者未提供任何有效用户名或密码,但仍将登录(作为 XML 文档中列出的第一个用户)。
以上是关于XPATH 注入的介绍与代码防御的主要内容,如果未能解决你的问题,请参考以下文章