文件操作漏洞
漏洞介绍
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,“文件上传”本身是没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果
漏洞危害
上传文件的时,服务器端脚本语言未对上传的文件进行严格的验证和过滤,就有可能上传恶意的文件,从而控制整个网站,甚至是服务器。
漏洞条件
- 文件可上传
- 知道文件上传的路径
- 上传文件可以被访问
- 上传文件可以被执行
文件上传可控点
- Content-Length,即上传内容大小
- MAX_FILE_SIZE,即上传内容的最大长度
- filename,即上传文件名
- Content-Type,即上传文件类型
- 请求包中的乱码字段,即是所上传文件的内容
- 有可能存在请求包中的可控点还有上传路径,只是上面的示例中没有出现
挖掘思路
- 上传点都调用同一个上传类,直接全局搜索上传函数
- 黑盒寻找上传点,代码定位
代码案例
- name:客户端的原始上传文件名称
- Type:上传文件的MIME类型
- Tmp_name:服务器端用来保存上传文件的临时文件路径
- Error:上传文件时的错误信息
- Size:上传文件的大小,单位是b
实例
新建upload.html
新建upload.php
新建1.php一句话木马
上传1.php
文件上传绕过-客户端
- 1.用firebug将form表单中的onsubmit事件删除
- 2.上传木马文件,Burp拦截数据包,修改扩展名
文件上传绕过-服务端
- 1.黑白名单过滤
- 2.修改MIME类型
- 3.截断上传攻击
- .htaccess文件攻击
- 5.目录验证
修复方案
- 检测文件上传内容
- 黑白名单验证,检测文件扩展名是否合法
- MIME验证,检测文件的MIME类型
- 限制文件大小
- 更改临时文件夹的路径
- 读取上传文件的绝对路径 与文件名称
- 隐藏文件路径