文件上传——基础知识
文件上传——基础知识
1.文件上传的简介
由于开发源在对用户文件上传功能的实现代码中没有严格限制用户上传的文件后缀、文件类型或者相关的处理缺陷,导致了攻击者能够越过其本身的权限向服务器上传可执行的动态脚本文件
简单而言,就是开发员的检验不严谨,使得攻击者能够通过上传可执行脚本从而获取到执行服务器端命令的能力
2.文件上传的原理
在文件上传的功能处,如果服务器脚本语言并没有对上传的文件进行严格的验证、检验以及过滤的话,就会导致攻击者能够上传一个Webshell到Web可访问的目录上,并将恶意文件传递给语言解释器去执行,之后就能够才服务器上获取命令权限,从而就行数据库执行,文件管理等相关的恶意操作。也有一部分是攻击者通过Web服务器的解析漏洞来突破Web应用程序的防护
3.文件上传的查找与判断
黑盒测试
文件后台
进入网站后台后,不一定能获取网站权限
个人中心
通过图片上传
文件扫描
使用工具进行扫描,得出相应的后台路径
白盒测试
- 进行代码分析
- 查找文件上传功能
4.文件上传漏洞危害
- 上传webshell,控制服务器,远程命令执行
- 上传系统百度、木马文件、构造僵尸网络
- 修改web界面
- 网络挂马和钓鱼
- 内网渗透
- 等等
5.文件上传漏洞注意事项
在文件上传的类型中, 我们需要去判别对应的文件上传利用方向,不同的方向有着不同的思路与渗透方法,如何判是在利用漏洞中的注意事项

6.文件上传在实际应用的说明
方法一
- 先直接传一个PHP文件,实战先传简单的试试。
- 然后传一个正常的图片,看看有无返回存储地址。
- 如果能上传就直接解析。
方法二
先传一个shell,然后进行修改。查看报文里面的内容connect-Type:image/jpeg,看看是否可以进行绕过,如果不行,在上传内容添加GIF89a(这个是图片相关格式的文件头)。当然上传了还得看是否能够被解析为php,所有的上传都要考虑是否能够被解析。
方法三
上传一个abc.abcd,目的只是为了查看是否为白名单还是黑名单绕过。黑名单限制一般为此文件类型不允许上传,考虑双写,大小写,空格,php2,php3,php4,php5,phtphtml,等方式
继续上传一个/htaccess文件,查看.htaccess文件能够设置服务器的解析文件的格式,匹配到dudu就已php的格式来解析,继而上传马
如果说.htaccess不能上传,接下来上传一个.user.ini,继而上传一个马
方法四
如果白名单限制上传
- 考虑00截断上传
- 文件包含漏洞+图片马
- 文件包含漏洞+二次渲染+图片马
方法五
上传的东西是否被服务器很快的删除或者移除,或者说上传成功,但是无法访问,这里就需要考虑条件竞争。
7.相关案例演示
(图片均来源于小迪安全)
(1)常规文件上传地址的获取
- 使用搜索引擎进行该网站的搜索inurl:upload.php

- 使用工具扫描该该网址

(2)不同格式下的文件类型后门测试
要遵守上传的格式,不同的格式对应着相对格式的渗透与上传漏洞利用


改变文件后缀名为jpg,再次访问

可以看见,访问该格式,里面的代码内容并不会被执行
(3)配合解析漏洞下的文件类型后门测试
相关靶场:
https://vulhub.org/#/environments/nginx/nginx_parsing_vulnerabilit

(4)本地文件上传漏洞靶场环境搭建
https://github.com/c0ny1/upload-labs(文件上传靶场)

(5)某CMS及CVE编号文件上传漏洞
CMS :




虽然这里显示上传失败,但是后台的文件中依旧是有我们上传的文件,也就是说,其实如何去判断后台是否成功是很关键的,所以不能轻易下结论。