pikachu漏洞练习第三章节CSRF Token练习收获

Token是如何防止CSRF的?


CSRF的主要问题是敏感操作的链接容易被伪造,那么如何让这个链接不容易被伪造?
每次请求,都增加一个随机码(需要够随机,不容易伪造),后台每次对这个随机码进行验证。

CSRF攻击防范措施


增加token验证(常用的做法):

1,对关键操作增加token参数,token值必须随机,每次都不一样,关于安全的会话管理(避免会话被利用):
1,不要在客户端端保存敏感信息(比如身份认证信息);
2,测试直接关闭,退出时,的会话过期机制;
3,设置会话过期机制,比如15分钟内无操作,则自动登录超时

访问控制安全管理:


1,敏感信息的修改时需要对身份进行二次认证,比如修改账号时,需要判断旧密码;
2,敏感信息的修改使用post,而不是get;
3,通过http 头部中的referer来限制原页面

增加验证码


一般用在登录(防暴力破解),也可以用在其他重要信息操作的表单中(需要考虑可用性

练习部分

打开CSRF Token部分,同时打开brupsite抓包,网页修改个人信息提交后查看burpsite抓包文件。

查看burpsite的抓包信息,可见相比之前的CSRFGET,现在的请求信息中多了token信息。

我们回到网页打开f12控制台寻找一下token来自哪里,网页进入修改个人信息的页面,用控制台左上角选择工具选中各输入框,在控制台中找到form表单,里面有一个hidden类型的输入框有token的具体数值。

因为有token拦路,每一次访问后后台的token都会变化,想像之前一样直接把代码截取出来写出url地址肯定不行。要获取到token,我们先在burpsite,extender中的bapp store中找到csrf token tracker插件安装。

在插件中勾选sync,在下方空白处输入host,127.0.0.1;输入名称,token。后面的值一栏先暂时不管。

回到porxy的http历史记录,找到发送修改个人信息的get请求,右键发送到repeater。

在repeater中修改要改的具体数值(这里把phonenum改为了9768),点击发送。

点击左上角出现的跟随重定向。

在右边的响应中可以看到我们已经成功的把phonenum改为了9768。

回到网页刷新一下,可见phonenum改为了9768。

成功的绕过了token利用了csrf漏洞。

### Pikachu 靶场 CSRF Token 解决方案 在处理Pikachu靶场中的CSRF攻击防护时,可以通过引入CSRF令牌机制来增强安全性而不依赖于蓝图结构[^1]。具体实现方式如下: #### 实现CSRF保护的方法 服务器端每次生成页面时都会创建一个唯一的随机字符串作为CSRF令牌,并将其嵌入到HTML表单中作为一个隐藏字段。当客户端提交请求时,这个令牌会被一同发送回服务器进行验证。 ```html <form action="/submit_form" method="POST"> <!-- 其他输入框 --> <input type="hidden" name="csrf_token" value="{{ csrf_token }}"> <button type="submit">Submit</button> </form> ``` 为了确保每个会话都有独立的CSRF令牌,在用户登录成功后可以立即设置该令牌并存储在用户的session数据里[^2]。 ```python import uuid from flask import session, request @app.route('/login', methods=['POST']) def login(): # 登录逻辑... if user_authenticated: csrf_token = str(uuid.uuid4()) session['csrf_token'] = csrf_token return redirect(url_for('index')) ``` 对于接收到的每一个POST请求,都需要检查其中携带的`csrf_token`参数是否与当前会话保存的一致。 ```python @app.before_request def check_csrf(): if request.method == "POST": form_token = request.form.get('csrf_token') session_token = session.pop('csrf_token', None) if not session_token or session_token != form_token: abort(403) # Forbidden access ``` 通过上述方法可以在不使用蓝图的情况下有效防止CSRF攻击,同时保持应用的安全性和功能性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值