CSRF及SSRF
字数 2103 2025-08-11 08:36:09

CSRF与SSRF漏洞详解与防御指南

1. CSRF跨站请求伪造

1.1 CSRF基本概念

CSRF(Cross-site Request Forgery)是一种利用用户已登录状态,伪造合法用户请求的攻击方式。攻击者诱导受害者访问恶意构造的链接或页面,利用受害者在目标网站的登录状态执行非授权操作。

1.2 CSRF攻击流程

  1. 用户登录目标网站,生成本地cookie
  2. 用户保持登录状态时访问攻击者构造的恶意网站
  3. 恶意网站触发对目标网站的请求
  4. 目标网站验证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漏洞挖掘

  1. 检查正常请求是否缺少Referer和token
  2. 移除Referer后测试请求是否仍然有效
  3. 使用专业工具(CSRFTester等)检测

2. SSRF服务器端请求伪造

2.1 SSRF基本概念

SSRF(Server-Side Request Forgery)是一种由服务端发起恶意请求的漏洞。攻击者利用服务器作为代理,访问内网资源或发起其他攻击。

2.2 SSRF攻击流程

  1. 攻击者向服务器发送构造的请求
  2. 服务器向目标发起请求
  3. 目标响应服务器
  4. 服务器将响应返回给攻击者

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 协议利用示例

  1. 端口扫描

    http://victim.com/ssrf.php?url=http://192.168.1.1:3306
    
  2. 文件读取(file协议)

    http://victim.com/ssrf.php?url=file:///etc/passwd
    
  3. 服务探测(dict协议)

    http://victim.com/ssrf.php?url=dict://192.168.1.1:3306/info
    
  4. Web指纹识别

    http://victim.com/ssrf.php?url=http://192.168.1.1/phpMyAdmin
    

2.6 SSRF绕过技术

  1. 使用@绕过域名限制

    http://allowed.com@malicious.com/
    
  2. 添加端口绕过

    http://malicious.com:80/
    
  3. IPv6格式绕过

    http://[::192.168.1.1]/
    
  4. 特殊字符绕过

    http://192。168。1。1/
    
  5. 编码绕过

    http://c0.a8.01.01 (192.168.1.1的十六进制)
    

2.7 SSRF防御措施

  1. 限制请求端口(仅允许HTTP/HTTPS)
  2. 过滤返回信息,验证响应格式
  3. 禁用不必要的服务器端口
  4. 限制内网IP访问
  5. 禁用危险协议(FTP匿名访问等)
  6. 使用白名单校验请求目标

2.8 SSRF高级利用

SSRF可与其他漏洞结合利用,如:

  • Redis未授权访问
  • Struts2漏洞利用
  • 内网SQL注入
  • 通过gopher协议发送其他协议数据包

3. 总结对比

特性 CSRF SSRF
攻击方向 客户端→服务器 服务器→其他服务器/资源
利用条件 用户已登录状态 服务器存在请求外部资源功能
主要危害 用户权限滥用 内网渗透、信息泄露
防御重点 Token验证、Referer检查 请求目标限制、协议过滤
典型场景 修改密码、转账等操作 内网扫描、文件读取、服务探测

通过全面理解CSRF和SSRF的原理、利用方式及防御措施,可以有效提升Web应用的安全性,防止此类漏洞被恶意利用。

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参数直接传递恶意请求: 攻击者构造恶意链接诱导用户点击: 1.5.2 POST型CSRF 通过伪造表单提交POST请求: 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: 2.5 SSRF伪协议利用 2.5.1 常见伪协议 file:/// - 读取文件系统 dict:// - 字典协议,获取服务信息 sftp:// - SSH文件传输 ldap:// - 目录访问协议 tftp:// - 简单文件传输 gopher:// - 分布式文档传递 2.5.2 协议利用示例 端口扫描 : 文件读取(file协议) : 服务探测(dict协议) : Web指纹识别 : 2.6 SSRF绕过技术 使用@绕过域名限制 : 添加端口绕过 : IPv6格式绕过 : 特殊字符绕过 : 编码绕过 : 2.7 SSRF防御措施 限制请求端口(仅允许HTTP/HTTPS) 过滤返回信息,验证响应格式 禁用不必要的服务器端口 限制内网IP访问 禁用危险协议(FTP匿名访问等) 使用白名单校验请求目标 2.8 SSRF高级利用 SSRF可与其他漏洞结合利用,如: Redis未授权访问 Struts2漏洞利用 内网SQL注入 通过gopher协议发送其他协议数据包 3. 总结对比 | 特性 | CSRF | SSRF | |------------|------------------------------|------------------------------| | 攻击方向 | 客户端→服务器 | 服务器→其他服务器/资源 | | 利用条件 | 用户已登录状态 | 服务器存在请求外部资源功能 | | 主要危害 | 用户权限滥用 | 内网渗透、信息泄露 | | 防御重点 | Token验证、Referer检查 | 请求目标限制、协议过滤 | | 典型场景 | 修改密码、转账等操作 | 内网扫描、文件读取、服务探测 | 通过全面理解CSRF和SSRF的原理、利用方式及防御措施,可以有效提升Web应用的安全性,防止此类漏洞被恶意利用。