XPATH Injection

參考:

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 詳細利用手法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章