漏洞分类:
认证和授权类
漏洞名称:
文件上传漏洞
漏洞描述:
文件上传漏洞,字面意思是可以利用WEB应用漏洞上传一些特定的文件。一般情况下文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。文件上传本身是web中最为常见的一种功能需求,关键是文件上传之后服务器端的处理、解释文件的过程是否安全。一般的情况有:
① 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行;
② 上传文件FLASH策略文件crossdomain.xml,以此来控制Flash在该域下的行为;
③ 上传文件是病毒、木马文件,攻击者用以诱骗用户或管理员下载执行;
④ 上传文件是钓鱼图片或为包含了脚本的图片,某些浏览器会作为脚本执行,实施钓鱼或欺诈。
风险等级:
通常定为高危,因为这种漏洞将会使攻击者直接获得服务器的控制权。
检测条件:
① 已知Web网站在登录前或者登录后具有上传页面。
② 上传的文件具备可执行性或能够影响服务器行为,所以文件所在的目录必须在WEB容器覆盖的路径之内;
③ 用户可以从WEB上访问这个文件,从而使得WEB容器解释执行该文件;
④ 上传后的文件不会被格式化、压缩等处理改变其内容。
测试方法:
一、允许上传任意格式文件的上传点:
1、找到Web应用的上传点,直接上传和网站语言对应的webshell文件,如PHP一句话木马代码为
2、通过回包或者页面提示获得webshell的路径,使用中国菜刀连接即可getshell。
二、onsubmit事件文件验证绕过:
直接删除代码中onsubmit事件中关于文件上传时验证上传文件的相关代码即可,如图:
三、在前端JS过滤文件扩展名的绕过:
1、直接更改文件上传JS代码中允许上传的文件扩展名你想要上传的文件扩展名,如图所示:
2、使用本地提交表单即可,如下如,作相应的更改:
四、截包修改后缀名的绕过:
使用burpsuite或者是fiddle等代理工具提交,本地文件先更改为jpg,上传时拦截,再把文件扩展名更改为脚本语言格式即可,如图所示:
五、基于中间件解析漏洞的绕过:
例如一些中间件IIS,Nginx,,PHP,FCK编辑器等等的解析漏洞,其上传绕过方式也是多种多样。通过对上传页面进行检查,常见的文件上传检查针对文件类型进行,可以使用手动修改POST包然后添加%00字节用于截断某些函数对文件名的判断。除了修改文件名来绕过类型检查外,还可以修改文件头来伪造文件头,欺骗文件上传检查,如图,修改文件头中的类型来进行绕过:
以上为几种常见的上传,更多的还需自行研究,进行上传绕过。以下为总体的测试流程:
1、登陆网站,并打开文件上传页面
2、点击“浏览”按钮,并选择本地的一个JSP文件(比如hacker.jsp),确认上传。
3、如果客户端脚本限制了上传文件的类型(比如允许gif文件),则把hacker.jsp更名为hacker.gif;配置HTTP Proxy(burp)进行http请求拦截;重新点击“浏览”按钮,并选择hacker.gift,确认上传。
4、在WebScarab拦截的HTTP请求数据中,将hacker.gif修改为hacker.jsp,再发送请求数据。
5、登陆后台服务器,用命令find / -name hacker.jsp查看hacker.jsp文件存放的路径。如果可以直接以Web方式访问,则构造访问的URL,并通过浏览器访问hacker.jsp,如果可以正常访问,则已经取得WebShell,测试结束。如果hacker.jsp无法通过web方式访问,例如hacker.jsp存放在/home/tmp/目录下,而/home/tomcat/webapps目录对应http://www.example.com/,则进行下一步
6、重复1~3,在burp拦截的HTTP请求数据中,将hacker.gif修改为../tomcat/webapps/hacker.jsp,再发送请求数据。
修复方案:
针对文件上传漏洞的特点和必须具备的三个条件,我们阻断任何一个条件就可以达到组织文件上传攻击的目的:
1、最有效的,将文件上传目录直接设置为不可执行,对于Linux而言,撤销其目录的'x'权限;实际中很多大型网站的上传应用都会放置在独立的存储上作为静态文件处理,一是方便使用缓存加速降低能耗,二是杜绝了脚本执行的可能性;
2、文件类型检查:强烈推荐白名单方式,结合MIME Type、后缀检查等方式(即只允许允许的文件类型进行上传);此外对于图片的处理可以使用压缩函数或resize函数,处理图片的同时破坏其包含的HTML代码;
3、使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件;
4、单独设置文件服务器的域名。
领取专属 10元无门槛券
私享最新 技术干货