欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

XPath注入详解

来源:MottoIN 作者:coco413 时间:2017-02-02 TAG: 我要投稿

0x01 简介

XPath注入攻击是指利用XPath 解析器的松散输入和容错特性,能够在 URL、表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息。XPath注入发生在当站点使用用户输入的信息来构造请求以获取XML数据。攻击者对站点发送经过特殊构造的信息来探究站点使用的XML是如何构造的,从而进一步获取正常途径下无法获取的数据。当XML数据被用作账户验证时,攻击者还可以提升他的权限。

0x02 原理

XPath 注入的原理与sql注入大体类似。主要是通过构建特殊的输入,这些输入往往是XPath语法中的一些组合,这些输入将作为参数传入Web 应用程序,通过执行XPath查询而执行入侵者想要的操作。但是,注入的对象不是数据库users表了,而是一个存储数据的XML文件。因为xpath不存在访问控制,所以我们不会遇到许多在SQL注入中经常遇到的访问限制。 注入出现的位置也就是cookie,headers,request parameters/input等。 例如:

<?xml version="1.0" encoding="UTF-8"?> 
<users> 
<user> 
<firstname>Ben</firstname>
<lastname>Elmore</lastname> 
<loginID>abc</loginID> 
<password>test123</password> 
</user> 
<user> 
<firstname>Shlomy</firstname>
<lastname>Gantz</lastname>
<loginID>xyz</loginID> 
<password>123test</password> 
</user> 
<user> 
<firstname>Jeghis</firstname>
<lastname>Katz</lastname>
<loginID>mrj</loginID> 
<password>jk2468</password> 
</user> 
<user> 
<firstname>Darien</firstname>
<lastname>Heap</lastname>
<loginID>drano</loginID> 
<password>2mne8s</password> 
</user> 
</users>

正常查询//users/user[loginID/text()='xyz'and password/text()='123test'],如果黑客在 loginID 字段中输入:' or 1=1 or ''=' 则变成//users/user[loginID/text()=''or 1=1 or ''='' and password/text()='' or 1=1 or ''=''],成功获取所有user数据,然后攻击者完成登录可以再通过XPath盲入技术获取最高权限帐号和其它重要文档信息。

0x03 利用

如果一个网站某应用程序将数据保存在XML中,并且对用户的输入没有做限制,攻击者提交了没有经过处理的输入,就插入到 XPath 查询中,即产生Xpath注入,那么就攻击者就可能通过控制查询,获取数据,或者删除数据之类的操作。

Xpath是xml路径语言,用于配置文件的查找。数据库就是xml文件。因此只要是利用XPath语法的Web 应用程序如果未对输入的XPath查询做严格的处理都会存在XPath注入漏洞。比如一些登录地址页面,搜索页面需要与xml交互的位置。

判断依据:主要根据错误信息页面判断以及查看源码进行分析。

xpath0

Example:Bwapp

首先这是这个Get方式请求验证,因此对get的参数进行注入测试,发现报错信息,说明是可能通过xml存储于前端交互。

xpath1

然后构造xpath查询语句//users/user[loginID/text()='' and password/text()=''],因此'or 1=1 or ''='或者' or '1'='1等使其为真可以。

xpath2

Example:hctf

index.html

<?php
$re = array('and','or','count','select','from','union','group','by','limit','insert','where','order','alter','delete','having','max','min','avg','sum','sqrt','rand','concat','sleep');

setcookie('injection','c3FsaSBpcyBub3QgdGhlIG9ubHkgd2F5IGZvciBpbmplY3Rpb24=',time()+100000);

if(file_exists('t3stt3st.xml')) {
 $xml = simplexml_load_file('t3stt3st.xml');

$user=$_GET['user'];

$user=str_replace($re, ' ', $user);

// $user=str_replace("'", "&apos", $user);

$query="user/username[@name='".$user."']";
 
 $ans = $xml->xpath($query);

foreach($ans as $x => $x_value)
 {
 echo $x.": " . $x_value;
 echo "<br />";
 }

}

?>

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载