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