写在前面:合法学习边界
上传测试只用于授权靶场。对真实系统上传木马可能触犯法律。
一、上传为什么危险
文件上传一旦能落地可执行目录,就等于给攻击者“放进去一个后门”。测试核心是“文件能不能传上去、能不能访问、能不能执行”。
二、思路清单
1. 前端校验绕过
1
2
| 直接改包(绕过 JS 限制)
删掉前端限制后重放
|
2. MIME / Content-Type 绕过
1
2
| 改 Content-Type 为 image/png 等
服务端若只看 MIME,可绕过
|
3. 扩展名校验绕过
1
2
3
4
5
| 双扩展:shell.php.jpg、shell.jpg.php
大小写:.PhP、.JSP
特殊后缀:.php3、.phtml、.php5、.jspx、.war、.asp
加空格/点/换行:shell.php 、shell.php.
配合服务器解析差异
|
4. 内容/文件头校验绕过
1
2
| 在文件头加图片魔数:GIF89a / \xFF\xD8\xFF
文件内容里夹一句话(图片马)
|
5. 解析漏洞
1
2
3
4
| nginx 解析:/shell.jpg/x.php → 以 PHP 解析
Apache 多后缀解析
IIS 分号/畸形解析
中间件版本决定能否利用
|
6. 配合文件包含 / 其他
1
2
3
4
| 上传图片马 → 配合文件包含执行
上传 .htaccess / .user.ini 改解析规则
上传 XML → XXE
上传压缩包 → 解压路径穿越
|
7. 上传后路径探测
1
2
3
| 找上传文件真实路径(时间戳/随机名?)
目录探测:/upload/、/files/
访问确认是否能执行
|
三、优先级
1
2
3
| 先测能不能绕过上传限制(前端→MIME→扩展名→内容)
再判断服务器解析(解析漏洞)
最后配合文件包含/htaccess 打通执行
|
四、小结
上传测试的核心是“文件能不能落到可执行位置并被触发”。一条条过:前端、MIME、扩展名、内容、解析、配合。每个站点环境不同(中间件/语言),对应的绕过方式也不同,抓包 + 探测真实路径是关键。