CSRF漏洞

本文介绍了CSRF(跨站请求伪造)攻击的概念,它允许黑客伪装成用户执行恶意操作,如信息泄露和财产损失。挖掘CSRF漏洞通常关注后台功能模块和核心文件中的验证机制。示例代码展示了易受CSRF攻击的登录和注册流程。修复方案包括验证码、Referer验证和Token验证。通过这些措施,可以有效防止CSRF攻击,保护用户的安全。
摘要由CSDN通过智能技术生成

CSRF简介

CSRF(Cross-site request forgery)跨站请求伪造,也有人写出XSRF。黑客伪造用户木匾用户的HTTP请求。然后将这个HTTP请求发送给存在CSRF的网站,有CSRF的网站执行了伪造的HTTP请求,就引发了跨站请求伪造。

漏洞本质

攻击者盗用了你的身份信息,以你的名义发送恶意请求。
以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账等
造成的问题包括:个人隐私泄露以及财产安全。

在这里插入图片描述

挖掘思路

  • 后台功能模块:管理后台、会员中心、添加用户等
  • 被引用的核心文件里面有没有验证token和referer相关的代码
  • 没带token: 可以直接请求这个页面
  • 没带referer:返回相同的数据

CSRF攻击过程

conn.php

<?php
    $conn = mysql_connect("localhost","root","root");
    mysql_select_db("admin");
    mysql_query("SET NAMES GB2312");

login2.php

<?php
    header("Content-Type:text/html;charset=utf-8");
    if(!isset($_POST['submit'])){
        exit('非法访问');
    }
    $username = $_POST['username'];
    $password = $_POST['password'];
    include ('conn.php');
    $sql = "SELECT * FROM admin WHERE username='$username' and password='$password'";
    $result = mysql_query($sql) or die(mysql_error());
    if($row = mysql_fetch_array($result)){
        session_start();
        $_SESSION['username'] = $row['username'];
        echo $_SESSION['username']  . ",欢迎登录";
        echo '<a href="register.html">添加用户</a>>';
    }

register.php

<?php
    session_start();
    header("Content-Type:text/html;charset=utf-8");
    if(!isset($_SESSION['username'])){
        echo '<script>alert("请您登陆用户")</script>';
        exit;
    }
    $username = $_POST['username'];
    $password = $_POST['password'];
    include ('conn.php');
    $sql = "INSERT INTO admin(username,password) VALUES('$username','$password')";
    $res_insert = mysql_query($sql);
    if($res_insert){
        echo '<script>alert("注册成功")</script>';
    }else{
        echo '<script>alert("注册失败")</script>';
    }

login2.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户登录</title>
</head>
<body>
    <form action="login2.php" method="post">
        用户名:<input type="text" name="username"><br />
        密码:<input type="password" name="password"><br />
        <input type="submit" name="submit" value="点击登录">
    </form>
</body>
</html>

register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>会员注册</title>
</head>
<body>
    <form action="register.php" method="post">
        注册用户:<input type="text" name="username"><br />
        密码:<input type="password" name="password"><br />
        <input type="submit" name="submit" value="用户添加">
    </form>
</body>
</html>

首先正确登录进入页面,点击添加用户进入VIP注册页面
在这里插入图片描述
使用burpsuite抓包,并生成一个CSRF的poc代码
在这里插入图片描述
新建一个html文件,将代码粘贴进去
在这里插入图片描述
然后将该html文件拖入注册页面,现实中是发送该页面给受害者,点击submit request按钮,现实注册成功
在这里插入图片描述
查看数据库时,发现我们注册的用户名和密码都写进了数据库中
在这里插入图片描述

修复方案

  • 验证码
  • 添加 Referer 验证
  • 添加 Token 验证
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

平凡的学者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值