淺談CSRF與SSRF

今天看在看《XSS跨站腳本攻擊剖析與防禦》的時候,裏邊提到了CSRF與SSRF,在網絡查詢了這部分的資料後,簡單總結了下二者的關係與不同

CSRF

又稱跨站請求僞造,XSS就是CSRF中的一種。二者區別,XSS利用的是用戶對指定網站的信任,CSRF利用是網站對用戶瀏覽器的信任。

發生條件

當用戶在安全網站A登錄後保持登錄的狀態,並在此時瀏覽了保存有惡意代碼的另一個網站B。此時B站劫持用戶的瀏覽器並以用戶以登錄的狀態對A站發送非用戶本人的操作。

當服務端沒有對這次請求驗證的情況下,將這次操作作爲可信任的用戶的操作。

發生地點

攻擊者可以將惡意網址或者代碼藏在論壇博客等任何用戶生成內容的網站中。這意味着如果服務端沒有適合的防禦措施的話,用戶即使訪問熟悉的可信網站也有受攻擊的危險。

類似於XSS一些html標籤可以發送HTTP GET類型請求 像<img>,瀏覽器渲染img標籤的時候,並不知道標籤中src屬性的值,是否爲一個圖片,瀏覽器發起一個HTTP GET請求

,並攜帶當前受害者當前瀏覽器在網站的cookie,獲取返回結果。

對於很多網站來說,即使是一些重要的操作使用POST來提交請求,但是服務器再接收請求的時候並沒有嚴格區分POST和GET。在PHP中濫用$_REQUEST就是例子。

如果服務端已經區分了GET,POST只用POST請求數據,可以通過製造一個隱藏的表單,並通過js代碼自動提交僞造的表單。

GET僞造

POST僞造

防禦

增加驗證碼機制,增加帶有大量噪點的驗證碼,杜絕代碼能夠識別的簡單驗證碼,當然了也經常被繞過

驗證referer,採用同源政策,referer記錄着數據包的來源地址,來判斷請求的合法性,但是這個可以僞造

使用Token,令牌是一種將表單value的加密算法生成不同的加密結果,在服務器端進行驗證。

在訪問登錄過一個網站,點擊退出賬戶。



SSRF

又名服務端請求僞造攻擊

有的大型網站在web應用上提供了從其他服務器獲取數據的功能。使用戶指定的URL web應用獲取圖片,下載文件,讀取文件內容。攻擊者利用有缺陷的web應用作爲代理攻擊遠程和內網的服務器(跳板)



危害:

可對外網,服務器所在內網,受控服務器進行端口掃描,獲取一些banner

對內網web應用進行指紋識別,通過訪問默認文件實現

攻擊內外網web應用,主要是使用get參數就可以實現分攻擊

利用file協議讀取本地文件

該漏洞存在的條件是對curl函數的濫用

比如:

if(isset($_POST['commit'])){

    $link = $_POST['url'];

    $filename = './curled/'.rand().'txt';

    $curlobj = curl_init($link);     //初始化連接

    $fp = fopen($filename,"w");

    curl_setopt($curlobj, CURLOPT_FILE, $fp);   //設置輸出文件,默認爲STDOUT (瀏覽器)。

    curl_setopt($curlobj, CURLOPT_HEADER, 0);  //設置爲0表示不返回HTTP頭部信息。

    curl_exec($curlobj);     //執行curl請求

    curl_close($curlobj);    //關閉curl連接

    fclose($fp);

    $fp = fopen($filename,"r");

    $result = fread($fp, filesize($filename)); 

    fclose($fp);     //關閉文件

    echo $result;

}

併爲對輸入的命令進行過濾,導致服務器遭到攻擊


修復方案:

過濾返回信息,如果web應用數去獲取某一類型文件,在把結果返回給用戶之前先驗證信息是否符合標準。

例如:當攻擊者利用"識別圖片"下的該漏洞遠程包含一個文件,可以通過在服務器上驗證返回數據是否是純像素,來進行過濾。

統一錯誤頁

限制請求端口爲http常用端口 80,443,8080,8090

內網IP黑名單,避免應用被用來獲取內網數據,攻擊內網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章