CSRF及SSRF
字数 2103 2025-08-11 08:36:09
CSRF与SSRF漏洞详解与防御指南
1. CSRF跨站请求伪造
1.1 CSRF基本概念
CSRF(Cross-site Request Forgery)是一种利用用户已登录状态,伪造合法用户请求的攻击方式。攻击者诱导受害者访问恶意构造的链接或页面,利用受害者在目标网站的登录状态执行非授权操作。
1.2 CSRF攻击流程
- 用户登录目标网站,生成本地cookie
- 用户保持登录状态时访问攻击者构造的恶意网站
- 恶意网站触发对目标网站的请求
- 目标网站验证cookie后执行请求
注意:即使关闭目标网站,cookie可能不会立即过期,仍存在风险。
1.3 CSRF利用条件
- 用户已成功登录目标系统
- 目标系统存在可执行的特权操作
- 新请求提交无需重新验证身份
- 攻击者能诱导用户访问恶意URL
1.4 CSRF危害
- 以受害者名义发送邮件/消息
- 盗取账号密码
- 进行购买等金融操作
- 修改账户信息
- 危害程度取决于受害者账户权限
1.5 CSRF分类
1.5.1 GET型CSRF
通过URL参数直接传递恶意请求:
/user.php?id=1&password=123456
攻击者构造恶意链接诱导用户点击:
<a href="http://example.com/user.php?id=1&password=hacker">点击领奖</a>
1.5.2 POST型CSRF
通过伪造表单提交POST请求:
<form action="http://example.com/update" method="POST">
<input type="hidden" name="email" value="hacker@example.com">
<input type="submit" value="提交">
</form>
1.6 CSRF防御措施
1.6.1 验证HTTP Referer字段
检查请求来源是否为合法域名,拒绝非预期来源的请求。
1.6.2 添加并验证Token
- 在表单中添加随机生成的token
- 服务器验证token有效性
- token不应存在于cookie中
1.6.3 自定义HTTP头属性
- 将token放入自定义HTTP头(X-CSRF-Token)
- 使用XMLHttpRequest发送请求
- 局限性:不适用于所有请求场景
1.7 CSRF漏洞挖掘
- 检查正常请求是否缺少Referer和token
- 移除Referer后测试请求是否仍然有效
- 使用专业工具(CSRFTester等)检测
2. SSRF服务器端请求伪造
2.1 SSRF基本概念
SSRF(Server-Side Request Forgery)是一种由服务端发起恶意请求的漏洞。攻击者利用服务器作为代理,访问内网资源或发起其他攻击。
2.2 SSRF攻击流程
- 攻击者向服务器发送构造的请求
- 服务器向目标发起请求
- 目标响应服务器
- 服务器将响应返回给攻击者
2.3 SSRF危害
- 内网端口扫描,获取服务banner
- 攻击内网应用程序
- 内网Web应用指纹识别
- 利用已知漏洞攻击内外网应用
- 读取本地文件(file协议)
- 作为跳板发起进一步攻击
2.4 SSRF利用场景
2.4.1 常见功能点
- 网页分享功能
- 转码服务(移动端适配)
- 在线翻译
- 图片加载/下载
- 收藏功能
- 未公开的API调用
2.4.2 关键词挖掘
关注包含以下参数的URL:
share, wap, url, link, src, source, target, u, display, sourceURl, imageURL, domain
2.5 SSRF伪协议利用
2.5.1 常见伪协议
file:///- 读取文件系统dict://- 字典协议,获取服务信息sftp://- SSH文件传输ldap://- 目录访问协议tftp://- 简单文件传输gopher://- 分布式文档传递
2.5.2 协议利用示例
-
端口扫描:
http://victim.com/ssrf.php?url=http://192.168.1.1:3306 -
文件读取(file协议):
http://victim.com/ssrf.php?url=file:///etc/passwd -
服务探测(dict协议):
http://victim.com/ssrf.php?url=dict://192.168.1.1:3306/info -
Web指纹识别:
http://victim.com/ssrf.php?url=http://192.168.1.1/phpMyAdmin
2.6 SSRF绕过技术
-
使用@绕过域名限制:
http://allowed.com@malicious.com/ -
添加端口绕过:
http://malicious.com:80/ -
IPv6格式绕过:
http://[::192.168.1.1]/ -
特殊字符绕过:
http://192。168。1。1/ -
编码绕过:
http://c0.a8.01.01 (192.168.1.1的十六进制)
2.7 SSRF防御措施
- 限制请求端口(仅允许HTTP/HTTPS)
- 过滤返回信息,验证响应格式
- 禁用不必要的服务器端口
- 限制内网IP访问
- 禁用危险协议(FTP匿名访问等)
- 使用白名单校验请求目标
2.8 SSRF高级利用
SSRF可与其他漏洞结合利用,如:
- Redis未授权访问
- Struts2漏洞利用
- 内网SQL注入
- 通过gopher协议发送其他协议数据包
3. 总结对比
| 特性 | CSRF | SSRF |
|---|---|---|
| 攻击方向 | 客户端→服务器 | 服务器→其他服务器/资源 |
| 利用条件 | 用户已登录状态 | 服务器存在请求外部资源功能 |
| 主要危害 | 用户权限滥用 | 内网渗透、信息泄露 |
| 防御重点 | Token验证、Referer检查 | 请求目标限制、协议过滤 |
| 典型场景 | 修改密码、转账等操作 | 内网扫描、文件读取、服务探测 |
通过全面理解CSRF和SSRF的原理、利用方式及防御措施,可以有效提升Web应用的安全性,防止此类漏洞被恶意利用。