当前位置:网站首页>文件上传漏洞(二)
文件上传漏洞(二)
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 单独设置文件服务器的域名
边栏推荐
- zabbix auto-discovery and auto-registration
- Ue after video tutorial first
- Dataset:机器学习中常用数据集下载链接集合之详细攻略
- abaqus如何快速导入其他cae文件的assembly?
- MySQL Advanced SQL Statements (2)
- 宝塔+FastAdmin 404 Not Found
- 科技赋能拉萨之“肺”,华为助力拉鲁湿地智慧管理守护绿水青山
- MySQL Index Common Interview Questions (2022 Edition)
- Ant three sides: MQ message loss, duplication, backlog problem, what are the solutions?
- MySQL高级学习笔记
猜你喜欢
随机推荐
8/1 思维+扩展欧几里得+树上dp
Xgboost报错 ValueError: Invalid shape: (1650, 2) for label
C# Coding Conventions Handbook
MySQL 5.7 安装教程(全步骤、保姆级教程)
.NET静态代码织入——肉夹馍(Rougamo) 发布1.1.0
punch day05
蚂蚁三面:MQ 消息丢失、重复、积压问题,有哪些解决方案?
npm 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
Toolbox App 1.25 New Features at a Glance | Version Update
NPM ---- 安装yarn
zabbix自动发现和自动注册
Nodejs安装教程
node安装和配置(node-v12.20.2-x64 ) 以及node版本切换介绍
MySql COUNT statistics function explanation
pointer arithmetic in c language
Not annotated parameter overrides @NonNullApi parameter
Servlet
MySQL - Multi-table query and case detailed explanation
ue先视频教程后深入
Nacos installation detailed process