文件上传漏洞
在现代互联网的Web应用中,上传文件是一种常见的功能,用为它可以提高业务的效率,比如很多的网课学习系统,允许用户上传头像、视频、图片、文档等许多类型的文件。一旦Web应用向用户提供的功能越多其受到攻击的风险就会越大,如果一个Web应用中存在文件上传漏洞,那么有些居心不良的用户就可以利用这个漏洞将可执行的脚本程序上传到服务器中,获取网站的权限,从而可以进一步获取整个服务器的权限,甚至可以危害到服务器的整个局域网。
文件上传漏洞产生的原因
服务器端代码未对客户端上传的文件进行严格的验证和过滤,导致可以上传一些脚本类型的文件。
文件上传漏洞的危害
居心不良的用户利用该漏洞上传的恶意脚本文件控制整个网站,甚至控制整个服务器。
常用的过滤方式
客户端验证
JS校验(该方法一般校验文件的后缀名、大小)
服务器端验证
文件头Content-Type字段校验(也就是mime)
文件内容头校验(如gif图片的文件头)
后缀名黑名单校验
后缀名白名单校验
自定义正则校验
利用一些正则表达式写一些自己想过滤的东西
WAF设备校验
不同的WAF设备有不同的校验规则
常见的绕过方法
删除或修改网页中的检测JS代码、抓包改包、上传允许的文件类型但带有木马的文件配合解析漏洞绕过、文件截断等等
演示
下面以DVWA靶机演示,分别演示在其low、medium等级下利用上传漏洞拿shell的步骤(high等级较难,还没有拿下。。):
low等级
现在进入的是low等级,先进行尝试直接上传shell.php
可以看到shell.php直接上传成功了,拿到中国蚁剑里面试试能不能连上
可以看到是可以的,因此推测low等级下的靶机是没有任何过滤的,可以直接上传shell的
medium等级
可以看到靶机在这里已经进入了medium等级,再试试能不能直接上传shell
可以在左上角看到上传不成功的提示,再来试试上传正常的图片
可以看到是上传成功的,接下来抓包修改一下mime试试
可以看到这里的mime格式是application/octet-stream,修改为image/jpeg
看到shell.php修改完之后是可以上传成功的,然后就可以和上面的一样去连接就好了