您的位置:首页 > 其它

XPATH Injection

2021-10-10 22:25 661 查看

参考:

https://book.hacktricks.xyz/pentesting-web/xpath-injection

https://www.w3schools.com/xml/xpath_syntax.asp

简介

什么是XPATH、什么是 XPATH 注入?

这里通过与 sql 注入对比来更好的体会这个漏洞本质。

XPATH 指的是 XML Path Language,是一种用来查询 xml 中节点(节点自身、节点包含的数据)的语言。

sql 指的是 Structured Query Language,是一种用来操作(查询、更改、删除等)数据库的语言。

而 XPath Injection 是指的是用户输入,插入到程序的 XPATH 语句中,更改程序 XPATH 语句的原义,使程序执行非预期的 XPATH 语句,对 XML 文档进行查询。

sql 注入指的是用户输入,插入到程序的 sql 语句中,更改程序 sql 语句的原义,使程序执行非预期的 sql 语句,对数据库进行操作。

通过上面的比对,可以看到两个语言的共同之处都是可以对数据进行查询。不同之处在于,sql 语句可以操作数据库,可以执行查询、插入、删除等多种操作。而 XPATH 只能进行查询 XML 文档。

所以危害也显而易见。XPATH 最多获取当前所查询的 XML 文档的所有数据,或者和 sql 注入一样绕过登录检查逻辑。

以下是php 语言提供的 XPATH 查询 api。

<?php
$string = <<<XML
<a>
<b>
<c>text</c>
<c>stuff</c>
</b>
</a>
XML;

$xml = new SimpleXMLElement($string);

/* Search for <a><b><c> */
$result = $xml->xpath('/a/b/c');

while(list( , $node) = each($result)) {
echo '/a/b/c: ',$node,"\n";
}
?>
# 结果
/a/b/c: text
/a/b/c: stuff
攻击场景

http 数据包中如果有查询类的功能点,并且参数形式类似于

/a/b/c
这种目录形式,则可以尝试。

不过一般情况下,很少会有人将数据放到 xml 中,大部分都是 数据库中,即使放到了 xml 中,也不一定通过 XPATH 来查询数据。而且这种 http 数据包中特征也不明显。(不像 ssrf 会有明显的 url 参数值)。

如何攻击

注入恶意的 xpath 语句。

如何防御

输入过滤。

利用手法

比较少见,故此处只记录一个链接和一个工具,若碰到了查阅相关利用手法。

https://xcat.readthedocs.io/en/latest/ 利用工具

https://book.hacktricks.xyz/pentesting-web/xpath-injection 详细利用手法

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: