文章目录
文件上传漏洞原理
大部分的网站和应用系统都有上传功能,而程序员在开发文件上传功能时,没有对上传的文件做合理严谨的过滤,导致用户可以利用此功能。上传一个与网站脚本语言相对应的恶意代码动态脚本,例如(jsp、asp、php、aspx文件后缀)到服务器上,通过访问这些恶意脚本中代码,进一步影响服务器安全。
文件上传检测方法
客户端校验
一般是在网页中写一段JS脚本,用JS去检测,校验上传文件名的后缀名,有白名单和黑名单
判断方法:
在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包,所以可以通过抓包来 判断,如果弹出不准上传,但是没有抓到数据包,那么就是前端验证
**注意:**前端验证非常不可靠,传正常文件改数据包就可以绕过,甚至关闭JS都可以尝试绕过
服务端检测
常见手段:
- 检查Content-Type(内容类型)
- 检查后缀(检查后缀是主流)
- 检查文件名头
文件上传程流程
文件上传流程:
网页上传 -> 目标服务器的缓存 -> 移动到开发写好的地址 -> 重命名(开发决定命名方式)
1、先上传后检测
2、先检测后上传
文件上传绕过方法
前端验证绕过
Content-Type方式绕过
黑名单绕过
- 利用php、asp等脚本的别名绕过
- .htaccess文件绕过
- 大小写绕过
- 文件后缀(空)绕过
- 文件后缀(点)饶过【windows有一个特性,会自动去掉后缀名最后的】
- :: D A T A ( W i n d o w s 文 件 流 绕 过 ) 【 利 用 w i n d o w s 特 性 , 可 在 后 缀 名 中 加 ” : : DATA(Windows文件流绕过)【利用windows特性,可在后缀名中加” :: DATA(Windows文件流绕过)【利用windows特性,可在后缀名中加”::DATA”绕过】
- 构造文件后缀绕过
- 双写饶过
白名单绕过
- %00截断(GET型和POST型)
- 图片马(配合解析漏洞)
- 二次渲染饶过
- 条件竞争
解析漏洞
Windows自带的中间件:
- Windows server 2003 ==>IIS6.0
- Windows server 2008 ==>IIS7.0-7.5
- 注意:有些网站是混合的,既可以上传PHP又可以上传ASP
IIS6.0解析漏洞
1、
- IIS6.0==>1.asp;.jpg==>00截断的变形
- 检测时会以最后一个.去判断,为jpg
- 中间件解析时会以.asp解析
- 将aspshell.jpg重命名为shell.asp;1.jpg进行上传
2、
- a.asp/123.jpg==>会不会是个目录?
- 当中间件IIS6.0遇到a.asp/ 时 会把a.asp/ 下的所有内容当作asp文件执行
- asp站点 IIS6.0
- 一般来说aspx的站点会兼容asp
PHP CGI解析漏洞
- PHP和中间件Nginx交互时,会在本地开一个9000端口,PHP和Nginx通信全走9000端口
- 例如:
www.xx.com/phpinfo.jpg/1.php - 当中间件访问1.php 会认为它是一个PHP文件,当1.php不存在时,会自动跳转至上一级phpinfo.jpg,会把phpinfo.jpg误当作php文件去执行
防范措施
客户端
不在前端使用JS限制策略
通过服务端对上传文件进行限制
- 进行多条件组合检查:如文件的大小、路径、扩展名、文件类型、文件完整性
- 对上传的文件在服务器上存储时进行重命名
- 对服务端上传文件的目录进行权限控制,限制执行权限带来的危害