当前位置:网站首页>文件上传漏洞(二)
文件上传漏洞(二)
2022-08-02 06:00:00 【黑战士安全】
一、00 截断
00 就是 Null(空字符)字符,URL 中表现为%00,00 截断会导致文件上传路径截断(条件:
PHP<5.3.29,且 GPC 关闭)。
我们以 upload-labs pass-11 为例
if(isset($_POST['submit'])){
$ext_arr = array('jpg','png','gif');
$file_ext =
substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1); if(in_array($file_ext,$ext_arr)){
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext; if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = '上传错!';
}
} else{
$msg = "只允许上传.jpg|.png|.gif 类型文件!";
}
}
访问:http://ip/upload/test.php
二、.htaccess 攻击
.htaccess 是 Apache 服务器的分布式配置文件,该配置文件会覆盖 Apache 服务器的全局配置,作用域是当前目录及其子目录。如果一个 Web 应用允许上传.htaccess 文件,那就意味着攻击者可以更改 Apache 的配置,这是十分危险的。
.htaccess 攻击想象空间非常大,首先 Apache 的配置,允许.htaccess 文件覆盖掉 Apache
的配置。
在全局配置文件 httpd.conf 中,AllowOverride All 配置默认是开启的,所以允许覆盖。
2.1 将.png 文件当作 PHP 文件解析
将以下代码写入文件,并保存成.htaccess ,放到测试目录下
AddType application/x-httpd-php .png
并在同一个目录下创建一个文件 info.png
<?php phpinfo();
?>
当我们访问文件时,[info.php]内的 php 代码将会被执行
2.2 文件名中包含 php 关键字
当文件名[info.php.png] 中包含关键字[.php] ,并且.htaccess 文件内容如下,info.php.png中的代码会被执行
AddHandler php5-script php
2.3 匹配文件名
以下配置是匹配文件名[aject], 找到该文件,并执行其中的 PHP 代码
<FilesMatch "ajest">
SetHandler application/x-httpd-php
</FilesMatch>
以 upload-labs pass-4 为例
1、先上传[.htaccess] 文件
<FilesMatch "ajest">
SetHandler application/x-httpd-php
</FilesMatch>
2、再上传文件名为 ajest 的文件
<?php phpinfo();
?>
3、访问文件,http://ip/upload/ajest
三、Web 容器解析漏洞
Web 容器解析漏洞,就是 Web 容器在解析脚本现的“bug”
3.1 Apache 解析漏洞
info.php.xxx.xx.x
注意:要使 apache 解析不知道的扩展名文件,当做 php 文件解析,需要修改配置
删除$符号
3.2 IIS6.0 解析漏洞
实验环境:windows2003
1、asp;1.jpg(1 可以不要,也可用任意字符代替)新建文件名为 time.asp.1.jpg 文件
<%=time()%>
浏览器访问该文件,看能否被解析。
2、1.asp/time.jpg(1 可用任意字符代替)
新建文件夹命名为[1.asp],在里面新建文件,命名为[time.png]
3.3 PHP CGI 解析漏洞
1、IIS7.0/7.5
windows2008 下的 IIS7.0/7.5+PHP 环境让 iis7.0/7.5 支持 PHP 环境
在 IIS7.0 下,新建 8000 端口的网站
⑴打开处理程序映射
⑵点击添加模块映射
⑶打开 FastCGI 设置,对创建的模块进行编辑
⑷在 C:\inetpub\wwwroot\目录下新建文件 info.png
<?php phpinfo();
?>
⑸打开浏览器访问:
localhost:8000/info.png/1.php(1 可省略,也可是任意字符)
防御:
方法一
方法二:修改php.ini配置文件(cgi.fix_pathinfo)
2、Nginx 解析漏洞
此漏洞环境通过 vulhub 项目启动
cd ~/vulhub/nginx/ngix_parsing_vulnerability sudo docker-compose up -d
正常的访问
http://ip/uploadfiles/nginx.png
触发漏洞
http://ip/uploadfiles/nginx.png/1.php
3.4 Nginx 空字节漏洞
localhost/info.html%00.php
3.5 Nginx 文件名逻辑漏洞(CVE-2013-4547)
此漏洞环境通过 vulhub 项目启动 cd ~/vulhub/nginx/ CVE-2013-4547 sudo docker-compose up -d
访问:https://vulhub.org/#/environments/nginx/CVE-2013-4547/
四、文件上传漏洞的防御
关于文件上传的防御,防住危险的脚本类型是最基本的防御,最理想的就是能够过滤掉图片马中的恶意代码。如果一个 Web 应用能够上传图片木马,那么我们认为这个 Web 应用是不安全的。文件上传漏洞的防御主要从以下几个方面考虑。
4.1 代码角度
1、采用白名单策略,严格限制上传文件的后缀名。
2、进行二次渲染,过滤掉图片木马中的恶意代码。
3、将用户上传文件改名存放,包括文件名及其扩展名,并将其存放路径和文件名存放在数据库中。系统使用文件时,通过查询数据库动态获取。
4、使用随机数改写文件名和路径
4.2 设置权限
限制上传目录下拥有的执行权限
4.3 单独设置文件服务器的域名
边栏推荐
- MySQL 23道经典面试吊打面试官
- Go inside the basic knowledge
- HCIP BGP综合实验 建立对等体、路由反射器、联邦、路由宣告及聚合
- Nodejs installation and global configuration (super detailed)
- Nacos注册中心的部署与用法详细介绍
- Tips for programmers to write PPT
- DNS resolution process
- Reverse resolve dns server
- MySql 5.7.38 download and installation tutorial, and realize the operation of MySql in Navicat
- [Cartoon] 2021 full score programmer behavior comparison table (latest version)
猜你喜欢
随机推荐
Understand C operators in one article
zabbix auto-discovery and auto-registration
MySQL classic 50 practice questions and the most detailed analysis of the whole network
Not annotated parameter overrides @NonNullApi parameter
MySQL union query (multi-table query)
View source and switch mirrors in two ways: npm and nrm
MySQL - 多表查询与案例详解
odoo field 设置匿名函数domain
暑期总结(三)
8/1 思维+扩展欧几里得+树上dp
C# Coding Conventions Handbook
The nacos source code can not find the istio package
mysql高阶语句(一)
zabbix email alarm and WeChat alarm
MySQL - Multi-table query and case detailed explanation
排雷小游戏(C语言)
Tips for programmers to write PPT
The stock price has repeatedly hit new lows, and the real estate SaaS giant is in trouble. How should Mingyuan Cloud transform and save itself?
项目开发规范
ASP.NET Core Web API 幂等性