从MySQL注入到XPath注入

0x00 XPath基础知识

这个部分只是单纯铺垫XPath基础知识,不涉及注入,了解XPath可以跳过

这里直接引用 w3school的XPath教程 中间的案例,因为里面给了好多示例,基本一看就懂的那种。

XPath是什么?

XPath是用来从XML文档中进行查找信息的语言。

XPath节点(Node)

XPath中有7种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点

这个没有太大了解的必要,知道节点这个名词就够了,不需要分得特别细致。

选取节点

后面都以这个xml文档为例

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>

选取节点的表达式:

示例:

为选取节点添加限制条件——谓语

谓语的语法是写在方括号里,是用来为选取节点添加特定条件的。

示例:

选取未知节点

在不知道节点名称时,可以使用通配符来范范的匹配节点

示例:

多路径的选取

可以使用 | 来选取多个路径,有点相当于sql中的 union

示例:

XPath运算符

0x01 从MySQL盲注开始

在一文搞定MySQL盲注一文中,我介绍了做盲注的两个基本问题:

  1. 字符串的截取
  2. 比较

然后是做盲注的流程,首先我们需要构造SQL语句,找到一个condition,这个condition是一个布尔表达式,他能够影响着这个语句的结果,例如:

?id = 1' and 1=1 %23
?id = 1' and 1=2 %23

在上面这个例子中, 1=1 和 1=2 就是一个布尔表达式,并且他们的真假直接影响着SQL语句的查询结果、进而直接影响着页面的回显或者延时与否等(具体取决于什么类型的盲注)。这个时候我们只需要把这个布尔表达式换成由字符串截取和比较所组成的新的布尔表达式,即可开始注入,例如:

?id = 1' and ascii(substr((select database()),1,1)) = 97 %23
?id = 1' and ascii(substr((select database()),1,1)) = 98 %23
以此类推...

这样就ok了!

0x02 MySQL转向XPath

在MySQL中我们一般遇到的SQL注入都是对 select 查询语句的 where 子句做注入,也就是说注入进去的是 where 的一部分,而 where 刚好是对 select 的查询增加限制条件的,所以我们才能给到布尔表达式然后通过这个布尔表达式影响 where 子句进而影响整个 select 的查询结果。

由此可见,想要做盲注,我们需要控制的是查询语句的“限制”部分。

而XPath中,对查询做限制的正是谓语,那么注入位点就也是需要在谓语处进行注入。当然这个不用自己考虑和构造,因为CTF题中如果是出XPath盲注这个知识点,用户的输入基本就是在谓语中的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值