一次任意文件上传漏洞的实战经历

本文最后更新于 天前,文中部分描述可能已经过时。

这一切都要从一只蝙蝠说起…

最近看到了一个站,是某高中的在线英语人机对话练习平台,目测了一下网站应该是外包的,因为首页上还有客服的 QQ 和定制的联系方式…

像这种看上去粗制滥造的小网站肯定一挖一堆洞…果然1小时后搞定

声明:本文作者没有利用该漏洞做出任何恶意或违法行为,也未触及任何数据,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担

文件上传漏洞是个啥?

正如这个漏洞的名称一样,攻击者利用网站本身的文件上传功能(比如图片上传、文档上传、头像上传等)上传可执行的脚本文件并被解释器正常解释,从而实现恶意代码的运行。

但是事情并没有你想的那么简单,因为几乎所有网站对上传文件的 MIME 类型或后缀名都有限制。换句话说,如果是上传图片的区域,一般不太可能让你正常地成功上传一个 Word 文档。

问题就在一些网站的文件上传功能虽做出了相应的限制,却不够严格、只是浮于表面。这就导致攻击者可以借助一些手段上传任意文件,并能够将这些文件传递给相应的解释器,就可以在网站服务器上执行任意脚本。

实战经历

首先显而易见这是个 ASP 站,随手搞一个404出来发现是 IIS 7.5

直接访问网站会自动跳转到 login.asp 页面,应该是平台的登录页面(忽略那个 Flash 提示

习惯性地把 login.asp 改成 index.asp 发现并没有强制跳回,而是出现了如下页面:

无意中点击右边的设置按钮就发现了一个上传背景图片的按钮…

至此,就已经找到了突破口

之后我先尝试强行丢了一个 ASP 脚本上去,提示文件类型不匹配,上传失败

于是打开 F12 开发者视图,在网络选项卡内发现了 upload.js,里面有相关的限制文件类型的代码

这么看来,应该是这部分代码阻止了 ASP 文件的上传,只要后端没有二次校验,劫持掉 upload.js 应该就没问题了

于是我复制了一份 upload.js,做出如下修改:

然后打开 Disable cache 并启动 Fiddler 开始抓包,强制将 upload.js 重定向到本地修改过的 upload.js

再次 F12 发现修改后的代码已经被加载,试着传了个 ASP 上去,成功~

这样就搞定了…

只要再传个一句话木马上去,就可以拿到 WebShell 啦(当然考虑到违法的问题我没有这样做

那么怎么修好它呢?

其实也非常的简单~

漏洞的实现无非就是限制不够严格,前端虽然对文件类型做了限制但是可以被轻易劫持,后端则没有任何的二次校验,就会导致这个问题。

后端的上传接口应做好过滤,只接受特定类型的文件,并且要考虑到方方面面的限制(要知道还有00截断这种骚操作),必要时可以采取对文件随机改名、将图片文件写入一个新的图片文件之类的措施。

毕竟你永远也不知道用户究竟会如何使用你的网站,稍不留神你的网站可能就成为了用户的图床2333333

一次任意文件上传漏洞的实战经历
本文作者
Hans362
最后更新
2020-02-29
许可协议
转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!
喜欢这篇文章吗?考虑支持一下作者吧~
爱发电 支付宝

评论

您所在的地区可能无法访问 Disqus 评论系统,请切换网络环境再尝试。