网络安全笔记--文件上传1

1. 基础

1.1 初识文件上传漏洞

文件上传漏洞是一种非常严重的漏洞,如果Web没有对用户上传的文件进行有效地过滤,若有不法分子上传恶意脚本,就有可能获取执行服务端命令的能力,严重影响服务器安全。

文件上传漏洞如何查找和判断呢?

黑盒中,可以通过扫描获取上传、或者查找后台系统上传以及会员中心上传等找到上传入口
白盒中,通过分析源代码查找有没有文件上传功能以及上传漏洞

接下来判断文件上传的类型,并选择对应的方法进行测试


1.2 常规文件上传地址获取

WebPathBrute下载

  • 搜索upload.php的页面,在页面中找到上传入口
    在这里插入图片描述
  • 用扫描工具进行扫描
    在这里插入图片描述

1.3 配合解析漏洞下的文件类型后门测试

解析漏洞

  • IIS6/7.X
  • Apache
  • Nginx

Nginx解析漏洞复现

  • 使用vulhub启动漏洞环境

网络安全笔记--文件上传1_第1张图片路径:

/root/vulhub-master/nginx/nginx_parsing_vulnerability

执行docker-compose up -d启动容器

网络安全笔记--文件上传1_第2张图片
打开网址:
网络安全笔记--文件上传1_第3张图片选取一张图片,打开并写入,如下:

网络安全笔记--文件上传1_第4张图片上传并打开:

输入/.php后回车,代码执行:

网络安全笔记--文件上传1_第5张图片


1.4 本地文件上传漏洞靶场环境测试

测试环境:upload-labs靶场
upload-labs下载

网络安全笔记--文件上传1_第6张图片网络安全笔记--文件上传1_第7张图片

测试思路:js代码过滤非图像文件,因此下载html文件,删除其中关于过滤的js代码,再次进行上传操作。

网络安全笔记--文件上传1_第8张图片网络安全笔记--文件上传1_第9张图片上传成功!


1.5 CVE编号文件上传漏洞测试

  • 使用vulhub启动漏洞环境

网络安全笔记--文件上传1_第10张图片
路径:

/root/vulhub-master/weblogic/CVE-2018-2894

查看密码:

docker-compose logs | grep password

打开网站,并登录,点击base_domain的配置,在“高级”中开启“启用 Web 服务测试页”选项:

网络安全笔记--文件上传1_第11张图片
访问http://ip:7001/ws_utc/config.do,设置Work Home Dir为

/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css

网络安全笔记--文件上传1_第12张图片
点击安全,增加,然后上传webshell

网络安全笔记--文件上传1_第13张图片
获取提交后系统返回的时间戳:

网络安全笔记--文件上传1_第14张图片
访问:

http://xxx:7001/ws_utc/css/config/keystore/[时间戳]_[文件名]

网络安全笔记--文件上传1_第15张图片上传的jsp文件被执行!


2. 后端绕过

2.1 常见验证

  • 后缀名: 黑名单、白名单
  • 文件类型: MIME信息
  • 文件头: 内容头信息

黑名单:明确不让上传的格式后缀,如jsp、asp、war等
白名单:明确可以上传的格式后缀,如jpg、zip、gif等


2.2 黑名单

2.2.1 MIME绕过

upload-labs : Pass-02

网络安全笔记--文件上传1_第16张图片打开BurpSuit工具进行抓包,在网页中选择文件,点击上传后,BurpSuit抓到包,说明文件过滤功能应该在服务端。

网络安全笔记--文件上传1_第17张图片
方法: 修改Content-Type数据,改为:image/jpeg

网络安全笔记--文件上传1_第18张图片点击Forward按钮进行提交,上传成功!

网络安全笔记--文件上传1_第19张图片
打开目录,可以看到刚刚上传的文件。

网络安全笔记--文件上传1_第20张图片


2.2.2 黑名单绕过

upload-labs : Pass-03

网络安全笔记--文件上传1_第21张图片
查看题目源码,发现这是一个黑名单验证,黑名单不允许上传.asp, .aspx, .php, .jsp后缀的文件,但可以上传.phtml、 .php3 .php5、phps等等。

网络安全笔记--文件上传1_第22张图片本节刚开始讲过,黑名单是规定不允许上传的文件,因此我们可以找其它后缀的文件,这里我们上传一个.php5文件。

网络安全笔记--文件上传1_第23张图片上传成功!

网络安全笔记--文件上传1_第24张图片
输入上传的文件地址,回车后,文件执行:
网络安全笔记--文件上传1_第25张图片


2.2.3 大小写绕过

upload-labs : Pass-06

看第六关的代码可以看出来,这一关没有强制小写转换,因此可以考虑大小写绕过的方式:

网络安全笔记--文件上传1_第26张图片
网络安全笔记--文件上传1_第27张图片
执行成功!


2.2.4 空格绕过

upload-labs : Pass-07

对比前面关的代码,发现本关少了“首尾去空”代码

网络安全笔记--文件上传1_第28张图片

因此,可以考虑通过空格绕过,通过抓包工具抓取数据包,在文件名后缀上加空格,以此绕过后端检测:

网络安全笔记--文件上传1_第29张图片
拖动图片,执行php代码:

网络安全笔记--文件上传1_第30张图片


2.2.5 点绕过

upload-labs : Pass-08

查看源码,发现没有对后缀名末尾的点进行处理:
网络安全笔记--文件上传1_第31张图片
因此,可以考虑通过空格绕过,通过抓包工具抓取数据包,在文件名后缀上加.,以此绕过后端检测:

网络安全笔记--文件上传1_第32张图片网络安全笔记--文件上传1_第33张图片执行成功!


2.2.6 ::$DATA绕过

upload-labs : Pass-09

查看源码,发现缺少了过滤后缀名::$DATA的源码:

网络安全笔记--文件上传1_第34张图片

文件名+::$DATA 会把::$DATA之后的数据当成文件流处理。不会检测后缀名,且会保持::$DATA之前的文件名

网络安全笔记--文件上传1_第35张图片

拖动图片,跳转到代码执行页面:

网络安全笔记--文件上传1_第36张图片执行成功!


2.2.7 文件后缀点、空格绕过

upload-labs : Pass-10

查看源代码,发现会过滤空格和点,但是只过滤一次,因此可以写两个空格和点,这样代码只会过滤一个空格和点,以此成功绕过
网络安全笔记--文件上传1_第37张图片
网络安全笔记--文件上传1_第38张图片
成功绕过!

网络安全笔记--文件上传1_第39张图片


2.2.5 双写绕过

upload-labs : Pass-11

网络安全笔记--文件上传1_第40张图片

通过查看代码得知,所有在黑名单里的代码会被替换成“”,但是与上关一样,它只替换以此,因此,可以将后缀双写:

网络安全笔记--文件上传1_第41张图片


2.3 白名单

2.3.1 GET方式%00截断

upload-labs : Pass-12

查看源代码如下:
网络安全笔记--文件上传1_第42张图片
网络安全笔记--文件上传1_第43张图片其原理在于:%00后面的字符会被截断,如:
…/upload/12.php%00128ab385fdac28a9.jpg
128ab385fdac28a9.jpg会被%00截断,最后系统保留的是:…/upload/12.php

【注意:此关测试时需要低版本的的php,亲测php5.2.17可用】


2.3.2 POST方式%00截断

upload-labs : Pass-13

网络安全笔记--文件上传1_第44张图片与上一关思路一样,不同的是本关的提交方式为POST,在数据包中按上关在POST数据中添加即可
添加%00时要手动解码,因为get会自动将%00解码,而在POST不会解码,需要自己手动解码

你可能感兴趣的:(python,web安全,服务器,安全)