CSRF漏洞靶场笔记

简介

CSRF(Cross-site request forgery)全称为跨转请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗器其点击恶意链接或访问包含攻击代码的网页,在受害人不知情的情况下以受害人身份享服务器发送请求(如转账、改密等)。

由于已经获取了受害者的身份认证信息,在服务器看来,所有的请求均为合法正常的

CSRF攻击步骤

下面是以修改密码为例的简略流程图

流程图

  1. 首先,受害者登录服务器网站
  2. 服务器存储受害者的身份认证信息
  3. 攻击者向受害者发送修改密码的url
  4. 受害者只要点击url便会在不知情的情况下修改密码
  5. 攻击者经过一段时间后使用更改后的密码进行登录

CSRF靶场记录

本次使用的靶场为Pikachu漏洞靶场

以kobe用户作为受害者,以vince用户作为攻击者

CSRF(get)

  • 首先登录vince账号

  • 进入修改个人信息页面,进行修改并抓包
    修改信息
    抓包
    发现所有信息均在url中,同时也没有任何防护措施

  • 复制url,使用kobe用户访问此url

192.168.58.141/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=18626545453&add=chain&email=vince%40pikachu.com&submit=submit

完成攻击
能够发现所有的个人信息均变为vince的信息,即成功进行了CSRF攻击

CSRF(post)

步骤与get型前两步相同
抓包
抓包后发现用户信息更改为post请求提交,那么便不能像get型一样复制url
此时,我们可以通过构造恶意站点,将POST请求隐藏在站点中的表单中,然后用户进行点击,当用户点击后触发表单,数据自然就POST到存在CSRF漏洞的网站,用户的信息则同样被恶意修改。
因此我们修改信息后,用burpsuite中自带的CSRF网页生成器,生成html页面
修改信息

生成CSRF Poc
在kobe登录的状态下访问生成的html页面并提交后,信息同样会被修改
攻击成功

CSRF(token验证)

这次在每次请求之前都加入了一个随机的token值
token
token为用户身份验证令牌,其本质是服务器经过加密生成的一串字符串,用来验证用户的身份信息

  • 在源码中看到,每次点击提交修改信息后,服务器都会将get方式接收的token和session中的token进行对比,只有相同才会修改信息
  • 并且在每次提交后,都会调用set_token()函数生成新的token,将其返回值html表单中隐藏
if(isset($_GET['submit'])){
    if($_GET['sex']!=null && $_GET['phonenum']!=null && $_GET['add']!=null && $_GET['email']!=null && $_GET['token']==$_SESSION['token']){
        //转义
        $getdata=escape($link, $_GET);
        $query="update member set sex='{$getdata['sex']}',phonenum='{$getdata['phonenum']}',address='{$getdata['add']}',email='{$getdata['email']}' where username='{$_SESSION['csrf']['username']}'";
        $result=execute($link, $query);
        //没有修改,点击提交,也算修改成功
        if(mysqli_affected_rows($link)==1 || mysqli_affected_rows($link)==0){
            header("location:token_get.php");
        }else {
            $html1.="<p>修改失败,请重新登录</p>";

        }
    }
}
//生成token
set_token();
<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后,黑客由于无法得到用户当前的token,从而无法进行CSRF攻击

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

矜庄寂寥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值