今天要介紹的一種駭客攻擊手法「偽造跨站請求」,
英文Cross-site request forgery,通常縮寫CSRF,
也被稱為 one-click attack 或者 session riding 攻擊。
這種攻擊是讓使用者在瀏覽器已登入的狀態下去執行非本意的操作的攻擊方法。
其實有些人會把XSS與CSRF搞混,重點就是要記得:
XSS 利用的是使用者對指定網站的信任;
CSRF 利用的是網站對使用者網頁瀏覽器的信任。
關於這項攻擊的細節大致如下:
攻擊者通過一些技術手段欺騙使用者的
讓瀏覽器去訪問一個自己曾經認證過的網站並執行一些操作
(如新增刪除項目,轉帳或是買東西)。
由於瀏覽器曾經認證過這個網站,
所以被訪問的網站會認為使用者是真的想執行這個操作。
這利用了WEB中身份驗證的一個漏洞,
就是身份驗證只能確保請求來自某個特定的瀏覽器,
卻不能保證這個請求是使用者自願發出的。
如果看完以上還是不懂的話,
讓我們直接用下面的例子來說明吧!
同時也會用到我們今天的功能!!!
(不過必須先對部分人說抱歉,這個功能只有專業版才能使用XD)
首先我們登入靶機DVWA,這邊必須要先有個基本的知識點,
登入時我們其實就有得到了一個session cookie,
我們在登入後瀏覽這個DVWA,而網站仍能知道我們在登入狀態,
靠的就是這個session cookie。
我們把難度調成low,接著到CSRF這個漏洞項目,
這邊是一個變更密碼的功能,
我們開啟Burp,攔截一下這個功能按下Change的請求內容,
我輸入abc123456按下Change之後,
可以發現攔截到的請求是使用GET傳遞表單的參數與值,
並且可以從cookie中看到請求送出的時候會帶著session cookie。



我們先把這個請求Drop掉,先不變更我們的密碼,
回到CSRF的頁面按下F12開發人員選項觀察一下,
可以看得出來會使用GET發送這一段請求,
是因為HTML中的from action…這一段程式碼,
所以假設今天有一個網站,做了一個功能,
這個功能可以送出同樣的表單,並且是送到DVWA的這個網站,
這樣惡意的攻擊者,是不是創造一個功能,偽造一個請求了呢?
沒錯的!就是這樣。


我們再一次攔截這個變更密碼的功能,
接著就是我們今天的主角了!
我們對這個請求點選右鍵,
按下Engagement tools -> Generate CSRF PoC,
這時候就會Burp就會幫我們產生一段CSRF的驗證程式碼,
也就是說當我們按下這個功能的時候,
會針對這個網站發送一個一樣的請求功能。



所以我們把這段程式碼複製下來,
貼到我們的文字編輯器上面,然後存成HTML的檔案,
用瀏覽器打開這個頁面,記得一件重要的事情!
開啟的瀏覽器必須是有登入DVWA的那個瀏覽器,
我們可以看到有一個按鈕,
當我們按下按鈕的時候,可以用Burp攔截觀察到,
它發送了一個與剛剛我們在DVWA變更密碼功能中一樣的請求
(有帶著參數與session cookie),
所以這個也就是所謂的偽造跨站的請求,
我們將這個請求給放行讓他通過,
可以看到因為這個網站存在CSRF漏洞,所以我們的密碼就成功了!




今天的介紹就到這邊啦~
偽造跨站請求對於新手來說其實是比較不好理解的漏洞,
可以的話最好是動手實作才可以更加透徹的了解!
然後雖然Burp的專業版有Generate CSRF PoC,
這個不錯的功能阿,但實際上真的了解漏洞的話,
手動去構造PoC應該是要沒問題的才行,
建議偶爾還是得自己手動構造PoC,或是至少有嘗試成功過。
本系列的文章為作者參與第 12 屆 iT 邦幫忙鐵人賽的文章修改
原文連結 https://ithelp.ithome.com.tw/users/20114110/ironman/3806