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 缓存欺骗
利用条件:
- 缓存通过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诱导用户访问:
<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验证绕过
- 使用伪协议置空Referer:
<iframe src="data:text/html,...">
- 通过meta标签:
<meta name="referer" content="never">
- 针对特定验证方式:
- 验证
*.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限制绕过
- 攻击本地:
http://127.0.0.1
http://localhost
http://0.0.0.0
http://[::]
- 使用
@符号:
http://example.com@127.0.0.1
- 短网址服务
- DNS解析服务:
http://127.0.0.1.xip.io
3.4.2 DNS重绑攻击
条件:
- 可控域名
- TTL=0
流程:
- 第一次解析返回外网IP通过验证
- 第二次解析返回内网IP
3.4.3 其他方法
- 文件上传处修改type
- 特殊标识符:
http://127。0。0。1
- 进制转换:
http://2130706433
- 更换协议:
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防御
- 过滤
\r\n等特殊字符 - 使用安全的HTTP头处理库
- 设置
X-XSS-Protection头
4.2 CSRF防御
- 使用CSRF Token
- 检查Referer头
- 关键操作使用二次验证
- 设置SameSite Cookie属性
4.3 SSRF防御
- 限制请求协议(仅HTTP/HTTPS)
- 禁止访问内网IP
- 使用白名单域名
- 禁用重定向
- 设置请求超时
- 验证响应内容类型