文件上传漏洞入门:从前端到后端防护

文件上传漏洞是Web安全中常见的风险点,本质是服务器对用户上传的文件缺乏严格验证,导致恶意文件被执行。许多网站的文件上传功能会先用JavaScript做前端验证,列如一段常见的JS代码会定义允许的文件类型(如jpg、png、gif),提取文件后缀后判断是否在允许列表中,如果是PHP这类后缀就弹出不允许上传的提示。但这种客户端本地验证实则超级不安全——只要禁用浏览器的JavaScript,或者用插件屏蔽JS,原本不能上传的PHP文件就能直接保存到服务器目录。

文件上传漏洞入门:从前端到后端防护

除了禁用JS,还能通过本地构建HTML上传表单绕过前端校验。列如写一个简单的form表单,指定action为网站的上传接口,用POST方法提交,直接选择PHP文件后点击上传,就能跳过前端的JS检查成功上传。还有一种方法是用代理工具抓包:先选一个图片文件上传,抓到数据包后把文件名的后缀改成PHP,由于前端验证已经通过,服务器如果没有后端校验,就会接收这个恶意文件。

前端绕过只是第一步,真正的安全防护在后端。后端会做多种验证:列如MIME类型检测,检查文件的Content-Type是否为image/jpeg这类允许的类型;或者文件名后缀检测,分黑名单(禁止常见危险后缀如php、jsp)和白名单(只允许特定后缀如jpg、doc)。如果是黑名单验证,可能会被等价后缀绕过——列如用.php5、.phtml这些和PHP功能一样的后缀;或者上传.htaccess文件,修改Apache配置让图片文件被解析成PHP。Windows系统下还能用工大小写绕过(列如把php改成PHP)、空格或点号绕过(列如shell.php.)。

文件上传漏洞入门:从前端到后端防护

白名单验证更严格,但也有办法突破。列如利用00截断:在文件名里加%00让服务器截断后缀(列如evil.php%00.jpg,服务器会当成evil.php处理);或者二次渲染——把恶意代码插入图片中不会被处理的部分,列如用copy命令把图片和木马文件合并成图片马(copy /b 图片.png + 木马.php 图片马.png),网站处理图片时不会删除恶意代码,之后通过文件包含漏洞就能执行。

文件上传漏洞的危害很大:如果上传的是PHP脚本,服务器会执行里面的代码,列如一句话木马(),攻击者用工具连接后能控制服务器,操作文件、数据库甚至执行系统命令。如果上传的是病毒或钓鱼图片,会诱骗用户下载执行,或者通过文件包含漏洞触发恶意代码。还有的攻击者会上传Flash策略文件crossdomain.xml,控制Flash在该域下的行为,或者上传溢出服务器后台处理程序的文件,列如图片解析模块的漏洞利用文件。

文件上传漏洞入门:从前端到后端防护

修复文件上传漏洞的关键是后端严格验证:要用白名单限制文件类型,避免黑名单的遗漏;检查文件内容,列如图片的文件头(如GIF89a、FFD8)确保是合法文件;给上传目录去掉执行权限,即使恶意文件上传成功也无法执行;还要避免文件路径被篡改,防止路径遍历攻击。

文件上传漏洞入门:从前端到后端防护

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...