電腦網頁通過XPath注入介紹

XML SQL HTML JavaScript 弈安傳媒科技 2017-04-12

1.1XPath注入破解介紹

電腦網頁通過XPath注入介紹

電腦網頁通過XPath注入,攻擊者利用Web應用對用戶提交的參數過濾不嚴的漏洞破解,提交經過構造的參數,這些參數能夠被注入到電腦網頁通過XPath注入查詢語句中dnf,獲得權限信息的訪問權並在此基礎上更改這些信息。適用於使用XML文檔存儲數據的Web應用系統。和SQL注入非常相似,區別在於SQL注入是用戶的輸入被注入到SQL語句中,而電腦網頁通過XPath注入是用戶的輸入注入到XPath查詢語句中。

先來看一個簡單的例子,下圖是登錄頁面:電腦網頁通過XPath注入

輸入登錄信息:電腦網頁通過XPath注入介紹

電腦網頁通過XPath注入

結果:電腦網頁通過XPath注入介紹

電腦網頁通過XPath注入

電腦網頁通過XPath注入

這時返回的結果包含了很多敏感的信息,可以判斷該應用採用XML存儲用戶認證信息。

為便於分析,在服務器端將查詢語句輸出到用戶的瀏覽器。

在用戶名或密碼處輸入:999'] | * | user[@role='admin ,另一個隨便輸入。電腦網頁通過XPath注入介紹

電腦網頁通過XPath注入

電腦網頁通過XPath注入

結果:電腦網頁通過XPath注入介紹

電腦網頁通過XPath注入

電腦網頁通過XPath注入

上圖中畫紅框處即為XPath查詢語句,可以看到,剛才輸入的 999'] | * | user[@role='admin 已經成功的注入進去了!

現在來看看服務器端是如何處理的,index.asp文件內容為:

<script language="javascript" runat="server">

Response.write("<html><body>");

uid=Request.form("uid");

pwd=Request.form("pwd");

Response.write("<form method="POST">Username:<input name="uid" size="20"/><br>Password:<input name="pwd" size="20"/><input type="submit" value="Login"/></form>");

var xmlDom=new ActiveXObject("Microsoft.XMLDOM");

xmlDom.async="false";

xmlDom.load("/Inetpub/wwwroot/xpath/user.xml");

var auth="//users/user[loginID/text()='"+uid+"' and password/text()='"+pwd+"']";

Response.write(auth);

var UserObj=xmlDom.selectNodes(auth);

if(UserObj.length>0) Response.write("<br><br>Login OK!");

else Response.write("Please Input Correct Username and Password!");

Response.write(UserObj.Xml);

for(var i=0;i<UserObj.length;i++)

{

Response.write("<xmp>");

Response.write(UserObj(i).xml);

Response.write("</xmp>");

}

Response.write("</body></html>");

</script>

用於認證的user.xml內容為:

<?xml version="1.0" encoding="UTF-8"?>

<users>

<user>

<firstname>Ben</firstname>

<lastname>Elmore</lastname>

<loginID>abc</loginID>

<password>test123</password>

</user>

<user>

<firstname>Shlomy</firstname>

<lastname>Gantz</lastname>

<loginID>xyz</loginID>

<password>123test</password>

</user>

</users>

從index.asp中可以看到,查詢語句為:

auth="//users/user[loginID/text()='"+uid+"' and password/text()='"+pwd+"']"

其含義是:選取這樣的user節點,它的loginID=用戶提交的uid且password=用戶提交的pwd ;

其中uid和pwd變量未經任何檢查和過濾,直接傳遞到查詢語句中,上圖中實際執行的XPath語句為://users/user[loginID/text()='999' and password/text()='999'] | * | user[@role='admin'] ,含義變成:選取loginID=999且password=999的用戶 或者 選取XML所有節點 或者 選擇role屬性(如果有)為admin的用戶。該例中邏輯運算的結果是選取XML所有節點,從而導致XPath注入的發生。

弈安傳媒科技微課堂,每天分享財經資訊,計算機技術知識,人生感悟,創業指導以及各種專業技

術知識資料學習交流.移動學習平臺、知識分享平臺。隨時隨地的學習,如果你喜歡成長,這裡

你不容錯過的地方.弈安傳媒科技培訓關注:關注自己成長,分享內容,分享自己的技術,成就未

來.

[弈安傳媒科技提升自己的平臺]請關注:頭條號及公眾號 弈安傳媒科技

相關推薦

推薦中...