文件上传漏洞

文件上传漏洞_第1张图片

什么是文件上传漏洞?

文件上传漏洞指用户上传了一个可执行脚本文件,并且通过此脚本文件获得了执行服务器端端命令的能力。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意脚本并执行从而控制服务器。上传文件操作本身是没有问题的,问题在于文件上传到服务器后,服务器怎么处理和解释文件。

什么是webshell?

web指的是在web服务器上,而shell是用脚本语言编写的脚本程序,webshell就是就是web的一个管理工具,可以对web服务器进行操作的权限。webshell一般是被网站管理员用于网站管理、服务器管理等等一些用途,但是由于webshell的功能比较强大,可以上传下载文件,查看数据库,甚至可以调用一些服务器上系统的相关命令(比如创建用户,修改删除文件之类的),通常被黑客利用,黑客通过一些上传方式,将自己编写的webshell上传到web服务器的页面的目录下,然后通过页面访问的形式进行入侵,或者通过插入一句话连接本地的一些相关工具直接对服务器进行入侵操作。

文件上传漏洞的攻与防

前端限制:调用js函数检查上传文件的扩展名
  • 破解方法:修改前端页面,通过burpsuite抓包修改
服务端检查扩展名:白名单和黑名单策略
  • 破解方法:利用解析漏洞
漏洞名称 漏洞描述
老版本的IIS中的目录解析漏洞 如果网站目录中有一个 /.asp/目录,那么此目录下面的一切内容都会被当作asp脚本来解析
老版本的IIS中的分号漏洞 IIS在解析文件名的时候可能将分号后面的内容丢弃, a.asp;jpg
旧版Windows Server中存在空格和dot漏洞 类似于 a.php. 和 a.php[空格] 这样的文件名存储后会被windows去掉点和空格,从而使得加上这两个东西可以突破过滤,成功上传,并且被当作php代码来执行
nginx空字节漏洞 %00截断漏洞,test.php%00.jpg被解析为test.php
大小写漏洞 没有进行大小写转换,.PHP扩展名没在黑名单,依然被服务器接收
apache解析漏洞 apache在解析文件名的时候是从右向左读,如果遇到不能识别的扩展名则跳过a.php.rarx被识别为a.php
检查HTTP Header中的Content-Type
  • 破解方法:利用burpsuite等工具强行篡改Header
分析文件头内容来检查文件类型
  • 每一个特定类型的文件都会有不太一样的开头或者标志位。图片文件通常有称作幻数的头字节,通过检测该头字节判断是不是图片文件,其他类型的二进制文件类似。
  • 破解方法:给上传脚本加上相应的幻术头字节
限制web Server对于特定类型文件的行为
  • 举例:在一个上传图片的文件夹下面,使该文件夹里面只有图片扩展名的文件才可以被访问,其他类型都是拒绝访问。
  • 破解方法:不同的服务器有不同的应对策略,上传自己的配置文件覆盖掉服务器的配置文件即可。
  • 破解方法:HTML代码中有一个隐藏标签,这是文件上传的默认的文件夹,修改参数value的值,结合IIS解析漏洞当建立*.asa、*.asp格式的文件夹时,其目录下的任意文件都将被IIS当做asp文件来解析),就可以将恶意代码写入。
"hidden" name="Extension" value="up"/>

个人总结

  • 文件上传漏洞就是利用网站后台对文件过滤不严格,导致前端上传了脚本文件,然后通过中国菜刀等远程连接工具控制该脚本执行,从而达到控制服务器的目的。随着已知的漏洞如解析漏洞,字符截断漏洞,空字节漏洞,大小写漏洞等都被修复,以前的文件上传漏洞已经不那么管用,但是代码都是人写的,规则也是由人制定的,有规则就有漏洞,只要我们想办法把脚本文件传到服务器,文件上传攻击的一半工作量就能解决。在学习好基本的前后端代码编写的同时,也要掌握一些常见的漏洞,防止我们在代码开发的过程中尽量不要有前辈们的错误。
  • 文件上传漏洞通常与文件包含漏洞组合使用。
  • 本次实验的靶机为OWASP下的DVWA,所使用的渗透机为kali,工具为中国菜刀和kali下的burpsuite。

你可能感兴趣的:(网络安全)