一、文件上传概述
1、常见文件上传的点:如用户头像上传,图片上传,文档上传等。
2、漏洞产生原因:对上传的文件未做过滤或过滤不严,导致攻击者可以上传恶意脚本,达到获取网站信息、权限的目的。
3、webshell:一种网页后门,以php,asp,jsp等文件形式存在的一种命令执行环境。
4、一句话木马:一种小而精的恶意代码,通常为一行。
如:<?php @eval($_request["cmd"]);?>
- $_request[]:是PHP中的一个超级全局变量,用于接收客户端提交的数据
- eval():执行括号里的代码并返回结果
- @:屏蔽该语句的报错信息
- cmd为客户端提交命令的参数值(尽量特殊一点)
4、条件
- 木马能上传成功,未被杀
- 知道上传木马的路径在哪
- 上传的木马能正常运行(解析)
5、流程
- 找到文件上传的点
- 文件上传-绕过检测
- 判断文件是否上传成功
- 使用webshell管理工具,判断是否能够连接
二、绕过
1、绕过前端JS检测
(1)、判断JS检测存在:bp可能抓不到包
(2)、绕过:浏览器开发者工具剔除JS或禁止JS
2、绕过MIME-Type验证
(1)mime-type:设定某种扩展名的文件用程序打开的方式类型
(2)MIME-TYPE检测是通过检查http包的Content-Type字段中的值来判断上传文件是否合法的
(3)测试:可以先成功上传一个文件,观察服务器允许的mime的类型,然后再抓包修改,在重放模块尝试。
资料:HTTP Content-Type(MIME类型)_图片 mimetype-CSDN博客
3、黑名单绕过
(1)、黑名单验证:只针对黑名单中没有的后缀名,文件才能上传成功
(2)、通过bp修改filename,利用Intruder模块进行枚举后缀名,寻找黑名单中没有过滤的后缀名。
- 双写绕过
- 大小写绕过
- 特殊可解析文件名绕过
- ::$DATA绕过
- .htaccess绕过
(3)、可以直接修改文件后缀名进行上传
(4).htaccess文件内容
<FilesMatch "1.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
4、白名单绕过
(1)、白名单验证:只针对白名单中有的后缀名,文件才能上传成功。
(2)、通过bp修改filename,绕过
(3)、绕过:00截断绕过(PHP5.3之后已修复)
(4)、乱写后缀判断是黑名单还是白名单
5、文件头检测绕过