专栏首页信安之路XPath注入:攻击与防御技术

XPath注入:攻击与防御技术

相信大家都非常熟悉 “注入” 这种攻击方式。 “注入” 这种攻击方式被列为了 OWASP 十大攻击的榜首。然而,本文所要讲述的不是被人熟知的SQL 注入攻击。而是相对较为冷门的 XPath 和 XQuery 注入攻击。

什么是 XPath ?

首先我们来了解一下什么是 XPath。

XPath 即为 XML 路径语言,是 W3C XSLT 标准的主要元素,它是一种用来确定 XML(标准通用标记语言的子集)文档中某部分位置的语言。

XPath 基于 XML 的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力,可用来在 XML 文档中对元素和属性进行遍历。

XQuery 是 XPath 语言的超集,增加了一些类似于 SQL 的语法和非常实用的函数来让我们更方便的查询 XML 文档。

关于 XPath 和 XQuery 的基本语法可以在 W3schools--XPath 里学习,链接如下:

http://www.w3school.com.cn/xpath/index.asp

XPath 注入的原理及危害

说到这里大家可能会想到 SQL 注入了。

没错,XPath 注入的基本原理和 SQL 注入类似,发生在网站使用用户输入的信息构造 XPath 查询获取 XML 数据的时候。

通过发送精心构造的 Payload 至 web 服务器,攻击者可以获取 XML 数据的组织结构,或者访问在正常情况下不允许访问的数据,如果 XML 数据被用于用户认证,那么攻击者就可以提升他的权限。

由于 XPath 不同于其他的数据库查询语言,在其他的数据库中,一个用户可能只有权限能够访问某个数据库或者数据库中的某个表。

但是在 XML 中没有访问控制或者用户认证,如果用户有权限使用 XPath 查询,并且之间没有防御系统或者查询语句没有被防御系统过滤,那么用户就能够访问整个 XML 文档。

下面我将从这两个方面来分别演示这两种危害。

1.绕过验证

首先这里有一个登录身份验证的程序,所有的身份数据都存储在一个名为 UsersDataBase.xml 的文件里。 通过 XPath 查询 xml 文件,将用户提交的用户名和密码与 xml 文件中的用户名密码做比对来验证身份。

UsersDataBase.xml 的结构如下:

一般情况下,输入错误的用户名或密码会导致身份认证失败:

然而在后台的身份认证程序中有这样一句 XPath 查询语句

$xpath = "//users/user[username/text()='".$_POST["username"]."' and password/text()='".$_POST["password"]."']";

可以看到在 XPath 查询语句中并未对用户的输入做任何处理,这就直接导致一个注入点

我们可以构造如下的 payload:

Username: ' or '1' = '1 Password: ' or '1' = '1

那么整个 XPath 查询语句就变成了这个样子

$xpath = "//users/user[username/text()='' or '1' = '1' and password/text()='' or '1' = '1']";

整个查询语句恒成立,就直接导致了身份认证被绕过。

2.信息泄露

大多数情况下,当服务器返回数据时,都会对这些数据做一些处理。比如如果服务器返回一些错误信息,那么最终会被过滤掉,不会出现在用户的页面里。将尽可能少的信息暴露给用户,将可以提高安全性。但是即使错误信息被过滤掉,我们依然可以从服务器给出的不同返回结果推测出服务器做出了何种响应。作为攻击者可以提交一段包含 XPath 函数的 Payload,通过服务器给出的不同响应,判断得到我们想知道的信息。这就是 XPath 盲注。

下面这是一个通过用户名的ID来得到用户名的程序。当然具体场景也可能是通过名字来查询身份证号码等等,这里只做演示。

正常情况下,输入用户的 ID,就会得到相应的用户名。当查询语句恒成立时(如构造 Payload 为 ' or '1' = '1 时),就会返回第一个节点的用户名 “Alice”(这是程序本身的 bug )。而当查询语句错误或该 ID 在 xml 数据库中不存在时,就什么都不返回。

利用这点,我们就可以构造如下 Payload,比如:来查询整个 xml 文档的根节点的第一个字母是否为 “u”

' or substring(name(parent::*[position()=1]),1,1)='u

返回结果为 “Alice”,就说明整个 xml 文档的根节点的第一个字母是 “u”,反之如果什么都没有返回,则说明根节点的第一个字母不是 “u”。以此类推,我们就可以历遍整个 xml 文档了。这也是 xml 和其他数据库相比最大的威胁所在了,因为它没有访问控制和身份验证。

XPath 防御技术

一开始就说到了,XPath 注入和 SQL 注入的原理是非常类似的,所以 XPath 的防御技术也完全可以借鉴防御 SQL 注入的方法。

具体方法有如下两种:

1、入口把关:

在数据处理之前,对用户提交的数据进行验证。

一是要验证是否包含特殊字符,像单双引号这类,可以对这类特殊字符进行编码转换或替换;

二是验证是否包含特定的 XPath 函数,可以过滤掉一些 XPath 函数,以提高安全性,当然了不能以牺牲用户体验或影响用户正常使用为前提。

2、控制出口:

在返回数据出口处屏蔽系统本身的错误提示信息。尽可能全的用自定义的错误信息替换系统本身的具体的错误信息。让攻击者对返回结果无规律可循,能有效防止被盲注。

文章分享自微信公众号:
信安之路

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • SQL注入攻击与防御

    在动态网站中,往往需要用户传递参数到服务器,这些参数往往需要和数据库进行交互;当服务端没有对参数进行安全过滤时,攻击者在参数中加入恶意的SQL语句结构,便编造成...

    婷婷的橙子
  • 干货 | MSSQL 注入攻击与防御

    本文所用数据库涉及SQL Server 2k5,2k8,2k12,其次对于绕过姿势和前文并无太大差别,就不做过多的讲解,主要放在后面的提权上

    HACK学习
  • SQL注入攻击与防御举例

    以下是一段普普通通的登录演示代码,该脚本需要username和password两个参数,该脚本中sql语句没有任何过滤,注入起来非常容易,后续部分将逐步加强代码...

    KevinBruce
  • SQL注入攻击与防御-第二章

    SQL注入可以出现在任何系统或用户接受数据输入的前端应用中,这些应用之后被用于访问数据库服务器。 HTTP定义了很多种客户端可以发送给服务器的操作,但是这里只关...

    Baige
  • SQL注入攻击与防御-第一章

    SQL注入是影响企业运营且破坏性最强的漏洞之一,它曾经几次在TOP10登顶,它会泄漏保存在应用程序数据库中的敏感信息,例如:用户名,口令,姓名,地址,电话号码以...

    Baige
  • 软件安全性测试(连载26)

    科学是一种强有力的工具。怎样用它,究竟是给人带来幸福还是带来灾难,全取决于人自己,而不取决于工具。刀子在人类生活上是有用的,但它也能用来杀人。

    小老鼠
  • OWASP Top 10关键点记录

    注入攻击漏洞,例如SQL,OS以及LDAP注入。这些攻击发生在当不可信的数据作为命令或者查询语句的一部分,被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释...

    信安之路
  • Web安全学习笔记

    https://github.com/LyleMi/Learn-Web-Hacking

    HACK学习
  • Web Security 之 DOM-based vulnerabilities

    在本节中,我们将描述什么是 DOM ,解释对 DOM 数据的不安全处理是如何引入漏洞的,并建议如何在您的网站上防止基于 DOM 的漏洞。

    凌虚
  • 11张网络安全思维导图,快收藏起来强化你的服务器安全吧

    网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。具有保密性、...

    刀刀老高
  • 探索MITRE Shield如何用于主动防御

    在网络安全领域,传统的被动防御技术越来越无法应对日新月异的网络安全风险,近年来,人们对新型防御的方案的需求愈发强烈,如:主动防御,动态防御,自动化防御等。近期,...

    绿盟科技研究通讯
  • 数据库防火墙

    数据库防火墙仿佛是近几年来出现的一款新的安全设备,但事实上历史已经很长。2010年,Oracle公司在收购了Secerno公司,在2011年2月份正式发布了其数...

    数据安全
  • 零基础如何学习 Web 安全?

    Web安全,是网络安全的一个重要分支。过去提到Web安全, 更多的是关注Web漏洞的工作原理、与如何利用漏洞进行攻击。

    糖果
  • 沙箱、蜜罐和欺骗防御的区别

    网络、网络攻击,以及用于阻止网络攻击的策略,一直在进化发展。欺骗防御(Deception)是令研究人员和信息安全人员得以观察攻击者行为的新兴网络防御战术,能让攻...

    用户2202688
  • 「图隐私攻击与防御技术」最新2022研究综述

    来源:专知本文约7000字,建议阅读14分钟人大最新关于图数据隐私攻击与防御技术综述论文。 摘要 如今,图数据已经被广泛地应用于现实生活与科学研究当中,有巨大...

    数据派THU
  • AI算法对抗攻击和防御技术综述「AI核心算法」

    随着计算机产业发展带来的计算性能与处理能力的大幅提高,人工智能在音视频识别、自然语言处理和博弈论等领域得到了广泛应用。在此背景下,确保人工智能的核心——深度学习...

    用户7623498
  • WEB攻击手段及防御第2篇-SQL注入

    概念 SQL注入即通过WEB表单域插入非法SQL命令,当服务器端构造SQL时采用拼接形式,非法SQL与正常SQL一并构造并在数据库中执行。 简单的SQL注入的...

    Java技术栈
  • 安全编码实践之一:注入攻击防御

    我已经在这个问题上工作了好几个月,试图理解是什么让代码变得脆弱,现在,我收到了这个简单的答案 - 糟糕的编程习惯。现在这看起来很明显,但编程社区的很大一部分仍然...

    Bypass

扫码关注云+社区

领取腾讯云代金券