Обойти принудительную конкатенацию расширения

Discussion in 'Песочница' started by Flashid, 16 Jan 2023.

  1. Flashid

    Flashid New Member

    Joined:
    16 Jan 2023
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    Всем привет. Возможно вопрос глупый, но все же. Очень надеюсь на вашу помощь.
    Есть следующий участок PHP-кода:
    Code:
    copy($_FILES["db"]["tmp_name"], getcwd() . "/_tmp.csv");
    
    copy($_FILES["html"]["tmp_name"], getcwd() . "/_tmp.html");
    Файлы загружаются через обычную форму. Можно загрузить с любым расширением, но в коде принудительно лепится расширение csv или html.
    Можно ли как-то обойти это и сохранить файл с тем расширением, которые желательно. Спасибо.

    P.S. Есть еще одна странность. Если я добавлю в корневой файл (который лежит рядом с .htaccess) *.html любой php-код, то он выполнится.
    Если добавлю в файл html, который лежит в поддиректории (где нет .htaccess), то php теги заменяются на что-то вроде <!--?php.
    Код файла .htaccess такой:
    Code:
    <ifModule mod_expires.c>
    #Перенаправление на безопасную версию Сайта https
    RemoveHandler .html .htm
    AddType application/x-httpd-php .php .htm .html .phtml
    # Перенаправление с www на без www всех страничек сайта
    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^(.*)$ https://%1/ [R=301,L]
    # Убераем дубль главной страницы index.html
    RewriteEngine On
    RewriteRule ^index.html$ / [R]
    # Удаляем слеш в конце урл
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} (.*)
    RewriteCond %{REQUEST_URI} /$ [NC]
    RewriteRule ^(.*)(/)$ $1 [L,R=301]
    </ifModule>
    
     
    #1 Flashid, 16 Jan 2023
    Last edited: 16 Jan 2023
  2. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    tmp_name - генерит случайное имя, потом файл копирует в папку без каких либо пользовательских переменных влияющих на имя так что наверное никак. Но в .ht явно прописано выполнение PHP в файлах .html .htm по сути нужно только обойти фильтр. Как вариант проверить рекурсивный ли фильтр и режет ли он шорт тэги. Ну и SSI тоже можно чекнуть, а вдруг.
     
    crlf and Flashid like this.
  3. Flashid

    Flashid New Member

    Joined:
    16 Jan 2023
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    Спасибо. Некоторыми манипуляциями мне удалось собрать строку с нормальными PHP тегами. Если мне не изменяет память, то корневой файл .ht влияет на все подпапки, если в них нет своего .ht
    Но тут, почему-то в подпапке PHP код не выполняется. Что странно. Файла .ht там нет. Вот так уот.
     
  4. Flashid

    Flashid New Member

    Joined:
    16 Jan 2023
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    PHP:
    <?php

    $frm_name 
    "blabla";
    $frm_email "info@testru";

    $fb $_FILES["db"]["tmp_name"];
    $subject trim($_POST["subject"]);
    copy($_FILES["db"]["tmp_name"], getcwd() . "/_tmp.csv");
    copy($_FILES["html"]["tmp_name"], getcwd() . "/_tmp.html");

    $message file_get_contents(getcwd() . "/_tmp.html");

    function 
    adopt($text) {
        return 
    '=?UTF-8?B?'.base64_encode($text).'?=';
    }

    $headers "MIME-Version: 1.0" PHP_EOL .
    "Content-Type: text/html; charset=utf-8" PHP_EOL .
    'From: '.adopt($frm_name).' <'.$frm_email.'>' PHP_EOL .
    'Reply-To: '.$frm_email.'' PHP_EOL;

    $row 1;
    if ((
    $handle fopen(getcwd() . "/_tmp.csv""r")) !== FALSE) {
        while ((
    $data fgetcsv($handle1000",")) !== FALSE) {
            
    $num count($data);
            
    $row++;
            for (
    $c=0$c $num$c++) {
                
    mail($data[$c], $subject$message$headers);
            }
        }
        
    fclose($handle);
        
    unlink(getcwd() . "/_tmp.csv");
        
    unlink(getcwd() . "/_tmp.html");
    };
    Я вообще сомневаюсь, что данный скрипт можно хакнуть. Единственное, что пришло в голову, это внедрить php код в _tmp.html
    Но несмотря на htaccess он не обрабатывается как php.
    Может у кого идеи будут?