CSRF漏洞(原理 DVWA實驗 修復建議)

2021-10-09 15:21:22 字數 2660 閱讀 3535

目錄

1 介紹csrf漏洞

2 csrf漏洞的原理

3 dvwa csrf實驗過程

3.1 low級別

3.2 medium級別

相關函式說明

3.3 high級別

3.4 impossible級別

4 csrf漏洞修復建議

csrf (cross -site request forgery,跨站請求偽造)也被稱為one click attack或者session riding,通常縮寫為csrf或者xsrf,是一種對**的惡意利用。儘管聽起來像跨站指令碼(xss),但它與xss非常不同,xss利用站點內的信任使用者,而csrf則通過偽裝成受信任使用者請求受信任的**。與xss攻擊相比,csrf攻擊往往不大流行(因此對其進行防範的資源也相當稀少)也難以防範,所以被認為比xss更具

危險性。csrf漏洞經常被用來製作蠕蟲攻擊、刷seo流量等。

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

舉個例子,你想給某位使用者轉賬100元,那麼單擊"轉賬」 按鈕後,發出的http請求會與類似。而攻擊者構造鏈結(當目標使用者訪問了該url後,就會自動向hack賬號轉賬100元,而且這只涉及目標使用者的操作,攻擊者並沒有獲取目標使用者的cookie或其他資訊。

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

可以看到,伺服器收到修改密碼的請求後,會檢查引數password_new與password_conf是否相同,如果相同,就會修改密碼,並沒有任何的防csrf機制(當然伺服器對請求的傳送者是做了身份驗證的,是檢查的cookie,只是這裡的**沒有體現)。

於是直接構造鏈結訪問即可。

檢查string中是否含有pattern(不區分大小寫),如果有返回true,反之false。

可以看到,medium級別的**檢查了保留變數 http_referer(http包頭的referer引數的值,表示**位址)中是否包含server_name(http包頭的host引數,及要訪問的主機名,這裡是192.168.1.100),希望通過這種機制抵禦csrf攻擊。

referer頭資訊可以用burp suite的截斷功能修改

可以看到,high級別的**加入了anti-csrf token機制,使用者每次訪問改密頁面時,伺服器會返回乙個隨機的token,向伺服器發起請求時,需要提交token引數,而伺服器在收到請求時,會優先檢查token,只有token正確,才會處理客戶端的請求。

後續:或者:

<?php

if( isset( $_get[ 'change' ] ) )

else

}// generate anti-csrf token

generatesessiontoken();

?>

可以看到,impossible級別的**利用pdo技術防禦sql注入,至於防護csrf,則要求使用者輸入原始密碼(簡單粗暴),攻擊者在不知道原始密碼的情況下,無論如何都無法進行csrf攻擊。

DVWA親測CSRF漏洞

csrf是一種跨站點請求偽造,即使用者在a站點登入後,處於同一客戶端的b站點利用漏洞獲得了a站點的cookie等身份驗證資訊,並偽造成合法身份請求a站點。1 low級別的csrf漏洞利用。將安全級別設定為low,並提交一次修改密碼,通過抓包得到相應的get請求報文。在另一台伺服器上構造乙個網頁,標籤...

命令執行漏洞攻擊 修復建議

應用程式有時需要呼叫一些執行系統命令的函式,如在php中,使用system exec shell exec passthru popen proc popen等函式可以執行系統命令。當黑客能控制這些函式中的引數時,就可以將惡意的系統命令拼接到正常命令中,從而造成命令執行攻擊,這就是命令執行漏洞。頁面...

常用的安全漏洞修復建議

通過把 sql命令插入到 web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的 sql命令。將 惡意的 sql命令注入到後台資料庫引擎執行的能力,它可以通過在 web表單中輸入 惡意 sql語句得到乙個存在安全漏洞的 上的資料庫,而不是按照設計者意圖去執行 sql語句。導致...