博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Xpath注入学习
阅读量:4948 次
发布时间:2019-06-11

本文共 2365 字,大约阅读时间需要 7 分钟。

xpath简介:

  提到xpath就要先说下xml,xml意为可扩展标记语言,简单来说就是一种存储数据的标准格式,可以把他视为一个小型的数据库,他可以解决数据在网上传输的标准问题。是一种比数据库更具通用性,便捷型的存储形式,因为不同的业务会涉及到不同产品类型的数据库,在更换产品或是接口需求变动的时候往往又要重写接口代码、更改表结构,同时数据库的维护和防火墙的限制也是麻烦,xml的存储形式正好可以弥补这些缺陷,但同样的,xml的轻量级也决定了他无法像数据库那样高效的存储、索引、修改、触发还有访问控制。

  那么xpath呢,他是一种对xml文档进行查询操作的语言,通过使用路径表达式来选取 XML 文档中的节点或节点集,并返回计算后的值。

 

xpath语法:

  nodename:选取此节点的所有子节点

  /  :从根节点选取

  // :从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置

  .  :选取当前节点

  .. :选取当前节点的父节点

  @:选取属性

  *  :匹配任何元素节点

  //*:选取文档中的所有元素

  @*:匹配任何属性节点

  node():匹配任何类型节点

  /bookstore/book[1]:选取属于bookestore子元素的第一个book元素

  //title[@lang]:选取所有拥有名为lang的属性的title元素

  /bookstore/book | //price:选取属于bookstore元素的所有book元素,以及文档中所有的price元素

 

注入原理:

  xpath注入的原理其实和sql注入很像,都是通过语法构造特殊输入,这些输入通过传参的方式拼接到原查询语句后被执行,以获取非预期显示信息。注入的对象不过是换了一个存储形式,同时,因为xpath不存在访问控制,所以相较sql注入要容易很多,这里用一道赛题来举例:

  通过访问/download.php?file=backup.zip下载网页源码,如下:

1 
xpath($query);12 foreach($ans as $x => $x_value)13 {14 echo $x.": " . $x_value;15 echo "
";16 }17 }

  首先看到他过滤了sql注入的一些关键字,setcookie中有一段base64加密的密文,解码后得到的是:“sqli is not the only way for injection”,根据提示sql不是唯一的注入方式,再结合下面对xml的一系列操作,可以确定这道题是用xpath注入,于是根据$query="user/username[@name='".$user."']";这一句可构造如下payload:

  

这句payload的意思是闭合了“.$user.”前后的单引号同时执行三个操作,其中第二个操作//*即是关键点,列出文档中的所有元素,最后拿到flag

  站在开发的角度来看,当存在如下user.xml文档时:

1 
2
Ben
3
Elmore
4
abc
5
test123
6
7
8
Shlomy
9
Gantz
10
xyz
11
123test
12

  xpath典型的查询语句便是:

//users/user[loginID/text()='xyz'and password/text()='123test']

  但此处存在一个xpath注入可以绕过用户验证:只需将传入的参数loginID和password的值改为' or ''='

//users/user[loginID/text()='' or ''='' and password/text()='' or ''='']

  此时,通过传入的值闭合了参数两边的单引号,又使其查询恒为真,故达到了绕过的目的

延展开来,xpath的注入还有很多花样,像是通过updataxml()函数实现xpth报错注入,还有xpth的盲注

 

 防御方法:

  1、和sql注入的防御一样,在服务器处理提交的数据前先检查数据是否包含特殊字符,对其进行过滤

  2、对系统出现的错误信息用统一的报错页面代替(如updataxml()这类)

  3、在数据的传输过程中,对敏感信息进行加密

  4、构建xpath查询表达式,以变量的形式参数化xpath查询:

//users/user[@loginID=$loginID and @password= $password]

 

 

 

参考文献:

http://www.runoob.com/xpath/xpath-syntax.html

http://blog.csdn.net/qq1175421841/article/details/50194673

http://blog.csdn.net/quiet_girl/article/details/50588130

转载于:https://www.cnblogs.com/sherlock17/p/7229267.html

你可能感兴趣的文章
Selenium获取页面指定元素个数
查看>>
到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf
查看>>
2:4 动态方法的调用(简化Action的配置)
查看>>
【算法】快速幂运算
查看>>
用 SDL2 显示一张图片
查看>>
一种新的人才流动形式
查看>>
HTTP基础04--web服务器
查看>>
DOM--4 响应用户操作和事件(2)
查看>>
ubuntu16.04下无线网卡无法正常连网
查看>>
linux下去掉pdf的密码(前提:知道密码)
查看>>
Aspose.word在asp.net mvc中如何使用的个人总结
查看>>
JS运行机制
查看>>
nohup 部署springboot 使用命令
查看>>
微信小程序开发之页面数据绑定
查看>>
SQL Server 2008 阻止保存要求重新创建表的更改问题的设置方法
查看>>
【笔记】实现一个简易的Promise
查看>>
SQL语法--DQL
查看>>
Sublime Text 3安装Latex
查看>>
笔谈kxmovie开源播放器库的使用
查看>>
SQLSERVER Truncate使用注意事项
查看>>