面试官:网络安全了解多少,简单说说?(七)

474 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

写最前面

这段时间前前后后写了好几篇网络安全相关的文章,也算是炒炒冷饭,把自己之前学习的知识拿出来复习复习,也供自己和各位掘友开发过程中做个避坑参考,今天继续讲解一个出现频率较高的漏洞————文件上传漏洞。

文件上传漏洞

什么是文件上传漏洞?文件上传漏洞是指网站中存在文件上传相关功能的模块出现的漏洞,主要的方式是用户通过上传了一个可执行的恶意文件,并通过此文件对服务器进行恶意操作和破坏。

攻击方式

批注 2022-06-17 225028.png 如图,看起来攻击的方式很简单,而这个过程却变化多端。首先服务器上搭建了一个 WEB 网站,而网站上存在一个可以上传文件的模块,和许多系统一样,这个模块的主要功能是上传头像图片,然后,这个时候,黑客“不走寻常路”,通过各种手段,绕过上传限制,上传了一个非图片的恶意文件到服务器上,然后通过恶意文件,最终成功控制服务器,至此服务器彻底沦陷。

上传限制绕过

1、前端绕过

作为前端应该再熟悉不过了,当我们选择了上传文件的组件的时候,会弹出文件选择框,而选择框则限制了我们能选择的类型,这个时候我们看起来似乎被简简单单的前端就给拦住了,而换个角度仔细一想,前端如何上传文件到后端的呢?数据包,没错,前端的限制依然可以通过修改数据包来绕过,怎么操作呢?很简单,我们先将恶意文件修改为合法的后缀名,接着通过 bp 对文件上传过程中的数据包进行截取,然后修改文件后缀名,最后放行数据包,绕过成功

批注 2022-06-17 231416.png

2、服务器文件类型检测绕过

说完前端绕过,那么后端其实也存在类似的文件类型检测,后端主要通过检测 content-type 字段,来判断上传的文件的类型,那么既然它想检测这个字段,那我们也就故技重施,将绕过前端的方法再用一次,依然通过BP 截取上传文件的数据包,然后对数据包进行修改,将content-type字段修改为合法字段,绕过成功

批注 2022-06-17 231646.png

3、文件头绕过

通过上两种方式的简单绕过,可见,对于文件类型的判断,已经无法阻止黑客的进攻了,于是,第三种高级一些的方式上场了。这种验证方式不对后缀名、文件类型做判断了,已经被打怕了,这种方式看起来更加隐蔽,也更有效果,他直接对文件的文件头进行检测。计算机基础稍微扎实点的掘友应该都知道,我们图片、文本、视频等所有的文件,最终都是以二进制的方式存在,而对于这些文件的类型,其实在其相对应的代码中也存在相关的区分特征,也就是所谓的文件头,因此,对这些文件头就行检测,是一个比检测后缀名更加安全的方式。

而所谓“道高一尺,魔高一丈”,当黑客知道了这种高级的过滤方式后,那随着而来的也就免不了相关的绕过技术了,针对这种方式,我们可以将“木马病毒”相关的代码段和图片等合法的文件方式进行糅合,将其合成为一个合法的文件,然后上传,最终通过执行该合法文件,间接执行恶意代码,绕过成功!

批注 2022-06-17 233334.png

总结

文件上传作为 Web 应用系统中最最常见的功能,因此文件上传漏洞也算是 Web 安全漏洞中最普遍存在的漏洞了,而由于文件上传涉及到服务器文件系统,因此具有非常大的安全风险,作为开发人员,在对待文件上传相关功能的时候,应该对常见漏洞做好梳理,在开发期间一一“排雷”,最终才能够让文件上传功能得到更有效的保障,也能够让服务器避免遭受不可预料的恶意攻击!

往期好文推荐

面试官:说说从输入 URL 到页面显示到底经历了什么,体现一下你的知识广度

面试官:作为前端,服务器相关了解多少?

面试官:HTTPS 采用的是对称加密还是非对称加密?具体说说其加密过程

面试官:说说 Cookie 和 Token 的区别?

面试官:网络安全了解多少,简单说说?(一)

面试官:网络安全了解多少,简单说说?(二)

面试官:网络安全了解多少,简单说说?(三)

面试官:网络安全了解多少,简单说说?(四)

面试官:网络安全了解多少,简单说说?(五)

面试官:网络安全了解多少,简单说说?(六)

面试官:网络安全了解多少,简单说说?(七)

面试官:网络安全了解多少,简单说说?(八)

浅尝 | 从 0 到 1 Vue 组件库封装

面试官:这么简单的正则表达式都不会?

Webpack 打包类库踩坑

面试官:你就只会 npm run build 吗?(Webpack 配置 Vue+Ts)

面试官:连VuePress都没搭过还说开发过组件库?(VuePress 搭建)

面试官: 连 Vue 视图更新都不会写?(Vue视图更新原理【一】)

面试官: 能不能手写 Vue 响应式?(Vue2 响应式原理【完整版】)

面试官:能不能手写 Vue3 响应式(Vue3 原理解析之响应系统的实现)

JS 优雅之道(JS 代码优化小 Tip)

面试官:你真的会用 SVG 吗? (SVG 应用实战)

面试官:说一下这个Loading动画实现思路 (CSS3 实现 Loading 动画)

JS 扫盲题 ( 面试题梳理系列 (一))

面试官:你确定你说的防抖不是节流吗?( 面试题梳理系列 (二))

面试官:除了 HTTP,你还用过什么通信协议?(Websocket 在数字孪生中的应用)

面试官:你真的理解 Event Loop 吗?( JS 事件循环 )

面试官:v-for 中 key 为什么不能用 index,从原理层面聊聊?

面试官:vue-router 的 hash 与 history 哪个模式会刷新页面?

面试官:说说你平时用过的自适应方案(数字孪生可视化自适应方案)

面试官:说一下如何优化过渡动画(数字孪生可视化过渡动画)

写在最后

博主接下来将持续更新好文,欢迎关注博主哟!!
如果文章对您有帮助麻烦亲点赞、收藏 + 关注和博主一起成长哟!!❤️❤️❤️