一、基本概念及原理 什么是CSRF CSRF (Cross-Site Request Forgery) 是一种网络攻击,攻击者利用受害者的身份在受害者不知情的情况下执行未授权操作。这种攻击通常通过诱导受害者访问一个包含恶意请求的链接来实现,这些请求会被目标网站当作受害者的合法操作执行。 CSRF攻击原理 1、身份验证信任:用户在网站A上登录并具有有效的会话。 2、诱导访问恶意网站:攻击者诱导用户访问恶意网站B。 3、恶意请求:恶意网站B自动向网站A发送请求,利用用户的会话身份。 4、操作执行:网站A接收并执行请求,认为这是合法用户的操作。 二、常见攻击方式 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、用户交互确认:对敏感操作要求用户进行额外的确认,例如输入密码或验证码。 四、漏洞发现 要判断一个网站是否存在CSRF漏洞,可以通过以下步骤进行测试: 1、检查敏感操作:识别网站中的敏感操作(如转账、修改密码、提交表单等)。 2、请求结构分析:分析这些操作的HTTP请求,尤其是POST请求,查看是否包含CSRF Token或其他防御措施。 3、构造恶意请求:构造一个恶意请求,尝试在用户已登录的情况下,利用另一个网站发送这个请求。例如,可以创建一个简单的HTML表单或JavaScript脚本,在提交时模拟敏感操作。 4、测试恶意请求: 在浏览器中登录目标网站。 访问包含恶意请求的页面或脚本。 查看目标网站是否执行了恶意请求中的操作。 5、检查CSRF防御: 如果敏感请求中没有CSRF Token,或者Token验证不严格,可能存在CSRF漏洞。 验证SameSite Cookie属性是否设置正确。 检查服务器是否验证Referer和Origin头。 6、使用安全工具:使用专门的安全测试工具(如Burp Suite、OWASP ZAP等)进行自动化检测。 五、靶场演示 pikachu实战 打开pikachu靶场来到csrf(get),输入用户名和密码登录后发现修改密码出没有任何验证,可能存在csrf漏洞,利用csrf漏洞攻击修改用户资料(账户:Vince 密码:123456) 点击修改个人信息 点击submit,并且通过Burpsuite构造攻击,右键选择Engagement tools --> Generate CSRF Poc修改CSRF HTML 里面的信息 改成我们想要的。并且点击Test in browser复制url 并且在浏览器中打开(同一浏览器,新标签页) 关闭代理,查看用户修改后的内容 当用户点击了我们的恶意连接后,刷新一下你会发现用户信息改成我们想要的了,CSRF攻击成功