当前位置:网站首页>文件上传漏洞(二)
文件上传漏洞(二)
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 单独设置文件服务器的域名
边栏推荐
- 使用jOOQ 3.14合成外键在视图上写隐式连接
- MySQL classic 50 practice questions and the most detailed analysis of the whole network
- 科技赋能拉萨之“肺”,华为助力拉鲁湿地智慧管理守护绿水青山
- BGP+MPLS综合实验
- 一文搞懂C操作符
- Analysis of the source code of the JS UI framework of Hongmeng system
- 8/1 思维+扩展欧几里得+树上dp
- Write implicit join on view with jOOQ 3.14 synthetic foreign key
- npm、cnpm的安装
- Toolbox App 1.25 新功能一览 | 版本更新
猜你喜欢

rhce homework

Not annotated parameter overrides @NonNullApi parameter

Nacos注册中心的部署与用法详细介绍

能与观众实时互动的Claper

The international top conference OSDI included Taobao system papers for the first time, and the device-cloud collaborative intelligence was recommended by the keynote speech of the conference

MySQL Advanced Statements (1)

MySQL高级语句(一)

mysql索引失效的常见9种原因详解

node安装及环境变量配置

MySQL高级语句(一)
随机推荐
zabbix自动发现和自动注册
MySql 5.7.38 download and installation tutorial, and realize the operation of MySql in Navicat
关于ue4.27像素流送打包后的本地服务器问题
MySql 5.7.38下载安装教程 ,并实现在Navicat操作MySql
Nacos installation configuration and single-machine deployment tutorial
zabbix auto-discovery and auto-registration
股价屡创新低 地产SaaS巨头陷入困境 明源云该如何转型自救?
Node的安装与环境变量的配置
MySQL高级语句(一)
Difference between npm and yarn
Toolbox App 1.25 新功能一览 | 版本更新
【npm install 报错问题合集】- npm ERR! code ENOTEMPTY npm ERR! syscall rmdir
Xgboost报错ValueError:无效的形状:标签(1650 2)
aTrust项目的相关操作与分享
APT + Transform 实现多模块应用Application生命周期分发
August 2022 plan, focusing on ue4 video tutorials
能与观众实时互动的Claper
The installation of NPM, CNPM
node安装和配置(node-v12.20.2-x64 ) 以及node版本切换介绍
node安装及环境变量配置