WhatsApp网页版登录WhatsApp网页版登录

WhatsApp中文版

ftp有些文件不能上传_文件上传漏洞成因

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。文件上传功能本身是一个正常业务需求,对于网站来说,很多时候也确实需要用户将文件上传到服务器。由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件。

一、漏洞成因

1)web脚本语言

上传文件是web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致上传的恶意代码被执行。

2)Flash的策略文件

上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为。

3)病毒、木马文件

上传文件是病毒、木马文件whatsapp web,黑客用以诱骗用户或者管理员下载执行。

4)钧鱼图片

上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。

二、上传漏洞绕过的几种方式

1)文件上传漏洞js绕过

(1)、什么是前端js验证

文件上传漏洞中我们常碰到的是一种js验证。

利用判断网站速度来验证是否启用js验证,因为js验证用于客户端本地的验证,所以如果上传一个不正确的文件格式,它的判断会很快就会显示出来你上传的文件类型不正确,那我们就能判断出该网站是使用的js验证

(2)、如何判断前端js验证:客户端验证

前端JS最明显的验证就是在提交文件的时候,请求未到服务器之前,页面出现弹窗。

文件上传漏洞成因_文件上传漏洞js绕过_ftp有些文件不能上传

查看源码

首先定义一个检查文件类型的函数,允许上传的文件类型为: .jpg..png、.gif。当用户上传了文件时,会先检查文件的类型与允许上传的文件类型进行对比,若不匹配则提示用户应输入的文件类型,以此来限制用户的恶意行为。

文件上传漏洞js绕过_ftp有些文件不能上传_文件上传漏洞成因

(3)、如何绕过js验证

A、最简单方式:禁用浏览器js功能

js绕过实验

正常上传非白名单文件,被拒

ftp有些文件不能上传_文件上传漏洞成因_文件上传漏洞js绕过

然后禁用javascripts 再测试

ftp有些文件不能上传_文件上传漏洞js绕过_文件上传漏洞成因

文件上传漏洞js绕过_ftp有些文件不能上传_文件上传漏洞成因

B、中间人攻击:中间人攻击(Man-in-the-middle attack,缩写:MITM)在计算机安全领域中,是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完控制。中间人攻击这种方式与禁用JavaScript完全不同,中间人攻击使用burpsuite按照正常的流程通过JavaScript验证,然后在传输中的http层做手脚。

注意:Content-Length 修改

js绕过实验

设置foxfire 代理服务器

打开burpsuite 设置代理,中断开启

将要上传文件的扩展名改成符合要求的扩展名,上传

文件上传漏洞js绕过_文件上传漏洞成因_ftp有些文件不能上传

PHP.php.jpg 改为 PHP.php 然后forward

文件上传漏洞成因_文件上传漏洞js绕过_ftp有些文件不能上传

上传成功

打开原文件,查看源码

使用中国菜刀工具,先清除缓存,添加shell

ftp有些文件不能上传_文件上传漏洞js绕过_文件上传漏洞成因

就可以拿到整个网站webshell 信息

ftp有些文件不能上传_文件上传漏洞成因_文件上传漏洞js绕过

2)文件上传漏洞type绕过(服务器)

(1)、MIME-type类型概述

Multipurpose lnternet Mail Extensions,多用途Internet邮箱扩展。MIME是一个描述消息内容类型的internet标准。MIME消息能包含文本、图像、音频、视频以及其他应用

文件上传漏洞js绕过_文件上传漏洞成因_ftp有些文件不能上传

MIME-type作用:

媒体类型通常是通过HTTP协议,由Web服务器告知浏览器的,更准确地说,是通过Web服务器请求头中的Content-Type来告知浏览器数据类型的例如:

Content-Type: text/HTML 表示内容是text/HTML类型,也就是超文本文件。MIME Type 不是个人指定的,是经过IETF(国际互联网工程任务组)组织协商,以RFC(Request For Comments,请求评议)的形式作为建议的标准发布在网上的whatsapp网页版,大多数的Web服务器和用户代理都会支持这个规范。

MIME-Type绕过

1、上传一个PHP文件

2、使用burpsuite拦截查看MIME类型,

3、发现PHP文件的MIME类型为application/octet-stream

4、服务端会判断文件类型是否是image/gif

5、无法通过验证

6、需要将http请求中的Content-Type更改为image/gif类型

ftp有些文件不能上传_文件上传漏洞js绕过_文件上传漏洞成因

(2)Type绕过防御

目录设置为不可执行 只要web容器无法解析该目录下的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此此点至关重要。

判断文件类型 判断文件类型时,应结合MIME Type、后缀检查等方式。推荐使用白名单,黑名单的方式已经无数次被证明不可靠。

用随机数改写 文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中telegram中文版,用户能上传,但不能访问。

Type绕过实验

访问服务器上传文件,报错

文件上传漏洞js绕过_文件上传漏洞成因_ftp有些文件不能上传

查看源码,无白名单

文件上传漏洞js绕过_ftp有些文件不能上传_文件上传漏洞成因

考虑MIME-type

打开burpsuite 开启 intercept ON

通过web再次上传PHP文件

文件上传漏洞成因_文件上传漏洞js绕过_ftp有些文件不能上传

PHP文件是二进制数据,将Content-Type 类型改成符合要求的类型

ftp有些文件不能上传_文件上传漏洞js绕过_文件上传漏洞成因

文件上传漏洞成因_文件上传漏洞js绕过_ftp有些文件不能上传

文件上传漏洞成因_文件上传漏洞js绕过_ftp有些文件不能上传

上传成功

图片右键复制网址

使用中国菜刀工具拿到webshell

文件上传漏洞成因_ftp有些文件不能上传_文件上传漏洞js绕过

3)文件上传漏洞扩展名绕过

文件扩展名:文件扩展名(filename extension)也称为文件的后缀名,是操作系统用来标志文件类型的一种机制。通常来说,一个扩展名是跟在主文件名后面的,由一个分隔符分隔。在一个像“readme.txt”的文件名中,readme是主文件名,.txt为扩展名(文本、外语全称: Text),表示这个文件被认为是一个纯文本文件。扩展名可以被认为是一个类型的元数据,

(1)检测方式:

A、黑名单检测是一种不安全的方式,黑名单定义了一系列不安全的扩展名,服务器端,一般会有个专门的blacklist文件,里面会包含常见的危险脚本文件类型,在接受文件后,与黑名单扩展名对比,如果发现文件扩展名与黑名单的扩展名匹配,则认为文件不合法。

AA、黑名单绕过

忽略的扩展名:攻击者可以从黑名单中找到web开发人员忽略的扩展名,如cer。

大小写转换:所示代码中并没有对接收到的文件扩展名进行大小写转换操作,那就意味着可以上传AsP,pHp之类的文件名绕过黑名单检测,而此类扩展名在windows平台依然会被web容器解析

Windows特性:在windows系统下,如果文件社者空格美空爱统会自动去除“”与空格,利用此特性也可以绕过黑名单验证。如:上传“asp."或者“asp_"扩展名程序,服务器端接受文件名后在写文件操作时,windows将会自动去处小数点和空格。

双写后缀:双写后缀名绕过,用于只将文件后缀名,例如:上传时将Burpsuite截获的数据包中文件名【evil.php改为【evil.pphphp】那么开头的'p'和结尾的'hp'就组合又形成了【php】

扩展名绕过实验-大小写

上传php文件报错

文件上传漏洞js绕过_ftp有些文件不能上传_文件上传漏洞成因

判断用户通过客户端进行黑名单验证

修改PHP文件扩展名php为Php

文件上传漏洞js绕过_文件上传漏洞成因_ftp有些文件不能上传

文件上传漏洞成因_ftp有些文件不能上传_文件上传漏洞js绕过

图片右键复制网址 ,使用中国菜刀工具拿到webshell

B、白名单检测方式与黑名单恰恰相反,黑名单是定义不允许上传的文件扩展名,而白名单则是定义允许上传的文件扩展名,白名单拥有比黑名单更好的的防御机制。

白名单拥有比黑名单更好的的防御机制,如$WhiteList =array('rar'.'jpg'.'png','bmp'.,'gif','jpg','doc');在获取到文件扩展名后对$WhiteList数组里的扩展名迭代判断,如果文件扩展名被命中,程序将认为文件是合法的,否则不允许上传。

检测绕过

ftp有些文件不能上传_文件上传漏洞js绕过_文件上传漏洞成因

虽然采用白名单的过滤方式可以防御未知风险,安全性得到了更可靠的保障,但是不能完全依赖白名单,因为白名单并不能完全防御上传漏洞,我们可以通过中间件的文件解析问题来绕过。

lIS 6.0,攻击者把木马文件名改为pentest.php; 1.jpg上传,此时的文件为Jpg格式,从而可以顺利通过验证,而IIS 6.0却会把pentest.php; 1.jpg当作ASP脚本程序来执行,最终攻击者可以绕过白名单检测,并且执行木马程序。

在Apache1.x 2.x中,对文件名的解析是从后往前解析的,直到遇见一个Apache认识的文件类型为止。如:phpshell.php.rar.rar.rar,因为Apache不认识.rar这个文件类型,所以会一直遍历后缀到.php,然后认为这是一个PHP类型的文件从而绕过白名单检测。

漏洞00截断绕过实验

上传php文件,报错判断做了白名单检测

文件上传漏洞成因_ftp有些文件不能上传_文件上传漏洞js绕过

需要修改扩展名绕过,修改文件扩展名.php 为.php.jpg

使用burpsuite 抓到

文件上传漏洞成因_文件上传漏洞js绕过_ftp有些文件不能上传

修改filename 名称,php扩展名后增加

选中进行url code编译然后forward

文件上传漏洞js绕过_ftp有些文件不能上传_文件上传漏洞成因

文件上传漏洞成因_文件上传漏洞js绕过_ftp有些文件不能上传

00截断通常用来绕过web软waf的白名单限制。

get方法中,当url中加入时,通过urlencode,得到字符\0

(0x00截断原理:0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。这个可以用在对文件类型名的绕过上。)

还可以同时 修改filename、Content-Type 也可以绕过

文件上传漏洞成因_文件上传漏洞js绕过_ftp有些文件不能上传

ftp有些文件不能上传_文件上传漏洞成因_文件上传漏洞js绕过

4)文件上传漏洞修改文件头

文件头是位于文件开头的一段承担一定任务的数据,就是为了描述文件的一些重要属性,比如图片的长度、宽度、像素尺寸等,一般都在开头的部分

如果文件内容检测设置得比较严格,那么上传攻击将变得非常困难,也可以说它是在代码层检测的最后一道关卡,如果它被突破了,就算没有代码层的漏洞,也给后面利用应用层的解析漏洞带来了机会。

(1)文件头验证

(2)文件内容检测

(3)文件头校验绕过

修改文件头实验

1.BMP

文件头标识 (2 bytes) 42 4D

2.PNG

3.GIF

4.JPEG/JPG

从winhex中取出的文件头列表

上传文件报错,猜测用户进行文件头验证

ftp有些文件不能上传_文件上传漏洞成因_文件上传漏洞js绕过

然后对上传文件进行内容备份,通过winhex工具修改文件头

文件上传漏洞js绕过_文件上传漏洞成因_ftp有些文件不能上传

文件上传漏洞成因_ftp有些文件不能上传_文件上传漏洞js绕过

将3C3F70改为FFD8FF 保存重新上传成功

文件上传漏洞成因_ftp有些文件不能上传_文件上传漏洞js绕过

图片右键复制网址 ,使用中国菜刀工具拿到webshell

相关文章