文件上传漏洞原理以及修复方法
漏洞名称:文件上传漏洞、任意文件上传
漏洞描述 :文件上传漏洞,直面意思可以利用WEB上传一些特定的文件。一般情况下文件上传漏洞是
指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能
力。文件上传本身是web中最为常见的一种功能需求,关键是文件上传之后服务器端的处
理、解释文件的过程是否安全。一般的情况有:
-1. 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执
行;
-2. 上传文件FLASH策略文件crossdomain.xml,以此来控制Flash在该域下的行为;
-3. 上传文件是病毒、木马文件,攻击者用以诱骗用户或管理员下载执行;
-4. 上传文件是钓鱼图片或为包含了脚本的图片,某些浏览器会作为脚本执行,实施钓鱼
或欺诈;
检测条件:
1、 已知Web网站在登录前或者登录后具有上传页面。
2、 上传的文件具备可执行性或能够影响服务器行为,所以文件所在的目录必须在WEB容
器覆盖的路径之内;
3、 用户可以从WEB上访问这个文件,从而使得WEB容器解释执行该文件;
4、 上传后的文件必须经过安全检查,不会被格式化、压缩等处理改变其内容
检测方法:
上传方式根据不同的web语言,检测方法也各式各样,以下列举基于JS验证的上
传的几种常见的文件上传绕过方法:
1、 我们直接删除代码中onsubmit事件中关于文件上传时验证上传文件的相关代码即可。
如图:
2、 直接更改文件上传JS代码中允许上传的文件扩展名你想要上传的文件扩展名,如图所
示:
3、 使用本地提交表单即可,如下图,作相应的更改,如图所示:
4、 使用burpsuite或者是fiddle等代理工具提交,本地文件先更改为jpg,上传时拦截,
再把文件扩展名更改为asp即可,如图所示:
5、 当然也有不是基于JS验证的上传,例如一些中间件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,再发送请求数据。
在浏览器地址栏输入http://www.example.com/hacker.jsp,访问该后门程序,取得
WebShell,结束检测。
修复方案:
针对文件上传漏洞的特点和必须具备的三个条件,我们阻断任何一个条件就可以达到
组织文件上传攻击的目的:
1、 最有效的,将文件上传目录直接设置为不可执行,对于Linux而言,撤销其目录的'x'
权限;实际中很多大型网站的上传应用都会放置在独立的存储上作为静态文件处理,
一是方便使用缓存加速降低能耗,二是杜绝了脚本执行的可能性;
2、 文件类型检查:强烈推荐白名单方式,结合MIME Type、后缀检查等方式(即只允许
允许的文件类型进行上传);此外对于图片的处理可以使用压缩函数或resize函数,
处理图片的同时破坏其包含的HTML代码;
3、 使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件;
4、 单独设置文件服务器的域名;
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!