关于上传漏洞那些事儿

上传漏洞从切入点,可以分为两种一种是在客户端产生的,另外一种是服务端效验被绕过。

客户端额和服务端会产生的一些问题:
1.前端效验扩展名,某次某政府的站是用flash上传的,通过前端js交互限制了上传扩展名,记得是用的开源的某款产品,一般老CMS会存在这个问题,这种是在客户端产生的,可以直接上传一句话;
2.文件扩展名被绕过:比如asp程序,后端效验了不允许上传asp文件,用asa就可以绕过,php的用php2,php3可绕过,jsp用jspx可绕过。黑名单效验很早就被通告不靠谱了,采用白名单方式效验,限制只允许上传.jpg/jpeg/gif/png等,限制了也不能说就安全了,比如php,可以上传图片一句话***,上传后可以利用iis解析漏洞获取webshell了,如果不存在iis解析漏洞则可以继续找文件包含漏洞,或者全局变量覆盖+文件包含都可以拿到webshell,如果上面都问题都不存在了,依旧有其他办法可以被绕过。(比如后端没有效验大小写Asp、Php、Jsp等绕过判断)
3.00截断:在发送数据包的过程中,找到文件16进制最后一个字节,改为00,或者在文件扩展名后面加上;%00、;、chr(0)去截断,即C语言中的NULL结束符,00后面的将被忽略,例如shell.php%00.jpg,实际上传后为shell.php后面部分被截断了,如果是文件包含,还有另一种截断方式长文件名截断,win为259字节,linux为4096字节,如果上传shell.php././././././././.jpg,或者.或者/超过系统最大文件名则被截断。
4.上传类型绕过,分为两种在客户端上传文件的时候,会指定发送一个头字段Content-type,为文件类型,后端如果判断了文件类型,可以在客户端上传的时候,修改Content-type字段,还有一种是在服务端获取到文件后再判断文件类型,一般是图片文件会这么做,比如GIF格式的图片,文件头特征码为GIF89a,可以在上传的时候伪造文件头绕过服务端的判断。
5.跨目录漏洞,存在于上传路径在客户端发送,一般上传目录为Upload,而Upload路径没有执行权限,上传路径修改../Upload就有执行权限了,还可以上传畸形文件shell.php/shell.jpg同时可以嗅探绕过正则,以前xheditor编辑器判断上传文件名包括要包括图片扩展名, 用shell.jpg/shell.php就可以绕过去了。

暂时就想到这么多了,刚编辑了好多都被加速乐过滤了,没保存。。。解决方案如下:
文件最小权限原则,如果上传的是图片,则只有读写权限,没有执行权限,限制上传文件类型和文件扩展名白名单;下载漏洞,如果下载的文件类型少的话,推荐用swich分支语句控制参数范围,如果下载文件多,类型统一的话,限制下载类型,类型不统一的话限制下载目录,将..替换成空(禁止路径回溯),下载文件类型和白名单格式效验。
(针对图片一句话***的处理方案为限制执行权限或图片文件的二次渲染。)

相关推荐