文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。
大部分的网站和应用系统都有上传功能,一些文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过Web访问的目录上传任意PHP文件,并能够将这些文件传递给PHP解释器,就可以在远程服务器上执行任意PHP脚本。
有文件上传就可能存在文件上传漏洞,就可以判断是否存在文件上传漏洞,是否存在文件上传漏洞需要看对方的代码写的是否安全完整,如果在莫方面存在疏忽,就可能存在文件上传漏洞。
一些web应用程序中允许上传图片、文本或者其它资源到指定的位置,文件上传漏洞就是利用这些可以上传文件的地方将恶意代码植入到服务器中,再通过url去访问以执行代码。
造成文件上传漏洞的原因是:
1.服务器配置不当。
2.开源编辑器上传漏洞。
3.本地文件上传限制被绕过。
4.过滤不严或被绕过。
5.文件解析漏洞导致文件执行。
6.文件路径截断。
1.上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行。
2.上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似)。
补充:flash在跨域时唯一的限制策略就是crossdomain.xml文件,该文件限制了flash是否可以跨域读写数据以及允许从什么地方跨域读写数据。位于www.A.com域中的SWF文件要访问www.B.com的文件时,SWF首先会检查www.B.com服务器目录下是否有crossdomain.xml文件,如果没有,则访问不成功;若crossdomain.xml文件存在,且里边设置了允许www.A.com域访问,那么通信正常。所以要使Flash可以跨域传输数据,其关键就是crossdomain.xml。
3.上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行或者直接自动运行。
4.上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。
除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢出服务器的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其内容包含了PHP脚本,再通过“本地文件包含漏洞(Local File Include)”执行此脚本;等等。
可以利用文件上传漏洞上传网站后门,进而拿到网站的权限,因此文件上传漏洞如果存在,基本就是高危漏洞,其危害一般比SQL注入还要高。
1.黑盒查找:即对方的原码以及一些网站情况我们并不知道。此时可以通过文件扫描、目录扫描等来扫面敏感文件进而获取文件上传的地址;可以通过网站上给出的一些相关应用,如:会员中心,会员中心里基本都会存在上传图像的功能,这里就也是一个可以进行测试的点;网站的后台里也存在文件上传(在进入了后台之后仅仅获得了后台权限,还没有获得到网站权限),可以通过后台获得网站权限。
2.白盒查找:即拿到了对方的原码。此时从代码中可以分析哪些地方存在文件上传操作,进而去分析有没有文件上传漏洞。
3.文件上传的判断就需要进行文件上传的抓包来进行测试了。
1.文件可上传(废话)。
2.上传文件路径可知,如果路径不可知就没法访问,亦无法配合诸如文件包含漏洞进行文件执行。
3.上传文件可以被访问。
4.上传文件可以被执行,当然这一步也不是必需的,比如配合文件包含漏洞。
在拿到文件上传之后,需要对文件上传的类型进行区分,判断其是属于编辑器的文件上传还是属于第三方应用的还是一些简单的像会员中心的一些东西。
因为在区分之后才能采取相应的办法,如:如果是编辑器的文件上传的漏洞,就可以去网上搜关于编辑器的相关漏洞来进行文件上传。
1.通过搜索引擎对应搜索后随便打开一个网站。
2.打开后可以看到网站的路径如图所示。
这个路径是字典里常有的,可以通过扫描工具来获取。
3.下滑可以看到文件上传的入口。
4.也可以使用关键字进行搜索。
5.打开后下滑可以看到文件上传的入口。
6.也可以复制对应的网址,然后使用工具进行扫描。
7.可以看到这里存在编辑器“kindeditor”,即思维导图里的“编辑器类”。
8.通过搜索引擎对应搜索后随便打开另一个例子。
9.可以看到此处可以进行文件上传。
10.在登陆之后可以看到头像也可以作为文件上传的一个入口。
11.总结:合理利用各种方法进行文件上传入口的寻找以及文件上传地址的获取。
1.在WWW目录下新建一个“test.php”文件。
2.文件内写入如下代码并保存。
3.此时通过浏览器访问此后缀为php的文件可以成功将文件内的代码执行。
4.将文件的后缀名修改为jpg。
5.再次通过浏览器访问,可以看到文件内的代码就没有被正确执行了。
6.总结:在进行文件上传时,要注意上传的文件的后缀。
这里使用的是靶场
1.将靶场环境启动。
2.查看端口。
3.查看ip地址。
4.将靶场网页打开,可以看到文件上传位置。
5.首先尝试上传上一次实验中将php后缀的文件修改为jpg后缀的文件。
6.可以看到上传失败了,因为网站对上传的内容存在验证,检测图片的完整性,必须是正常的图片才能进行上传。
7.从网上下载一张图片。
8.使用Notepad++打开图片,在乱码末尾添加php代码(重复添加了好几个是为了确保成功)。
9.再次将图片进行上传,可以看到本次图片上传成功了,并且得到了图片的地址。
10.对图片的地址进行访问,可以看到成功显示了图片。
11.此时在网址的末尾添加“/1.php”后再次进行访问,可以看到返回的网页的上半部分是乱码,而下半部分即是执行了最开始添加的php语句。
12.那么可以想到,这个办法在上一个实验里可不可行呢?答案是否定的。
13.原因在于这个实验的环境里包含一个名为“解析漏洞”的漏洞。
补充:解析漏洞主要是服务器应用程序在解析某些精心构造的后缀文件时被IIS、Apache、Nginx在某种情况下被解释成脚本文件格式并得以执行而产生的漏洞,大部分解析漏洞的产生都是由应用程序本身的漏洞导致的。