前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pikachu漏洞靶场系列之CSRF

Pikachu漏洞靶场系列之CSRF

作者头像
Naraku
发布2021-07-29 11:03:09
1.6K0
发布2021-07-29 11:03:09
举报
文章被收录于专栏:Naraku的专栏Naraku的专栏

概述

Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也被称为one click攻击。

CSRF(GET)

  • 首先登录任一账号vince/allen/kobe/grady/kevin/lucy/lili,密码均为123456
  • F12打开控制台,切换到Network标签,并尝试修改个人信息
  • 这里将vince用户的住址修改为Earth,在控制台可以看到请求URL
代码语言:javascript
复制
http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=18626545453&add=Earth&email=vince%40pikachu.com&submit=submit
csrf-1
csrf-1
  • 黑客可以根据URL的构造形式,伪造URL并诱骗用户点击,从而实现CSRF攻击。例如这里黑客可以伪造URL把目标用户邮箱修改为黑客邮箱
代码语言:javascript
复制
http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=18626545453&add=Earth&email=Hacker%40pikachu.com&submit=submit
  • 将该URL发送给用户,若用户在登录状态下点击黑客伪造的URL,则用户信息会被更改
csrf-2
csrf-2

CSRF(POST)

  • 先将任一用户的信息进行修改,通过控制台查看数据包。这里将vince用户的住址修改成Beijing
csrf-3
csrf-3
  • 可以看到,请求通过POST方式提交,从而无法像前面一样通过伪造URL来进行攻击,那么这个漏洞应该怎么利用呢?
  • 此时,黑客可以通过构造恶意站点,将POST请求隐藏在站点中的表单中,然后诱骗用户进行点击,当用户点击后触发表单,数据自然就POST到存在CSRF漏洞的网站,用户的信息则被恶意修改。
  • 这里需要借助CSRFTester软件进行抓包。先打开CSRFTester,用法和Brup差不多,不过这里需要配置的监听端口为8008。点击Start Recording开启监听后修改用户信息。提交表单后,可以看到已经抓到这个POST请求
csrf-4
csrf-4
  • 将其它多余的请求删除,然后点击Generate HTML生成恶意网页index.html,使用编辑器将其打开。这里可以直接修改其中的数据,依然将邮箱修改为黑客邮箱Hacker@pikachu.com,另外还需要添加一个提交按钮。修改完成后,部署到黑客站点,这里我放到Pikachu/vul/csrf/目录下
csrf-5
csrf-5
  • 最后,当用户在登录状态下,访问黑客站点http://127.0.0.1/pikachu/vul/csrf/index.html并点击提交按钮,那么其个人信息将会被恶意修改,可以在控制台中看到点击按钮后触发的POST请求
csrf-6
csrf-6

Token验证

原理:CSRF的主要问题是敏感操作的链接容易被伪造。而只要在每次请求时都增加一个随机码Token,后台每次都对这个随机码进行验证,则可以有效地防止CSRF

  • 在源码token_get_edit.php中看到,每次刷新页面,都会调用set_token()函数,该函数会把SESSIONToken销毁,然后生成一个新的Token,并将这个Token传到前端表单中
代码语言:javascript
复制
<div id="per_info">
   <form method="get">
   <h1 class="per_title">hello,{$name},欢迎来到个人会员中心 | <a style="color:bule;" href="token_get.php?logout=1">退出登录</a></h1>
   <p class="per_name">姓名:{$name}</p>
   <p class="per_sex">性别:<input type="text" name="sex" value="{$sex}"/></p>
   <p class="per_phone">手机:<input class="phonenum" type="text" name="phonenum" value="{$phonenum}"/></p>    
   <p class="per_add">住址:<input class="add" type="text" name="add" value="{$add}"/></p> 
   <p class="per_email">邮箱:<input class="email" type="text" name="email" value="{$email}"/></p>
       
   <input type="hidden" name="token" value="{$_SESSION['token']}" />
       
   <input class="sub" type="submit" name="submit" value="submit"/>
   </form>
</div>
  • 而当每次提交表单时,这个Token值就会传到后台与SESSION中的Token进行比较,若不相等,此次表单则提交失败。所以黑客由于不能得知用户当前的Token值,从而无法进行CSRF攻击。

其它防范措施

  • 增加验证码:一般用于防止暴力破解,也可以用在其它重要信息操作的表单中
  • 安全的会话管理:
    • 不要在客户端保存敏感信息,如身份认证信息
    • 设置会话过期机制,如15分钟内无操作则自动登录超时
  • 访问控制安全管理:
    • 敏感信息修改时需要对身份进行二次认证,如修改密码时,需要校验旧密码
    • 敏感信息的修改使用POST,而不是GET
    • 通过HTTP头部中的Referer来限制原页面

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020 年 02 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • CSRF(GET)
  • CSRF(POST)
  • Token验证
  • 其它防范措施
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档