⽂件上传漏洞学习笔记
什么是⽂件上传漏洞?
⽂件上传漏洞是指由于程序员在对⽤户⽂件上传部分的控制不⾜或者处理缺陷,⽽导致的⽤户可以越过其本⾝权限向服务器上上传可执⾏的动态脚本⽂件。这⾥上传的⽂件可以是⽊马,病毒,恶意脚本或者WebShell等。这种攻击⽅式是最为直接和有效的,“⽂件上传”本⾝没有问题,有问题的是⽂件上传后,服务器怎么处理、解释⽂件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。
⽂件上传漏洞本⾝就是⼀个危害巨⼤的漏洞,WebShell更是将这种漏洞的利⽤⽆限扩⼤。⼤多数的上传漏洞被利⽤后攻击者都会留下WebShell以⽅便后续进⼊系统。攻击者在受影响系统放置或者插⼊WebShell后,可通过该WebShell更轻松,更隐蔽的在服务中为所欲为。
Webshell简介
WebShell就是以asp、php、jsp或者cgi等⽹页⽂件形式存在的⼀种命令执⾏环境,也可以将其称之为⼀种⽹页后门。攻击者在⼊侵了⼀个⽹站后,通常会将这些asp或php后门⽂件与⽹站服务器web⽬录下正常的⽹页⽂件混在⼀起,然后使⽤浏览器来访问这些后门,得到⼀个命令执⾏环境,以达到控制⽹站服务器的⽬的(可以上传下载或者修改⽂件,操作数据库,执⾏任意命令等)。
WebShell后门隐蔽较性⾼,可以轻松穿越防⽕墙,访问WebShell时不会留下系统⽇志,只会在⽹站的web⽇志中留下⼀些数据提交记录,没有经验的管理员不容易发现⼊侵痕迹。攻击者可以将WebShell隐藏在正常⽂件中并修改⽂件时间增强隐蔽性,也可以采⽤⼀些函数对WebShell进⾏编码或者拼接以规避检测。除此之外,通过⼀句话⽊马的⼩马来提交功能更强⼤的⼤马可以更容易通过应⽤本⾝的检测。<?php eval($_POST[a]); >就是⼀个最常见最原始的⼩马。
造成⽂件上传漏洞的原因以及原理
原因:
1 对于上传⽂件的后缀名(扩展名)没有做较为严格的限制
2 对于上传⽂件的MIMETYPE(⽤于描述⽂件的类型的⼀种表述⽅法) 没有做检查
3 权限上没有对于上传的⽂件⽬录设置不可执⾏权限,(尤其是对于shebang类型的⽂件)
怎么显示文件的扩展名
4 对于web server对于上传⽂件或者指定⽬录的⾏为没有做限制
原理:
在 WEB 中进⾏⽂件上传的原理是通过将表单设为 multipart/form-data,同时加⼊⽂件域,⽽后通过 HTTP 协议将⽂件内容发送到服务器,服务器端读取这个分段 (multipart) 的数据信息,并将其中的⽂件内容提取出来并保存的。通常,在进⾏⽂件保存的时候,服务器端会读取⽂件的原始⽂件名,并从这个原始⽂件名中得出⽂件的扩展名,⽽后随机为⽂件起⼀个⽂件名 ( 为了防⽌重复 ),并且加上原始⽂件的扩展名来保存到服务器上。