文件上传漏洞与 WebShell 原理

理解文件上传漏洞、WebShell 和执行条件之间的关系,掌握上传点、解析差异、目录权限和防御清单。

写在前面:合法学习边界

本文讲解文件上传漏洞与 WebShell 原理。请不要在真实网站上传木马、绕过上传限制或获取未授权访问。所有测试都应在自建靶场、授权测试环境或明确授权目标上完成。WebShell 属于高风险行为,未经授权上传或执行可能涉及违法犯罪。

一、文件上传漏洞的本质

文件上传漏洞的本质是:系统允许用户上传文件,但没有正确限制文件类型、存储位置、访问路径或执行条件,最终导致恶意文件被保存并能被执行。

它通常包含几个条件:

1
2
3
4
5
上传入口存在
限制可以绕过
文件被保存到 Web 可访问目录
服务器可以解析并执行该文件
攻击者知道访问路径

二、常见绕过点

1. MIME 类型检查

有些系统只检查 Content-Type。修改请求头可能会绕过前端或简单后端检查。

2. 文件扩展名校验

只检查最后扩展名时,某些 Web 服务器可能仍能解析双扩展名、特殊后缀或不常见后缀。

3. 黑名单不完整

黑名单容易遗漏:

1
2
3
4
5
6
7
8
9
php
jsp
jspx
war
asp
aspx
ashx
php3
phtml

4. 上传目录可执行

如果上传文件放在 Web 根目录,并且 PHP/JSP/ASP 能解析,风险会更高。

5. 文件名处理不当

例如保存时使用原文件名,可能带来路径穿越、覆盖或执行风险。

三、WebShell 是什么

WebShell 是可以通过 Web 访问执行的脚本文件。它通常被上传到 Web 目录后,由 Web 服务解释执行。

常见类型:

1
2
3
PHP WebShell
JSP WebShell
ASP WebShell

学习时必须强调:WebShell 不是学习工具,而是攻击后果。真实工作中,发现 WebShell 应立即保留证据、隔离系统、清理后门、分析入侵链路。

四、WebShell 的典型行为

1
2
3
4
5
6
执行命令
读写文件
上传下载文件
创建反弹 Shell
查看数据库
修改配置

因此在应急响应中,发现 WebShell 后不能只删除文件,还要追查:

1
2
3
4
5
谁上传的
从哪里进入
是否已有后门
是否修改计划任务
是否横向移动

影响与危害

文件上传漏洞能造成:

1
2
3
4
上传 WebShell → 服务器沦陷
任意文件写入
存储型 XSS
整站被控制、内网横向

风险等级:高到严重。

五、防御清单

1. 白名单文件类型

只允许真正需要的扩展名,例如:

1
2
3
4
5
6
jpg
png
gif
pdf
docx
xlsx

2. 限制存储位置

上传文件不要放在可执行目录,最好放到对象存储或专门静态资源目录。

3. 重命名文件

不要使用用户原始文件名作为存储文件名。

4. 设置目录不可执行

如果上传目录只需要静态访问,就不要允许脚本执行。

5. WAF 和日志审计

监控上传频率、异常扩展名、异常文件名、异常响应和 WebShell 特征。

修复

1
2
3
4
5
服务端校验扩展名/MIME/文件内容(魔数)
上传目录禁止执行脚本
随机化文件名、限制目录
部署 WAF 并限制上传大小
修复后复测:绕过 payload 不再上传成功

六、报告写法

示例:

1
2
3
发现:上传接口允许 .php 文件进入可执行目录,访问路径可触发脚本执行。
风险:可能导致服务器控制、数据泄露、横向移动和后门驻留。
建议:改为白名单类型;上传目录与执行目录分离;强制重命名;增加 WAF 与日志告警;排查是否已有 WebShell。

七、小结

文件上传漏洞的关键是“文件能不能落地、能不能访问、能不能执行”。WebShell 是上传漏洞被利用后的结果。学习时要理解边界,而不是把命令当成目标。