Что нового

PHP код в картинках

  • Автор темы Автор темы JustElectro
  • Дата начала Дата начала
J

JustElectro

Гость
Здравствуйте, форумчане ! Прочитал одну интересную статью (ссыль) в которой описывался метод разбора картинки и вставка кода остановки компилирования (halt_compiler, как я понял) в начало оной. Так же читал хабр (ссыль2), но все же метод по 1-й ссылке показался куда более эффективнее. Тут, собственно, и вопрос: как разобрать картинку в hex (нашел, кстати, метод сборки pack("H*", $hex) ), добавив в неё вышесказанный код (halt_compiler) и собрать обратно ?PS: можно конечно все картинки сохранять на сервер с ресайзом, но как тогда быть с gif ?
 
$array = array ('jpg', 'gif');$file = explode ('.', $_FILES["file"]["name"]);if (!in_array (end ($file), $array)) //Вывод ошибкиКод выполняться не должен.
 
priplili,А если я возьму и напишу file.php -> file.gif и залью к тебе шелл?В любом случае твой вариант плох :)
 
Так суть же в том, что в файле upload.php ограничение уже есть (и на расширение и на .htaccess) + блокировка на отображение файлов != картинка. Но это никак не мешает добавить в картинку код и загрузить её. Интересует как отсечь на корню (разбирая картинку, нахождение php тэгов, если есть тег -> die(); , иначе сборка обратно и сохранение) ? Негативное явление - это ресурсоёмкость операции сборки\\разборки...
 
WebSet,да хоть деву Марию, он не выполнится
 
Цитата: pripliliда хоть деву Марию, он не выполнитсяВозьму к шаблону через include подрублю и вуаля.
 
WebSet,Как ты до шаблонизатора доберёшься? Сейчас демо форму сделаю, залей туда шелл.
 
Цитата: pripliliКак ты до шаблонизатора доберёшься?Ок, если я через багу dle форума схерачу хеш админа и раскодирую его, тем самым получив доступ к админке? Да и вообще, если я получу доступ к админке то у меня развязаны руки.В любом случае твой вариант уг. Зачем допускать к заливке на свой сервер небезопасных файлов, пускай даже если их не просто запустить? Это же бред.
 
Есть конечно затея вырубить на стороне самого php функции, которые обычно юзают шеллы, но хотелось бы знать альтернативные варианты.Цитата: WebSetВ любом случае твой вариант уг. Зачем допускать к заливке на свой сервер небезопасных файлов, пускай даже если их не просто запустить? Это же бред.Вот я о том, что уже будет потенциальная угроза.
 
WebSet,В шаблонизаторе dle если заинклудишь, он всерогно не выполнится. Можешь попробывать.
 
в) если возможно, пересохраняйте картинки при помощи GD, чтобы удалить ненужные метаданные и непрошенные приписки в конце файла.
 
Цитата: pripliliЗаливай мне шеллПокажи код скрипта
 
SaNcHeS,<?php$html = <<<HTML      <form action="/webset/index.php" method="post" enctype="multipart/form-data">      <input type="file" name="filename"><br>       <input type="hidden" value="test" name="abc">      <input type="submit" value="Загрузить"><br>      </form>HTML;//var_dump($_POST);if (count ($_POST) > 0) {    if (!isset ($_FILES['filename']))         die ('Выберите файл!');        $array = array ('jpg', 'gif');    $file = explode ('.', $_FILES["filename"]["name"]);        if (!in_array(end($file), $array))         die ('Расширение не подошло :(');        $path = time () . $_FILES["filename"]["name"];    move_uploaded_file($_FILES["filename"]["tmp_name"], __DIR__ . '/uploads/' . $path);        echo '<a href="/webset/uploads/'.$path.'">/webset/uploads/'.$path.'</a>';} else    echo $html;
 
Если подвести итог дискуссии, то можно ли предположить следующее:1. Код php не выполнится, если не имеет расширение php или не указано выполнение расширения, отличного от php, в файле .htaccess.2. Разборка картинки в hex (+ сборка) - не имеет эффективности и задействует достаточно много ресурсов.3. Довольствоваться текущей защитой: 1) Запрет доступа к файлам != картинке. 2) Фильтр в файл загрузки (запрет заливки иных файлов, кроме картинок). 3) Блокировка функций, которые юзают большинство шеллов.
 
JustElectro,Цитата: SaNcHeSв) если возможно, пересохраняйте картинки при помощи GD, чтобы удалить ненужные метаданные и непрошенные приписки в конце файла.
 
Оффтоп:Ну, жду ответа от умельцев, которые тут рвались доказать, что можно залить шелл. Показывайте взломанный сайт.
 
priplili,На win обойдется, на остальном вроде нет.Проверить можно примерно так$ext = strtolower(chr(0) . "png");if (!in_array($ext, array("jpg", "png")))
 
priplili,Ну залил я тебе .gif с php кодом. Далее инклудом подрубить в какой-нибудь дырке.Даже примитивный DLE не разрешает загружать файл тупо поменяв расширение.
 
WebSet,Инклудь, руби. Жду взломанный сайт. Могу для тебя ещё шаблонизатор подрубить, и дать возможность править шаблон.
 
Верх