「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」。
原理
- 文件上传(File Upload)是大部分Web应用都具备的功能,例如用户上传附件、改头像、分享图片等。
- 文件上传漏洞是在开发者没有做充足验证(包括前端,后端)情况下,允许用户上传恶意文件,这里上传的文件可以是木马、病毒、恶意脚本或者Webshell等。
- 即文件上传漏洞,通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带来的危害常常是毁灭性的,Apache、Tomcat、Nginx等都曝出过文件上传漏洞。
危害
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
2.发现直接上传超过,没有做限制,然后根据提示的路径拿中国菜刀连接一下
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,发现不行
2.然后由于它需要检测是不是图片,所以我们可以尝试把1.php的后缀改成jpg,然后通过burp抓包改回php
3.抓包成功,我们注意这个后缀,把它改成php,然后释放
4.回到界面,发现上传超过,再次使用菜刀进行连接
5.连接成功
法二:
1.我们还可以通过修改mime类型来绕过,还是使用1.php,我们先用1.php上传,然后burp抓包
2.这次我们修改下面的Content-Type,改为image/jpeg
,这样如果它是通过Content-Type来识别所上传的文件是否是图片的话,那就刚好可以绕过
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图片
2.然后我们发现这个图片马也可以当成正常图片浏览,但是我们用记事本打开,然后拉到最后一行,发现里面有一句话木马
3.我们将图片马上传,发现成功上传
4.用菜刀连接,成功
DVWA File Upload
• Impossible级别
- 使用了imagecreatefromjpeg创建一张图片,对传入的图片进行重新编码,去掉与图片不相关的信息,最后将处理后的文件保存。
防御措施
- 文件类型检测:白名单 优于 黑名单
- 使用安全的函数进行编程
- 熟悉业务部署环境的OS、Web Server配置