Upload Bypass
客户端 JavaScript
某些网站通过前端 JavaScript 来检查上传文件的后缀,不要怕,一切的前端验证都是纸老虎!!
1. Burpsuite 抓包修改后缀
2. 将上传页面保存到本地(不能直接修改,因为浏览器有缓存),删除其中用于检查后缀的 JS 代码
3. 禁用浏览器 JS 或 通过 Burp 删除 JS(不推荐,因为禁用所有 JS 可能会影响其他功能)
服务端 后缀检查
1. 利用黑名单漏网之鱼
AddType application/x-httpd-php .php5 .phtml
2. 上传自定义的 .user.ini
前提是上传目录有 .php 文件,并且能够访问到它,让其包含我们上传的图片马
auto_prepend_file=shell.jpg //让当前目录的所有 .php 文件在顶部包含 shell.jpg auto_append_file=shell.jpg //让当前目录的所有 .php 文件在底部包含 shell.jpg
3. 上传自定义的 .htaccess
.htaccess 是 Apache 的一种分布式配置文件,该文件中的配置指令作用于该文件所在的目录及其所有子目录,但子目录中的指令会覆盖父目录或者主配置文件中的指令
Apache 需要开启 mod_rewrite 模块,以及设置 AllowOverride All 才能生效,以下配置会让 Apache 把 shell.gif 交给 PHP 去解析
"shell.gif"> SetHandler application/x-httpd-php
4. 00 截断
PHP 版本小于 5.3.4 且 php.ini 中的 magic_quotes_gpc 为 OFF 状态
由于 POST 请求不会自动解码,所以需要在 Burp 中将 %00 选中,Ctrl+shift+u 进行 URL 解码,而 GET 会自动解码一次,所以不需解码
1.php%00.png # 文件名截断 .png 绕过了后缀检查,但由于截断,最终只有 1.php 被保留 /uploads/1.php%00 # 上传路径可控
5. 特殊后缀
(1)空格或点
Windows 会自动去除后缀名后面的空格或小数点
(2)::$DATA
Windows 会把 ::$DATA 数据当作文件流处理,不会检测后缀名,且会保持 ::$DATA 之前的文件名不变
(3)双写后缀
后端若只将不合法后缀替换为空一次,那么 pphphp 过滤一次就会剩下 php 了
(4)大小写混写
服务端 内容检查
1. 图片马
若服务端检查文件头,则可以尝试上传图片马,然后配合文件包含漏洞或者中间件的解析漏洞
2. 代码逻辑
若先上传再验证(上传过程不进行验证),这样文件会暂时保存到服务器上,可以趁程序对此文件进行操作(例如改名,移动),访问文件进行占用
声明:本文仅用于学习,切勿对网站进行非授权测试!!