文件上传漏洞概念:
文件上传漏洞是指攻击者上传了一个可执行的文件到服务器并能够成功执行
漏洞成因:
由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件。
实验(低等级):
linux中可以使用mimetype查看文件类型,不仅仅是判断后缀名,还要判断文件头的十个字节
- 在dvwa中首先上传一个图片看功能是否正常
- 上传php一句话木马
- 访问木马页面,成功执行
附:
低级别服务器代码
实验(中等级):
- 上传php木马
- 用burpsuite截断并修改数据包内容,将文件类型改成图片格式
- 成功上传木马
附:
中级别服务器端源代码
实验(高等级):
- 上传php文件
- 使用burpsuite截断后修改文件类型和后缀名
- 成功上传php文件
附高安全级别服务器源代码:
对于一些过滤严格的服务器,过滤文件类型和扩展名还有文件头的起始信息解决办法
可以用burpsuite对在上传的图片文件中加入php代码,也能成功绕过过滤执行代码
防御方法:
文件上传漏洞的防御,主要围绕一开始提到的几点,一是文件上传路径,二是文件访问权限,三是文件执行权限。并且由于业务关系,根据所上传文件的类型也需要进行不同的防御。比如很多文件上传点都在用户头像上,并且由于用户登录的时候需要显示头像,即在HTML源码中会爆出路径,因此对于图片文件的防御方法,主要是采用白名单以及图片渲染,这样即使结合解析漏洞或者是文件包含漏洞也没法getshell。另外的一种方法是将用户上传的文件都放到指定的目录中,同时在服务器配置中设定该目录下的所有文件不可执行,但是该方法存在的风险即是在路径可知的情况下配合文件包含漏洞即可突破。因此,个人觉得,针对文件上传的最好防御方法即是让上传路径不可知,将用户上传文件的路径保存到数据库中,并且在需要的时候再去读取加载。