从一开始的网络攻防(八):CSRF

发布于:2025-07-28 ⋅ 阅读:(15) ⋅ 点赞:(0)

概念

CSRF(Cross Site Request Forgery),跨站请求伪造

攻击者盗用了你的身份,以你的名义发送恶意请求

CSRF是跨站请求伪造,不攻击网站服务器,而是冒充用户在站内的正常操作

通常由于服务端没有对请求头做严格过滤引起的

CSRF会造成密码重置,用户伪造等问题,可能引发严重后果

攻击条件

天时

www.xxx.com这个网站在用户修改个人的信息时没有过多的校验,导致这个请求容易被伪造

因此,我们判断一个网站是否存在CSRF漏洞,其实就是判断其对关键信息(比如密码等敏感信息)的操作(增删改)是否容易被伪造

地利

小绿点击了小黑发给的链接

人和

并且这个时候小绿刚好登录在购物网上

高级方式

当然,如果小黑事先在xxx网的首页如果发现了一个xss漏洞,则小黑可能会这样做:

  1. 欺骗小绿访问埋伏了XSS脚本(盗取cookie的脚本)的页面
  2. 小绿中招,小黑拿到小绿的cookie
  3. 然后小黑顺利登录到小绿的后台,小黑自己修改小绿的相关信息

CSRF与XSS的区别

  • CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限
  • XSS是直接盗取到了用户的权限,然后实施破坏

CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用

在2017年发布的新版OWASP Top10中,CSRF排名第8

CSRF挖掘

CSRF存在特征

数据包无token和referer验证

CSRF存在功能点

寻找增删改的地方,构造HTML,修改HTML表单中某些参数,使用浏览器打开该 HTML,点击提交表单后查看响应结果,看该操作是否成功执行

挖掘流程

在网站寻找增删改的地方,抓包查看数据包功能

自己搭建网站,通过构造HTML表单参数,利用bp等生成poc,看是否能够对对方信息进行更改

漏洞绕过

token绕过

当随机生成token时,可以通过xss获取当前界面的token,与此同时构造恶意链接

Referer绕过

Referer:发出请求的网页的绝对地址或部分地址,通过该字段,我们可以检测访客是从哪里来的

绕过方式大概有以下几种:

  • 部分站点防盗链限制允许referer为空
  • 通过设置referer和host主机为同域ip,可以将ip设置为文件名称进行绕过
  • 在Referer字段的域名前面增加随机的a-z和0-9
第二种方法详解

如果你的ip是192.168.3.9,那么referer就是192.16.3.9/你访问的文件名

进行绕过:需要保证referer和host主机中ip或者域名一致

具体方法:修改文件名和host主机保持一致

示例1

host: www.runoob.com

可以设置poc文件名称为:runoob.php

则referer为127.0.0.1/runoob.php

示例2

host: 192.168.37.59

poc文件名称为:192.168.37.59.php

CSRF工具

LazyCSRF

用于生成CSRF的PoC

https://github.com/tkmru/lazyCSRF

实战

在DVWA进行实验

DVWA - Low

没有任何防御措施

攻击步骤
1. 抓包修改数据包

这里修改密码时看到url直接包含了修改密码的内容,所以可以直接利用这个链接

http://192.168.8.131/DVWA/vulnerabilities/csrf/?password_new=654321&password_conf=654321&Change=Change#

此为天时

2. 将修改过的数据包做成一个链接

修改url,使请求能实现将密码修改为admin

http://192.168.8.131/DVWA/vulnerabilities/csrf/?password_new=admin&password_conf=admin&Change=Change#

链接比较长的时候,可以改为短链接,不容易看出来

https://za8.cc/yaQv6n

3. 哄骗用户点击重新发送

地利与人和要求此时用户正好登录在网站上,与此同时点下我们构造的链接

所以要做一个欺骗性的网页,比如

用户点击后就会修改掉admin的密码

注意

现实攻击场景下,这种方法需要事先在公网上传一个攻击页面,然后诱骗受害者去访问,真正能够在受害者不知情的情况下完成CSRF攻击。

DVWA - Mid

加入了referer的验证,构造链接的方法无法生效

攻击步骤

http://192.168.8.134:80/DVWA/vulnerabilities/csrf/?password_new=12345&password_conf=12345&Change=Change

直接访问无法修改

可以通过设置referer和host主机为同域ip,可以将ip设置为文件名称进行绕过,这里将将Referer修改为127.0.0.1/192.168.8.134.php即可成功完成修改动作

DVWA - High

加入token

High级别的代码加入了Anti-CSRF token机制,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。

对于user_token,而且每次修改密码,它都是变化的。因此,使用low和Medium的方法无效

  1. 绕过方式利用xss绕过
  2. 用xss脚本获得用户的token
  3. 用token进行修改密码操作
攻击步骤
1. 写入存储型xss获取token

DVWA调成Low,先写入xss获取到token

<iframe src="../csrf" onload="alert(frames[0].document.getElementsByName('user_token')[0].value)"/>

再将DVWA调到High,回到存储型xss,拿到token5ed93b33c149673cee4430f738962995

2. 构造链接,哄骗用户点击

这里我们直接用hackbar简单利用,将密码改成admin

http://192.168.8.131/DVWA/vulnerabilities/csrf/?password_new=admin&password_conf=admin&Change=Change&user_token=095b60f0f5fefd20225356e289b27274#

  • 每次访问改密页面时,服务器会返回一个随机的token,所以拿到token直接提交就可以了,不用再回到改密界面,这里因为重新去了改密页面,所以token变了
  • 要设置referer为DWVA的URL

防御

  • 对敏感信息的操作增加安全的token
  • 对敏感信息的操作增加安全的验证码
  • 检测Referer字段
  • 对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等

网站公告

今日签到

点亮在社区的每一天
去签到