演示案例:
➢ WEB攻防-CSRF利用-原理&构造
➢ WEB攻防-CSRF防御-同源&Token
一、CSRF 跨站请求伪造核心本质:
利用用户当前已登录的身份,诱导用户在不知情的情况下发起请求。攻击者拿不到你的 Cookie,只是浏览器自动带上你的 Cookie 去访问目标网站。 问题根源在后端没有校验这个请求是不是用户主动发起,是网站设计缺陷,属于 Web 安全漏洞。


CSRF 原理:
1、用户登录 A 网站,浏览器保存 A 网站的 Cookie(登录凭证)
2、用户访问攻击者构造的恶意页面 B
3、恶意页面自动向 A 网站发起请求(修改密码、转账、改资料)
4、浏览器会自动附带 A 网站的 Cookie,服务器认为这是用户本人发 起的请求,执行操作
CSRF 功能点:
删除帐户
更改电子邮件
如果不需要旧密码,请更改密码
如果您的目标支持角色,请添加新管理员
更改正常信息,名字,姓氏等……
类似复选框的接收通知
更改个人资料图片/删除它
CSRF 绕过:
删除令牌并发送带有空白参数的请求
删除token参数
将请求从 POST 更改为 GET
更改正文编码
将 token 替换为随机值
删除裁判或在 CSRf 文件中使用此行|`
<metaname=”referrer”content=”no-referrer”>
使用另一个用户令牌
更改令牌中的一个字符,内容长度绕过
二、案例一:CSRF利用-无防护
案例系统有一个新增管理员的功能点,抓包生成csrfpoc

生成:BurpSuite->Engagementtools->GenerateCSRFPoc


利用:将文件放在自己的站点下,诱使受害者访问(或配合XSS触发访问)。这里我们放在csrf.com/1.html下

访问后显示success,说明成功添加

事实上也是成功了
检测:黑盒手工利用测试,白盒看代码检验(有无token,来源检验等)
三、案例-CSRF利用-同源策略防护
使用Referer或origin进行防护,禁止从其他路径发送请求

1、绕过1:规则匹配绕过问题(代码逻辑不严谨)
功能逻辑:<metaname=”referrer”content=”no-referrer”>
匹配机制:http://xx.xx.xx.xx/http://xx.xx.xx.xx
案例:Zblog(这个案例我们默认排除了Token的防护,因为我们制作csrf poc的数据包是受害者的,我们实战中做不到)
zblog管理员新增用户操作

生成csrf poc


把poc放在恶意网站目录下

目前登录了zblog后台且没创建用户

发现被拦截了,说明有防护!
第一种办法:直接抓包改包把Referer和origin改了,但是实战是不可能让受害者这样配合的所以,这一种就是为了了解防护原理。

把origin和Referer值改为host的值

成功添加!
第二种办法:置空原理


成功添加!
第三种方法:利用匹配机制:http://xx.xx.xx.xx/http://xx.xx.xx.xx,让Referer内含有网站域名,但是实战中你也不能让受害者去改Referer,所以就有两种方法,一种就是注册一个和目标网站域名相似的域名,第二种就是网站目录强制创建一个和目标域名一样文件夹,不演示了
2、绕过2:配合文件上传绕过(严谨使用同源绕过)
直接把恶意页面上传,受害者访问这个页面当然就是一个域下了
3、绕过3:配合存储XSS绕过(严谨使用同源绕过)
把自动提交表单和js注入,那当然就绕过了
四、案例-CSRF利用-Token校验防护

有Token基本可以跑了,后面复现就不写了
csrf_token 解决思路:
Cookie 是浏览器自动送过来的,坏人可以白嫖。
那我们再加一个暗号(csrf_token)。 ✅这个暗号浏览器不会自动送,必须页面自己手动带上。 ✅坏人的钓鱼网站拿不到这个暗号,就没法冒充你。
完整过程用故事讲:
你打开银行转账页面 银行服务器给你生成一个独有的暗号:<font style="color:rgb(0, 0, 0);background-color:rgba(0, 0, 0, 0);">aaa888</font>
服务器自己记下来:你的会话对应暗号<font style="color:rgb(0, 0, 0);background-color:rgba(0, 0, 0, 0);">aaa888</font>
把暗号塞到转账页面隐藏框里,你浏览器能看到这个暗号。
你自己转账 你点转账按钮,请求会同时送两样东西: ①浏览器自动带上你的登录 Cookie ②页面手动带上暗号<font style="color:rgb(0, 0, 0);background-color:rgba(0, 0, 0, 0);">csrf_token=aaa888</font>
服务器:有 Cookie,暗号也对上,允许转账。
坏人钓鱼网站发起攻击 坏人网站可以让浏览器自动带上你的 Cookie,但是!坏人拿不到你的暗号<font style="color:rgb(0, 0, 0);background-color:rgba(0, 0, 0, 0);">aaa888</font>(浏览器同源策略不让跨页面读取)。 坏人发出去的转账请求:只有 Cookie,没有正确暗号。
服务器一看:有 Cookie,但是暗号不对,直接拒绝,转账失败。
绕过1:将Token参数值复用(代码逻辑不严谨)
绕过2:将Token参数删除(代码逻辑不严谨)
绕过3:将Token参数值置空(代码逻辑不严谨)