Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
.1XPath注入破解介紹
電腦網頁通過XPath注入,攻擊者利用Web應用對用戶提交的參數過濾不嚴的漏洞破解,提交經過構造的參數,這些參數能夠被注入到電腦網頁通過XPath注入查詢語句中dnf,獲得權限信息的訪問權并在此基礎上更改這些信息。適用于使用XML文檔存儲數據的Web應用系統。和SQL注入非常相似,區別在于SQL注入是用戶的輸入被注入到SQL語句中,而電腦網頁通過XPath注入是用戶的輸入注入到XPath查詢語句中。
先來看一個簡單的例子,下圖是登錄頁面:電腦網頁通過XPath注入
輸入登錄信息:
電腦網頁通過XPath注入
結果:
電腦網頁通過XPath注入
電腦網頁通過XPath注入
這時返回的結果包含了很多敏感的信息,可以判斷該應用采用XML存儲用戶認證信息。
為便于分析,在服務器端將查詢語句輸出到用戶的瀏覽器。
在用戶名或密碼處輸入:999'] | * | user[@role='admin ,另一個隨便輸入。
電腦網頁通過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="http://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="http://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注入的發生。
弈安傳媒科技微課堂,每天分享財經資訊,計算機技術知識,人生感悟,創業指導以及各種專業技
術知識資料學習交流.移動學習平臺、知識分享平臺。隨時隨地的學習,如果你喜歡成長,這里
你不容錯過的地方.弈安傳媒科技培訓關注:關注自己成長,分享內容,分享自己的技術,成就未
來.
[弈安傳媒科技提升自己的平臺]請關注:頭條號及公眾號 弈安傳媒科技
TML 服務器控件是服務器可理解的 HTML 標簽。
HTML 服務器控件
ASP.NET 文件中的 HTML 元素,默認是作為文本進行處理的。要想讓這些元素可編程,需向 HTML 元素中添加 runat="server" 屬性。這個屬性表示,該元素將被作為服務器控件進行處理。
注釋:所有 HTML 服務器控件必須位于帶有 runat="server" 屬性的 <form> 標簽內!
注釋:ASP.NET 要求所有 HTML 元素必須正確關閉和正確嵌套。
HTML 服務器控件 | 描述 |
---|---|
HtmlAnchor | 控制 <a> HTML 元素 |
HtmlButton | 控制 <button> HTML 元素 |
HtmlForm | 控制 <form> HTML 元素 |
HtmlGeneric | 控制其他未被具體的 HTML 服務器控件規定的 HTML 元素,比如 <body>、<div>、<span> 等。 |
HtmlImage | 控制 <image> HTML 元素 |
HtmlInputButton | 控制 <input type="button">、<input type="submit"> 和 <input type="reset"> HTML 元素 |
HtmlInputCheckBox | 控制 <input type="checkbox"> HTML 元素 |
HtmlInputFile | 控制 <input type="file"> HTML 元素 |
HtmlInputHidden | 控制 <input type="hidden"> HTML 元素 |
HtmlInputImage | 控制 <input type="image"> HTML 元素 |
HtmlInputRadioButton | 控制 <input type="radio"> HTML 元素 |
HtmlInputText | 控制 <input type="text"> 和 <input type="password"> HTML 元素 |
HtmlSelect | 控制 <select> HTML 元素 |
HtmlTable | 控制 <table> HTML 元素 |
HtmlTableCell | 控制 <td> 和 <th> HTML 元素 |
HtmlTableRow | 控制 <tr> HTML 元素 |
HtmlTextArea | 控制 <textarea> HTML 元素 |
務器控件是服務器可理解的標簽。
經典 ASP 的局限性
下面列出的代碼是從上一章中復制的:
<html>
<body bgcolor="yellow">
<center>
<h2>Hello W3CSchool.cc!</h2>
<p><%Response.Write(now())%></p>
</center>
</body>
</html>
*請認真填寫需求信息,我們會在24小時內與您取得聯系。