游客发表
phpcms的洞补丁swfupload漏洞,说白了就是洞补丁攻击者能借道文件上传功能,往你服务器里塞个webshell。洞补丁这漏洞在2009到2012年间特别猖獗,洞补丁那时候phpcms用户量巨大,洞补丁随便一搜就是洞补丁一堆被挂马的站点。
漏洞出在swfupload这个flash上传组件上。洞补丁它原本是洞补丁给用户传图片用的,但phpcms的洞补丁某些版本没对上传文件的后缀名做严格过滤。攻击者把php文件改名为jpg,洞补丁再配合某些解析漏洞,洞补丁就能让服务器把图片当成php执行。洞补丁更恶心的洞补丁是,有些版本连文件名过滤都省了,洞补丁直接传php就完事。洞补丁
我印象最深的一个案例是2011年某地方门户站,整站被植入博彩页面。站长查了三天日志,最后发现是后台编辑器里一个不起眼的swfupload接口被人扫到了。攻击者根本没登录后台,直接构造HTTP请求就绕过了所有权限校验。
补丁的核心就两件事:第一,把文件后缀名白名单写死,只允许gif、jpg、png这类图片格式;第二,对上传目录禁止执行PHP脚本,在nginx或apache里加一条规则就行。官方补丁还顺手改了文件名生成逻辑,不再用用户提交的原始文件名,而是随机生成一串字符。
但光打补丁不够。很多站长打完补丁就以为万事大吉,结果服务器还是被拿下。为什么?因为补丁只堵了swfupload这一个入口,攻击者换个uploadify或者别的上传组件,照样能打。phpcms那几年不止一个上传漏洞,swfupload只是最出名的一个。
补丁文件长这样:在phpcms/libs/classes/attachment.class.php里,把原来那句$ext = strtolower(substr($_FILES['file']['name'], strrpos($_FILES['file']['name'], '.') + 1));替换成带白名单判断的版本。同时把swfupload的配置文件里file_types参数改为只允许图片格式。
有个细节容易被忽略——补丁需要同时更新前端JS和后台PHP逻辑。有些站长只覆盖了PHP文件,浏览器缓存里的旧swf还在跑,白打。我当时处理过一个客户,补丁打了,但用户浏览器缓存了旧flash文件,攻击者照样利用。最后强制清缓存,把swf文件路径加了个版本号参数才解决。
现在phpcms早就停止维护了,官方补丁停留在2013年的版本。但互联网上还躺着大量老站跑着旧代码。你要是手里还有这类系统,别只盯着swfupload,把所有上传接口都过一遍。上传目录禁止执行脚本这条规则,比任何补丁都管用。
说到底,补丁只是止血。真正要命的是很多站长根本不知道自己的站点存在哪些接口。与其指望官方出补丁,不如自己把上传功能彻底重写——用随机文件名、强制白名单、存储目录和执行目录分离。做到这三条,swfupload漏洞对你来说就只是个历史名词了。
友情链接