上传渗透
去年秋天,上传渗透一个做外贸的上传渗透朋友给我看了他的服务器日志。连续三天,上传渗透凌晨两点到四点,上传渗透有个IP从乌克兰方向摸进来,上传渗透每次只待十几分钟。上传渗透他以为是上传渗透普通扫描,没管。上传渗透第四天,上传渗透数据库里多了一张表,上传渗透名字叫“readme_please”。上传渗透里面只有一行字:你的上传渗透客户名单我复制了一份,想要回去,上传渗透付0.3个比特币。上传渗透
这就是上传渗透上传渗透。攻击者不砸门、不撬锁,他们找到你网站的上传接口,把伪装成图片或文档的脚本塞进去,然后从内部打开通道。整个过程安静得像往信箱里塞了一封信。
很多人以为上传漏洞是上古时代的产物。毕竟现在谁还让用户随便传文件?但现实是,上传功能无处不在——头像、附件、导入Excel、甚至日志上报接口。只要有一个入口没卡死,攻击者就能把一个小文件变成整台服务器的控制权。
我见过最离谱的案例是一家小电商。他们的商品评论支持上传图片,前端做了限制,只允许jpg和png。后端呢?只检查了Content-Type。攻击者把PHP文件的后缀改成.jpg,再用Burp Suite把请求里的Content-Type改成image/jpeg。服务器照单全收。那个“图片”躺在upload目录里,访问一下,直接执行。
问题出在哪儿?出在“信任”二字。前端校验是给普通用户看的,后端校验才是给攻击者看的。很多开发者把两者搞混了。更麻烦的是,有些框架自带的上传组件默认配置宽松得吓人。你装完就能用,但默认允许上传.html、.svg、甚至.htaccess。攻击者传一个.htaccess上去,重写规则,让所有.jpg都当PHP解析。你还在纳闷图片怎么打不开,人家已经拿到shell了。
上传渗透的可怕之处在于它的隐蔽性。SQL注入会报错,XSS会弹窗,上传成功之后往往什么都不会发生。攻击者把webshell藏在一堆正常图片里,文件名改成“thumb_2024_05_12_final.jpg”。你翻目录都未必注意到。等到他连上C2服务器,开始横向移动,你才发现内网里多了几台不认识的机器。
怎么防?别指望一个WAF就万事大吉。WAF能拦已知的payload,但攻击者会编码、会分块、会改魔术字节。真正有效的做法是三层:第一,上传目录禁止执行任何脚本,这是铁律。第二,后端用白名单校验扩展名,不是黑名单。黑名单永远漏,白名单只放行你确定安全的格式。第三,把上传的文件重命名成随机字符串,再存到Web根目录之外。用户要访问?走一个代理脚本,读文件、输出流。这样即使文件里有恶意代码,也永远没机会执行。
还有一点常被忽略:日志。上传接口的日志要单独记,记IP、记文件名、记原始Content-Type。我那个外贸朋友后来复盘,发现攻击者第一次试探时传了一个叫“test.php.jpg”的文件,日志里清清楚楚。他没看。等到比特币勒索信出现,已经晚了三天。
上传渗透不是高深的技术,它更像一种耐心的钓鱼。攻击者不需要一次成功,他试一百个接口,只要一个没关严,就能进去。你也不需要做到完美防御,只要比隔壁那台服务器更难啃,他就换目标了。问题是,你确定自己比隔壁更难啃吗?
(责任编辑:焦点)














