文件上传漏洞绕过姿势

文件上传漏洞

文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。 文件上传漏洞本身就是一个危害巨大的漏洞,WebShell更是将这种漏洞的利用无限扩大。大多数的上传漏洞被利用后攻击者都会留下WebShell以方便后续进入系统。攻击者在受影响系统放置或者插入WebShell后,可通过该WebShell更轻松,更隐蔽的在服务中为所欲为。

一般找到网站的上传点后,都可以给他传个大马或小马啥的。但多半是有防护措施的。所以,姿势就有了。

0x001 针对前端检测绕过

1.一般前端js会对上传的后缀进行判断,这时请求包还未到服务器,仅是前端的客户端进行检验。所以利用burpsuite 直接抓包修改文件的后缀,如:上传一个shell.jpg 然后修改为shell.php。即可绕过

2.既然时js检测,那么直接禁用js即可,使用火狐浏览器的NoScript插件、IE中禁用掉JS等方式实现。

0x002 针对后端检测绕过

文件在被上传到服务器后,后端脚本也会对文件类型进行校验,如果上传的文件扩展名不符合黑白名单的限制,则不予上传,否则上传成功。

1.检查HTTP Header中的Content-Type
HTTP协议规定了上传资源的时候在Header中加上一项文件的MIMETYPE,来识别文件类型,这个动作是由浏览器完成的,服务端可以检查此类型不过这仍然是不安全的,因为HTTP header可以被发出者或者中间人任意的修改,不过加上一层防护也是可以有一定效果的

MIME:多用途互联网邮件扩展类型,浏览器通常使用MIME类型(而不是文件扩展名)来确定如何处理文档,每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。也就是通过MIME可以确认文件的类型。
常见的MIME类型:

普通文本 .txt:text/plain
超文本标记语言文本 .html:text/html
GIF图形 .gif:image/gif
JPEG图形 .jpeg,.jpg:image/jpeg
如果,文件上传接口后端是通过校检文件的MIME类型,也可以通过抓包修改文件的MIME类型进行绕过即可。
文件上传漏洞绕过姿势_第1张图片
2.针对扩展名进行检验

一般都是采取黑或白名单的方式进行过滤,通常白名单的方式要比黑名单相对安全,黑名单的话我们可以通过各种骚办法和思路绕过。一般都利用服务器的解析漏洞来上传

  • ①.老版本的IIS6中的目录解析漏洞,如果网站目录中有一个 /.asp/目录,那么此目录下面的一切内容都会被当作asp脚本来解析
  • ②.老板本的IIS6中的分号漏洞:IIS在解析文件名的时候可能将分号后面的内容丢弃,那么我们可以在上传的时候给后面加入分号内容来避免黑名单过滤,如
    a.asp;jpg
  • ③.旧版Windows Server中存在空格和dot漏洞类似于 a.php. 和 a.php[空格]
    这样的文件名存储后会被windows去掉点和空格,从而使得加上这两个东西可以突破过滤,成功上传,并且被当作php代码来执行
  • ④.nginx(0.5.x, 0.6.x, 0.7 <= 0.7.65, 0.8 <= 0.8.37)空字节漏洞
    xxx.jpg%00.php
    这样的文件名会被解析为php代码运行(fastcgi会把这个文件当php看,不受空字节影响,但是检查文件后缀的那个功能会把空字节后面的东西抛弃,所以识别为jpg)
    注:php版本要小于5.3.4,5.3.4及以上已经修复该问题
  • ⑤.apache1.x,2.x的解析漏洞,上传如a.php.rar a.php.gif
    类型的文件名,可以避免对于php文件的过滤机制,但是由于apache在解析文件名的时候是从右向左读,如果遇到不能识别的扩展名则跳过,rar等扩展名是apache不能识别的,因此就会直接将类型识别为php,从而达到了注入php代码的目的
  • ⑥.如果开发者忘记对文件后缀名进行小写转换,那么可通过大写来进行绕过,如PhP。 后缀名中加入空格绕过黑名单限制,如1.php
    利用windows特性,会自动去掉后缀名中最后的”.”,那么可在后缀名中加”.”进行绕过。
    如果开发者忘记对上传文件后缀名进行:: D A T A 处 理 , 利 用 w i n d o w s 的 N T F S 文 件 流 特 性 , 可 在 后 缀 名 中 加 ” : : DATA处理,利用windows的NTFS文件流特性,可在后缀名中加” :: DATAwindowsNTFS::DATA”进行绕过。

3.分析文件头内容来检查文件类型

与方法2不同,还有一种检查类型的方式是使用对于文件内容的验证机制,这种方法利用的是每一个特定类型的文件都会有不太一样的开头或者标志位。

图片文件通常有称作幻数的头字节,我们来看一下几种图片文件的幻数:
(注意!下面是二进制而不是文本格式的数据)
JPG
FF D8 FF E0 00 10 4A 46 49 46
GIF
47 49 46 38 39 61
(相当于文本的GIF89a)
PNG
89 50 4E 47

一般图片马就是利用服务器文件头的检验来生成的

copy  /b  1.jpg+1.php  2.jpg

或者文件幻术头绕过
图像相关的信息检测常用getimagesize( )函数。每种类型的图片内容最开头会有一个标志性 的头部,这个头部被称为文件幻术。常用图片类型有以下几类:
绕过jpg文件幻术检测要在文件开头写上下图的值在这里插入图片描述
Value = FF D8 FF E0 00 10 4A 46 49 46

绕过png文件幻术检测要在文件开头写上下图的值
在这里插入图片描述
Value = 89 50 4E 47

绕过gif文件幻术检测要在文件开头写上下图的值:
在这里插入图片描述Value = 47 49 46 38 39 61

然后在利用服务器的解析漏洞,让服务器把我们的jpg文件解析成相应的后端脚本文件如php,即可。

4.利用编辑器或者cms的上传漏洞进行操作

编辑器:fck、Eeditor
cms: 明确了cms后,通过google搜索cms漏洞 来进行操作

5.利用.htacess文件
上传当前目录的.htaccess 文件
例如内容为: AddType application/x-http-php .jpg (上传的jpg 均以php执行)
把.htaccess 上传后,且上传成功后,再上传内容为一句话的jpg文件

6.针对上传文件大小
有对文件大小进行了限制,如果不达到文件大小的要求,则不能上传,这种破解也很简单,在上传数据里不断填充垃圾数据或制作图片木马进行绕过。

7.针对服务器解析漏洞

文件解析漏洞总结

你可能感兴趣的:(web漏洞)