在当今复杂的网络安全环境中,跨站请求伪造(CSRF)漏洞因其隐蔽性和潜在的巨大危害,成为渗透测试人员和安全研究人员必须掌握的核心技能之一。与广为人知的XSS攻击不同,CSRF攻击不直接窃取用户数据,而是利用用户已登录的身份,在用户不知情的情况下执行非预期的操作,如修改密码、转账、添加管理员账户等。

本文将系统性地介绍CSRF漏洞的手工测试方法,涵盖GET/POST请求的测试、Referer绕过技巧以及与XSS结合的高级利用方式,帮助你从零开始掌握这一关键安全测试技术。
什么是CSRF?——理解攻击的本质
CSRF(Cross-site Request Forgery),即跨站请求伪造,是一种利用用户在受信任网站上的登录状态,诱导其浏览器向该网站发送恶意请求的攻击方式。
CSRF攻击的两个必要条件:
用户已登录目标网站,并在浏览器中保留了有效的会话凭证(如Cookie)。
用户访问了攻击者构造的恶意页面,该页面自动向目标网站发起请求。
📌 关键区别:XSS是“盗用身份获取信息”,而CSRF是“冒用身份执行操作”。
CSRF手工测试全流程:从发现到验证
第一步:识别可测试的敏感功能点
在进行手工测试前,首先要确定哪些功能可能受到CSRF影响。重点关注以下操作:
修改密码、邮箱、手机号
添加/删除用户或管理员
转账、购买商品、修改订单
修改系统配置或权限设置
这些功能一旦被伪造,将造成严重的安全后果。
第二步:GET型CSRF测试(最简单)
如果目标功能通过GET请求完成(如?action=delete&id=1),测试最为直接。
测试步骤:
使用合法账户登录目标网站。
找到目标功能的请求URL,例如:
将该URL复制到未登录状态的浏览器中访问,确认无权限。
在保持登录状态的浏览器中,新建一个HTML文件或直接在地址栏访问该URL。
如果请求成功执行(如用户被删除),则存在无防护的GET型CSRF漏洞。
防御建议:
敏感操作应使用POST请求。
使用一次性Token(Anti-CSRF Token)进行验证。
第三步:POST型CSRF测试(需构造表单)
大多数现代应用已将敏感操作改为POST请求,因此需要手动构造HTML表单来模拟攻击。
手工构造CSRF POC(Proof of Concept):
测试方法:
将上述代码保存为
csrf.html。使用目标账户登录目标网站。
在同一浏览器中打开
csrf.html,点击提交按钮。检查密码是否被修改。若成功,则存在无防护的POST型CSRF漏洞。
🔍 提示:可使用Burp Suite的“Engagement tools” → “Generate CSRF PoC”功能自动生成表单,提高效率。
第四步:绕过Referer检查(中级技巧)
部分网站通过检查HTTP Referer头来防御CSRF,仅允许来自本站的请求。
绕过方法:文件名伪装法
如果服务器使用类似以下逻辑验证Referer:
我们可以将攻击页面命名为与目标域名相同的名称:
将
csrf.html重命名为www.example.com.html。将该文件上传至可访问的服务器(如攻击者网站)。
构造链接:
http://attacker.com/www.example.com.html诱导用户点击,由于Referer为
http://attacker.com/www.example.com.html,包含example.com,绕过检测。
⚠️ 注意:现代浏览器对本地文件的Referer处理不同,建议将文件部署在Web服务器上测试。
第五步:绕过Token防护(高级利用)
最有效的CSRF防御是使用一次性Token(如user_token=abc123)。但若目标站点存在XSS漏洞,仍可绕过。
利用XSS + CSRF组合攻击
攻击思路:利用XSS漏洞读取页面中的CSRF Token,再动态提交表单。
测试步骤:
确保目标页面存在XSS漏洞(可注入JS)。
将上述代码注入目标页面(如通过评论、消息等)。
当管理员访问该页面时,脚本自动获取Token并提交表单,完成CSRF攻击。
✅ 结论:即使有Token防护,若存在XSS,CSRF仍可被利用。
如何防御CSRF?
| 防御措施 | 说明 |
|---|---|
| CSRF Token | 每次请求生成唯一Token,服务器验证 |
| SameSite Cookie | 设置SameSite=Strict/Lax,限制跨站Cookie发送 |
| 验证Referer | 检查请求来源是否为本站 |
| 双重提交Cookie | 将Token同时放在Cookie和请求参数中 |
CSRF漏洞的手工测试是安全测试中的基础但关键环节。通过本文介绍的四种测试方法(GET、POST、Referer绕过、Token绕过),你可以系统性地评估Web应用的安全性。
🔐 安全建议:
开发者应默认对所有敏感操作启用CSRF Token。
安全人员应结合XSS、点击劫持等漏洞进行组合测试。
用户应避免在多个标签页中同时登录敏感账户。
掌握CSRF手工测试方法,不仅能提升你的渗透测试能力,更能帮助你构建更安全的网络环境。





















