原理
-
文件上传(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创建一张图片,对传入的图片进行重新编码,去掉与图片不相关的信息,最后将处理后的文件保存。
防御措施
0.文件类型检测:白名单 优于 黑名单
1.使用安全的函数进行编程
2.熟悉业务部署环境的OS、Web Server配置
### 如何入门网络安全
#### 建议
多看书
阅读永远是最有效的方法,尽管书籍并不一定是最好的入门方式,但书籍的理解需要一定的基础;但是就目前来看,书籍是比较靠谱的入门资料。
现在Web安全书籍比较多,因此大家在学习的过程中可以少走了不少的弯路。如果以上推荐书籍阅读有困难,那就找自己能看得进的 Web 安全的书
当然纸上谈兵终觉浅,最好还是实践一下。
对于那些没有学习方向和资料的同学,可以看下我整理的资源,这份资料经历过社会的实践,可以说是当下全网较全的网络安全知识体系:
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析