CSRF漏洞

CSRF( Cross- site request forgery,跨站請求偽造)也被稱為 One Click Attack或者 Session Riding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用。

儘管聽起來像跨站指令碼(XSS),但它與XSS非常不同,XSS利用站點內的信任使用者,而CSRF則通過偽裝成受信任使用者請求受信任的網站。與XSS攻擊相比,CSRF攻擊往往不大流行也難以防範,所以被認為比XSS更具危險性

CSRF漏洞原理

其實可以這樣理解CSRF:攻擊者利用目標使用者的身份,以目標使用者的名義執行某些非法操作。CSRF能夠做的事情包括:以目標使用者的名義傳送郵件、發訊息,盜取目標使用者的賬號,甚至購買商品、虛擬貨幣轉賬,這會洩露個人隱私並威脅到了目標使用者的財產安全

舉個例子

1. 使用者C開啟瀏覽器,訪問受信任網站A,輸入使用者名稱和密碼請求登入網站A;

2.在使用者資訊通過驗證後,網站A產生Cookie資訊並返回給瀏覽器,此時使用者登入網站A成功,可以正常傳送請求到網站A;

3. 使用者未退出網站A之前,在同一瀏覽器中,開啟一個TAB頁訪問網站B;

4. 網站B接收到使用者請求後,返回一些攻擊性程式碼,併發出一個請求要求訪問第三方站點A;

5. 瀏覽器在接收到這些攻擊性程式碼後,根據網站B的請求,在使用者不知情的情況下攜帶Cookie資訊,向網站A發出請求。網站A並不知道該請求其實是由B發起的,所以會根據使用者C的Cookie資訊以C的許可權處理該請求,導致來自網站B的惡意程式碼被執行。

CSRF的攻擊過程有以下兩個重點。

  • 目標使用者已經登入了網站,能夠執行網站的功能
  • 目標使用者訪問了攻擊者構造的URL

CSRF漏洞攻擊例項

在網上看到一個很形象的例子認知 行動 堅持-CSDN部落格

受害者 Bob 在銀行有一筆存款,通過對銀行的網站傳送請求 http://bank.example/withdraw?account=bob&amount=1000000&for=bob2 可以使 Bob 把 1000000 的存款轉到 bob2 的賬號下。通常情況下,該請求傳送到網站後,伺服器會先驗證該請求是否來自一個合法的 session,並且該 session 的使用者 Bob 已經成功登陸。

黑客 Mallory 自己在該銀行也有賬戶,他知道上文中的 URL 可以把錢進行轉帳操作。Mallory 可以自己傳送一個請求給銀行:http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory。但是這個請求來自 Mallory 而非 Bob,他不能通過安全認證,因此該請求不會起作用。

這時,Mallory 想到使用 CSRF 的攻擊方式,他先自己做一個網站,在網站中放入如下程式碼: src=”http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory ”,並且通過廣告等誘使 Bob 來訪問他的網站。當 Bob 訪問該網站時,上述 url 就會從 Bob 的瀏覽器發向銀行,而這個請求會附帶 Bob 瀏覽器中的 cookie 一起發向銀行伺服器。大多數情況下,該請求會失敗,因為他要求 Bob 的認證資訊。但是,如果 Bob 當時恰巧剛訪問他的銀行後不久,他的瀏覽器與銀行網站之間的 session 尚未過期,瀏覽器的 cookie 之中含有 Bob 的認證資訊。這時,悲劇發生了,這個 url 請求就會得到響應,錢將從 Bob 的賬號轉移到 Mallory 的賬號,而 Bob 當時毫不知情。等以後 Bob 發現賬戶錢少了,即使他去銀行查詢日誌,他也只能發現確實有一個來自於他本人的合法請求轉移了資金,沒有任何被攻擊的痕跡。而 Mallory 則可以拿到錢後逍遙法外。

防禦CSRF攻擊

  • 驗證請求的 Referer值,如果 Referer是以自己的網站開頭的域名,則說明該請求來自網站自己,是合法的。如果 Refererl是其他網站域名或空白,就有可能是CSRF攻擊,那麼伺服器應拒絕該請求,但是此方法存在被繞過的可能。
  • CSRF攻擊之所以能夠成功,是因為攻擊者可以偽造使用者的請求,由此可知,抵禦CSRF攻擊的關鍵在於:在請求中放入攻擊者不能偽造的資訊。例如可以在HTTP請求中以引數的形式加入一個隨機產生的token,並在伺服器端驗證token,如果請求中沒有 token或者 token的內容不正確,則認為該請求可能是CSRF攻擊從而拒絕該請求

SSRF漏洞

SSRF( Server-side Request Forgery,伺服器端請求偽造)是一種由攻擊者構造請求,由服務端發起請求的安全漏同。一般情況下,SSRF攻擊的目標是外網無法訪問的內部系統(正因為請求是由服務端發起的,所以服務端能請求到與自身相連而與外網隔離的內部系統)

SSRF漏洞原理

SSRF的形成大多是由於服務端提供了從其他伺服器應用獲取資料的功能目沒有對目標地址做過濾與限制。

例如,黑客操作服務端從指定URL地址獲取網頁文字內容,載入指定地址的圖片等,利用的是服務端的請求偽造。SSRF利用存在缺陷的Web應用作為代理攻擊遠端和本地的伺服器。

SSRF攻擊例項

SSRF漏洞測試地址為:http://127.0.0.1/ssrf.php?url=http://127.0.0.1/2.php

頁面ssrf.php實現的功能是獲取GET引數的URL然後返回在網頁上

那如果篡改URL引數為www.baidu.com就會顯示百度的內容

既然能改成百度,那麼還可以通過伺服器訪問內網的地址,例如訪問內網192.168.0.2:3306埠檢視是否存在MySQL服務

甚至讀取本地的檔案?url=file:///C:/Windows/win.ini

防禦SSRF攻擊

  • 限制請求的埠只能為Web埠,只允許訪問HTTP和HTTPS的請求
  • 限制不能訪可內網的P,以防止對內網進行攻擊。
  • 遮蔽返回的詳細資訊