Web安全领域的探索之文件上传漏洞

「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」。

原理

  • 文件上传(File Upload)是大部分Web应用都具备的功能,例如用户上传附件、改头像、分享图片等。
  • 文件上传漏洞是在开发者没有做充足验证(包括前端,后端)情况下,允许用户上传恶意文件,这里上传的文件可以是木马、病毒、恶意脚本或者Webshell等。
  • 即文件上传漏洞,通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带来的危害常常是毁灭性的,ApacheTomcatNginx等都曝出过文件上传漏洞。

危害

1、文件上传(File Upload)是大部分Web应用都具备的功能,例如用户上传附件、修改头像、分享图片/视频等 
2、正常的文件一般是文档、图片、视频等,Web应用收集之后放入后台存储,需要的时候再调用出来返回 
3、如果恶意文件如PHP、ASP等执行文件绕过Web应用,并顺利执行,则相当于黑客直接拿到了Webshell 
4、一旦黑客拿到Webshell,则可以拿到Web应用的数据,删除Web文件,本地提权,进一步拿下整个服务器甚至内网 
5、SQL注入攻击的对象是数据库服务,文件上传漏洞主要攻击Web服务,实际渗透两种相结合,达到对目标的深度控制
复制代码

演示

DVWA File Upload

  • Low级别
  • basename( ) 函数返回路径中的文件名部分。
  • move_uploaded_file( ) 函数把上传的文件移动到新位置。如果成功该函数返回TRUE,如果失败则返回 FALSE
  • 没有对上传做任何限制
  • 攻击
  • 上传webshell
1.首先dvwa环境开启,然后准备一个一句话木马的php文件,代码为<?php @eval($_POST['lin92n']);?>,随便命名为1.php

image-20201231225535776

2.发现直接上传超过,没有做限制,然后根据提示的路径拿中国菜刀连接一下

image-20201231225834183

3.连接成功

DVWA File Upload

  • Medium级别
  • Low基础上使用文件上传时的Content-Type字段判断文件是否为jpeg或 是png格式的图片。
  • 限制上传文件的大小为10000B(约为97.6KB
  • 绕过方法
  • 抓包修改Content-Type字段
  • 使用 %00截断,php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off时,可以在文件名中使用 %00截断,所以可以把上传文件命名为hack.php%00(需要URLdecode).png

法一:

1.首先试验一下之前的1.php,发现不行

image-20201231230250341

2.然后由于它需要检测是不是图片,所以我们可以尝试把1.php的后缀改成jpg,然后通过burp抓包改回php

image-20201231230524850

3.抓包成功,我们注意这个后缀,把它改成php,然后释放

image-20201231230625936

4.回到界面,发现上传超过,再次使用菜刀进行连接

image-20201231230813057

5.连接成功

法二:

1.我们还可以通过修改mime类型来绕过,还是使用1.php,我们先用1.php上传,然后burp抓包

image-20201231231100423

2.这次我们修改下面的Content-Type,改为image/jpeg,这样如果它是通过Content-Type来识别所上传的文件是否是图片的话,那就刚好可以绕过

image-20201231231247082

3.修改之后放包,回到界面查看,ok,上传成功,然后拿菜刀连接一下,也是可以连接的

DVWA File Upload

  • High级别
  • Medium基础上,改用后缀名来判断文件类型。
  • getimagesize( ) 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。
  • 绕过
  • 制作图片木马,将图片的头字段信息以二进制方式加到php文件头部。
  • **copy 1.jpg/b+php.php/a 1.php**
  • 使用 %00截断,但是strrpos函数在寻找最后一个.时也被截断。
1.这一关尝试一下之前的绕过方法,发现均不可以,我们可以使用图片马的形式上传,所谓图片马就是将一句话木马插入到图片当中,我们借助windows的命令,linux也有相关命令,这里只演示windows,准备好一个图片test.jpg,一句话木马文件1.php,使用命令copy test.jpg/b + 1.php/a 1.jpg生成1.jpg图片

image-20201231231900481

2.然后我们发现这个图片马也可以当成正常图片浏览,但是我们用记事本打开,然后拉到最后一行,发现里面有一句话木马
3.我们将图片马上传,发现成功上传

image-20201231232136309

4.用菜刀连接,成功

image-20201231232253482

DVWA File Upload

Impossible级别

  • 使用了imagecreatefromjpeg创建一张图片,对传入的图片进行重新编码,去掉与图片不相关的信息,最后将处理后的文件保存。

防御措施

  1. 文件类型检测:白名单 优于 黑名单
  2. 使用安全的函数进行编程
  3. 熟悉业务部署环境的OS、Web Server配置

Guess you like

Origin juejin.im/post/7069651017423388680