当前位置:首页 > 知识

渗透上传

那天下午三点十七分,渗透上传我盯着屏幕右下角的渗透上传网络状态图标,它从绿色变成了灰色,渗透上传只闪了一下。渗透上传办公室的渗透上传空调还在嗡嗡响,隔壁工位的渗透上传同事正在跟客户打电话,没人注意到这个瞬间。渗透上传但我知道,渗透上传有人进来了。渗透上传

这不是渗透上传电影里的情节。渗透上传,渗透上传说白了就是渗透上传有人通过一个你根本不会留意的入口,把东西塞进了你的渗透上传系统里。我见过最离谱的渗透上传一次,攻击者用的渗透上传竟然是一张普通的公司年会合影。照片本身没问题,问题出在它的EXIF信息里——那串用来记录拍摄参数的元数据,被改成了加密的恶意脚本。图片上传到内部论坛的那一刻,脚本就开始在服务器上悄悄执行了。

大多数人以为上传功能就是个存文件的地方。头像、附件、报表、发票扫描件。你点一下“选择文件”,再点一下“上传”,进度条走完就完事了。可这个过程中间有太多环节可以动手脚。文件名的编码方式、MIME类型的校验逻辑、临时目录的权限设置、甚至服务器返回的那个“上传成功”的提示页面,每一个都是潜在的突破口。

去年帮一个做电商的朋友看他的后台日志。有个IP地址在凌晨两点到四点之间,连续上传了四百多个文件。每个文件都不大,几KB而已,扩展名全是.jpg。但其中三十七个文件的实际内容,是经过base64编码的PHP代码。他问我这些人图什么。我说你想想,如果你的服务器把.jpg当成图片来解析,那这些代码就是无害的垃圾数据。可如果你的配置出了点小差错,让服务器把这些文件当成了可执行脚本呢?

他沉默了一会儿,说那台服务器上跑着三万多个用户的收货地址和手机号。

渗透上传最麻烦的地方在于,它往往不是单独发生的。攻击者会先找一个上传点,可能是用户反馈里的截图功能,也可能是后台导入Excel的接口。上传成功之后,他们不会立刻搞破坏,而是先留一个极小的webshell,几十个字节,伪装成正常的图片缓存文件。这个shell只做一件事:等待指令。什么时候激活,取决于攻击者什么时候觉得时机合适。可能是下周,可能是下个月,也可能是明年。

我见过一个案例,webshell在服务器上安安静静躺了八个月。管理员换过三次密码,升级过两次系统,做过四次安全扫描。每次扫描都跳过了那个目录,因为它的权限设置和正常缓存目录一模一样,文件名也符合命名规范。直到有一天,攻击者觉得可以收网了,那个shell才开始往外传数据库的备份文件。

怎么防?常规的做法是白名单校验、文件重命名、存储目录禁止执行权限。这些都对,但不够。我自己的习惯是,每次看到上传接口,先问三个问题:这个文件存到哪?存完之后谁有权访问?访问的时候是用什么方式解析的?这三个问题里任何一个答案模糊,我就当它有问题。

还有一点,别太相信前端校验。JavaScript里写的那些“仅允许jpg/png”,在Burp Suite面前跟没有一样。请求包一改,什么限制都是摆设。真正管用的校验永远在服务端,而且得是那种“不管你传什么,我先把你重命名成一串随机字符,再扔进一个没有执行权限的目录里”的粗暴做法。

写这些不是要吓唬谁。只是觉得,上传这个动作太日常了,日常到没人觉得它会出事。可偏偏就是这种没人觉得会出事的地方,往往藏着最深的坑。下次你点“上传”按钮的时候,不妨想一想,那个文件离开你的电脑之后,到底去了哪里,又变成了什么。

分享到: