WEB安全 | CSRF的原理及防御

140 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

作者: 1e0n
免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责。

0x00 前言

之所以写CSRF是因为最近都是各种RCE,偶然看到CSRF,觉得大脑一片空白,于是赶紧恶补了一下,写下来也算是加深一下印象。话不多说,进入正题。WEB安全 | CSRF的原理及防御

1.CSRF的原理

2.CSRF简单实验

3.CSRF的防御

0x01 CSRF漏洞的原理

1.1 什么是CSRF?

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

通俗的来就是攻击者盗用正常用户的身份,以正常用户的名义执行攻击者想发送的恶意请求。

1.2 必要条件

CSRF也并不是不需要特定条件的,它的基本需要至要少满足以下两点。

1.正常用户登录受信任的网站,并生成Cookie。

2.在不登出受信任网站(或Cookie仍有效)时登录恶意网站。

1.3 CSRF的原理分析

WEB应用通过会话ID来认定访问请求是否来自正常用户,正是这样的认证机制存在漏洞。假设攻击者冒充或利用正常用户对WEB应用发起请求,WEB应用就没办法判断是否是正常用户。CSRF利用这个特性,通过各种手段,诱骗正常用户点击伪造的恶意请求。正常用户点击后携带自己的Cookie和会话ID在不知不觉中执行了攻击者的恶意请求。可能说着有点绕,画张图更加形象。
在这里插入图片描述
简单来说就是五个步骤:

1.正常用户用自己的合法身份登录WEB应用。

2.WEB应用认证成功后,向正常用户返回一个会话ID。

3.正常用户在会话ID和Cookie有效期内,访问了攻击者构造的恶意网站。

4.攻击者在WEB网页中嵌套恶意脚本(脚本的目的是发起恶意请求,如转账、发信等)。

5.恶意脚本在正常用户的浏览器上被执行,继而发送恶意请求到WEB应用。由于是正常用户发起的请求,所以请求会被成功发送并执行操作。

0x02 CSRF的简单实验

借用了某靶场环境,攻击手段切勿用于未授权真实环境。

下图为靶场环境,提示按钮里是多个账户密码。
在这里插入图片描述
随便登录一个,这里是模拟正常用户登录,也就是上面五个步骤的第一步和第二步。
在这里插入图片描述
这里可以修改个人信息,点进去尝试修改住址信息。这里需要抓个包查看发送的请求具体参数。
在这里插入图片描述
如图中burp抓到的get请求。攻击者提前构造好恶意脚本(执行恶意请求),比如把地址改成其他信息。再诱骗正常用户点击恶意脚本,恶意脚本就会在正常用户的浏览器上发送恶意请求成功后如下图。
在这里插入图片描述
PS:恶意请求的构造必须要知道完整的请求参数!

0x03 CSRF的防御

CSRF的防御主要有以下几点。

1.验证Referer字段

简单来说就是验证该网页是从哪个页面链接来的。

2.添加Token验证

这种方式是当前最常见的一种CSRF防御方式,在发送的请求字段里添加一个随机Token值,如果发送的请求里没有或值不正确,请求则无效。

3.二次验证

在转账等关键操作之前提供当前用户的密码或者验证码。这个已经很常见了,比如支付密码,手机验证码等。