文件上传漏洞危害
一个看似人畜无害的文件危害图片上传框,可能让整台服务器沦为别人的上传肉鸡。2019年,漏洞某知名云服务商曝出严重漏洞,文件危害攻击者仅通过上传一个伪装成JPG的上传PHP文件,便拿到了服务器最高权限。漏洞那不是文件危害什么高深莫测的零日漏洞,就是上传最普通的文件上传绕过。
上传功能的漏洞本质是让用户把文件从本地搬到服务器。问题在于,文件危害服务器收到文件后,上传往往只检查了文件后缀和MIME类型,漏洞对文件内容本身毫无戒心。文件危害攻击者把PHP代码藏进图片的上传EXIF信息里,或者干脆改个扩展名,漏洞就能骗过那些粗心大意的校验逻辑。
我见过太多开发者的天真想法——"我们只允许上传图片,设置了白名单"。可白名单真的安全吗?图片马就是绕过白名单的经典手法。把一段webshell塞进图片的二进制数据尾部,后缀保持.jpg不变,再用其他漏洞配合包含执行,照样能让你的网站变成攻击者的后花园。更别说某些编辑器插件连基本的文件类型检查都没有,直接允许上传.html文件,存储型XSS就这么诞生了。
文件上传漏洞的危害等级,取决于攻击者能上传什么。能传PHP,就是远程代码执行,服务器沦陷,数据被拖走,内网被渗透。能传HTML,就是钓鱼页面和XSS攻击,用户信息被盗,网站信誉受损。能传恶意脚本,就是挂马,访问者全部中招。最可怕的是,攻击者往往不需要多复杂的技巧,几个现成的工具就能完成整个攻击链。
有个真实案例让我印象极深。某电商平台的上传头像功能,攻击者上传了一个带恶意代码的SVG文件。SVG本质是XML,里面可以嵌入JavaScript。管理员在后台查看用户头像时,恶意脚本在管理员的浏览器里执行,直接调用了修改商品价格的接口。一个头像上传,差点让整个商城的价格体系崩溃。
修复这类漏洞的思路其实不复杂。最有效的手段是存储与执行分离——把上传的文件放在独立域名或独立目录下,禁止脚本执行。其次是文件内容校验,用getimagesize()这类函数检查图片的真实格式,而不是只看扩展名。再配合随机文件名、限制文件大小、对上传目录设置只读权限,基本就能堵住绝大多数攻击路径。
可现实是,很多系统上线几年了,上传接口还是一副裸奔状态。有些是历史遗留代码没人敢动,有些是开发图省事跳过了安全审查。等被黑的时候,才发现日志里躺着几百次上传尝试,而自己连攻击者上传的是什么文件都查不出来。
文件上传漏洞就像家里的大门——你装了锁,但钥匙挂在门口垫子下面。攻击者不需要撬锁,他们只需要弯腰捡起钥匙。每个开发都应该问问自己:我的上传接口,是不是也把钥匙藏在了太明显的地方?
本文地址:http://www.79wt.cn/news/051b0199947.html
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。