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 注入的介绍与代码防御的主要内容,如果未能解决你的问题,请参考以下文章

基于约束的SQL攻击

基于约束的SQL攻击

全局SQL注入防御代码

sql注入攻击与防御第二版读书笔记二——SQL注入测试

SQL注入攻击与防范

2017-04-20Sql字符串注入式攻击与防御