關於XPath注入攻擊

0x01 什麼是XPath?

XPath即爲XML路徑語言,是一種用來確定XML文檔中某部分位置的語言。XPath基於XML的舒張結構,提供在數據結構書中尋找節點的能力。XPath提出的初衷是將其作爲一個通用的、介於XPointer和XSLT間的語法模型,但是XPath很快被開發者用來當做小型查詢語言。

XPath注入攻擊的危害:

(1)通過XPath注入獲得一些限制信息的訪問權和修改權。

(2)XPath注入攻擊利用了兩種技術。分別是XPath掃描和XPath查詢布爾化(n能夠產生一個真或者一個假的值的表達式)。通過該攻擊,攻擊者可以控制用來進行XPath查詢的XML數據庫。這種攻擊可以有效利用XPath查詢(和XML數據庫)來執行身份驗證、查找或者其他操作。XPath注入攻擊同SQL注入攻擊類似,但和SQL注入攻擊比較,XPath更具危害性。XPath語言幾乎可以引用XML文檔的所有內容,而這樣的引用一般是沒有訪問控制限制的。但在SQL注入中,一個被限制權限的用戶只能訪問到特定的表的數據。而XPath則可以保證拿到完整的XML文檔,即完整的數據庫。

XPath使用路徑表達式在XML文檔中選取節點,節點是通過路徑或step來選取的。

最有用的路徑表達式
表達式 描述
nodename 選取此節點的所有子節點
/ 從根節點選取
// 從匹配選擇的當前節點選擇文檔中的節點,而不考慮他們的位置
. 選取當前節點
.. 選取當前節點的父節點
@ 選取屬性
路徑表達式及其結果
路徑表達式 結果
bookstore 選取bookstore元素的所有子節點
/bookstore

選取根元素bookstore

註釋:假如路徑起始於正斜槓(/),則此路徑始終代表到某元素的絕對路徑。

bookstore/book 選取屬於bookstore的子元素的所有book元素
//book 選取所有book子元素,而不管他們在文檔中的位置
bookstore//book 選擇屬於bookstore元素的後代的所有book元素,而不管它位於bookstore之下的什麼位置
//@lang 選取名爲lang的所有屬性

 

0x02 保存用戶信息的XML

 

 

 

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