天天看點

[理論-學習]Web安全-CSRF-基礎05一、概述二、漏洞防禦

聲明:

由于筆者能力有限,難免出現各種錯誤和漏洞。全文僅作為個人筆記,僅供參考。

筆記内容來源于各類網課

環境:本地伺服器,BurpSuite

一、概述

  • 使用Referer進行CSRF 漏洞防禦。
  • BurpSuite生成CSRF POC。

二、漏洞防禦

2.1 Referer防禦CSRF原理

HTTPReferer是header的一部分,當浏覽器向web伺服器發送請求的時候,一般會帶上Referer,告訴伺服器我是從哪個頁面連結過來的,伺服器基此可以獲得一些資訊用于處理。

當使用者點選被構造好的CSRF利用頁面,那麼在執行使用者對應操作時,送出的HTTP請求中就有對應的Referer值,此時服務端判斷Referer值是否與伺服器的域名資訊有關。如果不相關則不執行操作。 

使用者正常使用,發送的是使用者目前的域名為Referer。

[理論-學習]Web安全-CSRF-基礎05一、概述二、漏洞防禦

使用者點選POC的模型,發送的是POC所在的域名為Referer。

[理論-學習]Web安全-CSRF-基礎05一、概述二、漏洞防禦

 可以看出,是否是使用者的自定義操作,是可以通過Referer來分辨出來。

2.2 Referer防禦代碼編寫

在PHP中使用$_SERVER['HTTP_REFERER'] 擷取頁面送出請求中的Referer值。

<?php 
if(strpos($_SERVER['HTTP_ REFERER'],'xx.com') !== false)
    {
        echo "判斷成功";
    }
    else 
    {
        echo "判斷失敗";
    }
?>
           

2.3 繞過Referer技巧

如果服務端隻判斷目前的Referer中是否具有域名,那麼直接可以建立檔案夾進行繞過。

2.4 BurpSuite生成POC觸發CSRF

管理者的域名為:192.168.227.204

攻擊者POC的域名為:192.168.227.84

管理者正常通路:

[理論-學習]Web安全-CSRF-基礎05一、概述二、漏洞防禦

我們使用BurpSuite抓包,生成POC,放在KaliLinux的伺服器中。

[理論-學習]Web安全-CSRF-基礎05一、概述二、漏洞防禦
[理論-學習]Web安全-CSRF-基礎05一、概述二、漏洞防禦

POC2.html

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://192.168.227.204:8009/login2.php">
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>
           

 開啟Apach服務。

[理論-學習]Web安全-CSRF-基礎05一、概述二、漏洞防禦

管理者通路poc2.html頁面。

[理論-學習]Web安全-CSRF-基礎05一、概述二、漏洞防禦

 檢測出來域名不一緻,判斷為CSRF攻擊,拒絕操作。

我們嘗試繞過,在poc2.html上建立一個名為192.168.227.204的檔案夾,poc2.html放入其中再通路。

[理論-學習]Web安全-CSRF-基礎05一、概述二、漏洞防禦

管理者通路如下位址:

http://192.168.227.84/192.168.227.204/poc2.html

[理論-學習]Web安全-CSRF-基礎05一、概述二、漏洞防禦

 同時修改代碼為a标簽觸發。

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
        <a href="http://192.168.227.204:8009/login2.php" target="_blank" rel="external nofollow" >click me</a>
  </body>
</html>
           

管理者點選,成功繞過Referer驗證,觸發CSRF漏洞。 

[理論-學習]Web安全-CSRF-基礎05一、概述二、漏洞防禦
[理論-學習]Web安全-CSRF-基礎05一、概述二、漏洞防禦

繼續閱讀