上传漏洞
一个正常的上传漏洞图片上传功能,怎么就成了服务器沦陷的上传漏洞入口?答案藏在文件名的后缀里。
2019年夏天,上传漏洞某中型电商平台被拖库,上传漏洞起因是上传漏洞运营人员图省事,在商品评价模块直接用了开源的上传漏洞上传组件。攻击者上传了一个名为 shell.php.jpg 的上传漏洞文件。后端校验逻辑只检查了 MIME 类型为 image/jpeg,上传漏洞放行。上传漏洞但 Apache 的上传漏洞 mod_mime 模块解析文件名时,遇到多个扩展名,上传漏洞从右往左匹配,上传漏洞.jpg 不识别为可执行脚本,上传漏洞继续往左看,上传漏洞.php 被识别了。上传漏洞文件落地,访问,执行。一个 system($_GET['cmd']) 就拿到了 www-data 权限的 shell。
这类漏洞的根子不在代码写得多烂,而在“信任边界”放错了位置。前端 JavaScript 校验 accept="image/*",攻击者抓包改一下 Content-Type 就绕过。后端如果只依赖 $_FILES['file']['type'],那更是形同虚设——这个值来自 HTTP 请求头,客户端说是什么就是什么。真正可靠的判断只有两种:读取文件头部的魔数(magic bytes),或者用 getimagesize() 这类函数实际解析图像结构。但即便校验通过,文件存到磁盘上,如果 Web 服务器配置不当,依然可能被解析执行。
我见过最离谱的一个案例,是某政府网站的上传点把文件存到了 /upload/ 目录,但 Nginx 配置里 location ~ \.php$ 的匹配范围是整个站点。攻击者上传了一个 .php 文件,虽然上传接口白名单只允许 .jpg .png .gif,但攻击者利用 Windows 环境下 shell.php::$DATA 的流特性绕过了后缀检查。文件实际写入后,Windows 自动去掉 ::$DATA,变成 shell.php。Nginx 一匹配,直接执行。这个漏洞在 IIS 6.0 时代更猖獗,shell.asp;.jpg 这种分号截断的玩法,现在听起来像上古传说,但换了个壳依然活着。
防御措施其实不复杂,但需要多层配合。文件类型校验用 finfo_file() 读魔数,别信任何客户端提交的元数据。文件名重命名成随机字符串加安全后缀,比如 a7f3c9.jpg,彻底丢掉用户可控的部分。存储目录给 755 权限,且通过 Nginx 的 location 规则禁止该目录下任何脚本执行。如果业务必须保留原始文件名,那就把文件存到 Web 根目录之外,用后端脚本读文件流再输出。
有个细节容易被忽略:图片二次渲染。把用户上传的图片用 GD 库或 ImageMagick 重新生成一遍,哪怕里面嵌了 PHP 代码,经过像素级重绘也会丢失。这个方法还能顺带干掉图片马。但要注意 ImageMagick 自身的历史漏洞,比如 ImageTragick,别防了一个坑掉进另一个坑。
上传漏洞的本质是“文件内容”与“文件解释方式”之间的错位。服务器以为自己在存图片,解释器却把它当代码跑。堵住这个错位,比堆砌 WAF 规则实在得多。
(责任编辑:休闲)
-
HTTP协议就像快递员,每次敲门都得带齐三样东西:方法、路径和版本号。你输入网址敲下回车,浏览器立刻组装一个GET请求包裹,塞进TCP/IP管道里。服务器拆开包裹,找到对应资源,再回寄一个200 OK
...[详细]
-
打开电脑浏览器,地址栏敲进一串字母,回车,一个页面加载出来。页面上不是新闻,不是视频,而是一个游戏界面——超级玛丽、魂斗罗、俄罗斯方块,甚至还有红白机时代的《坦克大战》。鼠标点几下,键盘按几下,游戏就
...[详细]
-
高启强买下莽村那块地,准备开发度假村。剧情里反复强调他“每一步都算得精”,可偏偏在关键环节上,编剧让他犯了个连城中村拆迁户都不会犯的低级错误——他居然没查清楚那块地的产权归属就砸了几个亿进去。 这合理
...[详细]
-
双赢棋牌网站,听名字像个正经生意,实际上就是个赌场。我见过太多人点进去,第一眼看到“充值送100%”的红字,心就跟着飘了。有个常客老周,退休教师,每月退休金四千出头,愣是三个月输掉两万三。他跟我说,起
...[详细]
-
《lol透视》 凌晨两点,我盯着屏幕上的战争迷雾发呆。对面打野在草丛里蹲了整整三十秒,而我方ADC正毫无防备地走向河道。下一秒,盲僧的Q技能精准命中,一套连招带走。这不是巧合——我切到OB视角,发现对
...[详细]
-
我花了三个晚上,才让那台放在客厅角落的旧电脑变成了一个真正的“公共资源站”。问题不在配置——那台机器还是十年前的酷睿i3——而在如何让外网的人能稳定地连进来。FTP服务器搭建本身半小时就搞定了,Fil
...[详细]
-
真空秀场那晚,我坐在第三排。模特走出来时,全场先是一静,接着此起彼伏的抽气声——不是倒吸气,是那种想笑又不敢笑、憋得胸腔发颤的气音。她身上那件“衣服”,说白了就是两条交叉的透明胶带,从锁骨斜拉到胯骨。
...[详细]
-
我翻过一个做电商的朋友的服务器目录,里面躺着一套tp5写的商城源码。代码注释挺全,但结构乱得像刚搬完家的客厅。这不是个例,ThinkPHP 5在国内中小型商城项目里的占有率,比很多人想象中高得多。 这
...[详细]
-
凌晨两点,我盯着屏幕上那个红得刺眼的报错,心里只有一个念头:这bug到底干了啥? 日志就是案发现场。抓不到日志,你就是在对着空气破案。别急着改代码,先想清楚怎么把现场完整地搬出来。 最直接的办法——看
...[详细]
-
2023年双十一,我盯着“蕉下”天猫旗舰店的实时销售数据,看它从开场两小时就冲上服饰类目Top3。这家2013年才成立的品牌,靠一把小黑伞起家,后来做防晒服、做冲锋衣,硬生生从“防晒”这个细分赛道里,
...[详细]

哪些电影网站是免费的
jquery插件下载官网
汕头潮阳实验学校官网
新能源汽车渗透率看新能源车发展现状
为什么网站登不进去
