文件上传漏洞(二)

本文详细阐述了Web应用程序中常见的安全问题,包括00截断漏洞、.htaccess攻击以及Web容器解析漏洞,如Apache、IIS和PHP-CGI的解析漏洞。通过实例展示了如何利用这些漏洞执行恶意代码。同时,还提到了针对文件上传漏洞的防御措施,如限制文件类型、改写文件名、设置权限以及使用独立的文件服务器域名。
摘要由CSDN通过智能技术生成

一、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 单独设置文件服务器的域名

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑战士安全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值