天天看點

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。

攻擊場景

http 資料包中如果有查詢類的功能點,并且參數形式類似于 <code>/a/b/c</code> 這種目錄形式,則可以嘗試。

不過一般情況下,很少會有人将資料放到 xml 中,大部分都是 資料庫中,即使放到了 xml 中,也不一定通過 XPATH 來查詢資料。而且這種 http 資料包中特征也不明顯。(不像 ssrf 會有明顯的 url 參數值)。

如何攻擊

注入惡意的 xpath 語句。

如何防禦

輸入過濾。

比較少見,故此處隻記錄一個連結和一個工具,若碰到了查閱相關利用手法。

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

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