Заливая шелл на какой-нибудь ресурс, ты, конечно, хочешь, чтобы он прожил максимально долго, и не был удален злобными админами в первый же день. Для этого шеллы прячут и маскируют под местность, чтобы файл не вызывал подозрений. А какие файлы в первую очередь вызывают подозрения? Ну, конечно же, скрипты. То есть, файлы с расширением .php .phtml .cgi .pl и т.д. будут проверены первыми. И, напротив, не вызывают подозрения, например, картинки. Но какая же польза от файла с расширением .jpg или .gif, скажешь ты. Ведь он неисполняемый и, если даже засунуть в него .php-код, то, чтобы он заработал, нужен будет инклуд. Это не совсем так, а точнее, совсем не так. Заставить апач воспринимать файл с любым расширением как .php нам поможет .htaccess.
Посмотрим, как это делается:
1. Создаем у себя на локалке файл .htaccess следующего содержания (можно и прямо на сайте создать):AddType application/x-httpd-php .jpg2. Заливаем его на взломанный сайт в папку, где будем прятать наш шелл (это если в директории нет такого файла; если есть, то просто добавляем к нему нашу строчку).
3. Меняем расширение нашему шеллу с .php на .jpg.
4. Переходим с веба на нашу «картинку» и видим, что она исполняется.
Как видишь, все просто, теперь, зайдя в папку, админ видит только картинки, и шансов, что шелл будет найден, гораздо меньше.
Разумеется, таким образом можно поставить абсолютно любое расширение, будь то .txt, .gif или вообще не существующее .lol. Только злоупотреблять таким методом не советую. Если то, что ты делаешь, наносит вред функционалу сайта в целом, то шансы быть обнаруженным резко возрастают.
Какие, вообще, приемы используются для загрузки веб-шелла через скрипты, предназначенные для аплоада изображений?
A: Все зависит от используемых функций в скрипте загрузки. Про самое примитивное было написано выше (когда есть список недопустимых расширений). Иногда админы запрещают какие только можно расширения, но при этом забывают про старый добрый cgi (на деле такие ошибки редко встречаются – как правило, в сценарии указан массив с допустимыми расширениями, и все остальные режутся). Далее идет проверка поля заголовка Content-Type. В самом скрипте будет примерно такой код:
<?php
if($_FILES['userfile']['type']!="image/gif"){
echo 'Error!';
exit;
}Если мы попробуем напрямую загрузить шелл, в заголовке будет строка Content-Type: text/plain, и проверку MIME-типа пройти не получится. Но ничто нам не мешает этот самый заголовок подделать и указать «Content-Type: image/gif».
Дальше глянем на функции move_uploaded_file и copy. Да-да, ты правильно понял, речь пойдет о null-байте ("", "\x00"). Предположим, в скрипте, ответственном за загрузку изображений, есть такой код:
<?php//здесь идет проверка расширенияif ($allowed) { //если проверка пройдена
move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile);
echo 'Uploaded!';
}
else {
echo 'Error!';
}
?>Если мы попробуем загрузить php-файл, то не будет пройдена проверка, но если вставить null-байт (shell.php.jpg), то файл загрузится. Следующая функция, которая часто используется веб-мастерами в скриптах - getimagesize. Функция getimagesize() определяет размер изображения GIF, JPG, PNG, SWF, PSD, TIFF или BMP и возвращает размеры, тип файла и высоту/ширину. К примеру, есть код:
<?php
$imageinfo=getimagesize($)FILES['userfile']['tmp_name']);
if($imageinfo['mime']!='image/gif' && imageinfo['mime']!='image/jpeg'){
echo 'Error!';
exit;
}
// код
?>Берем обычную картинку, вставляем в EXIF-тег (заголовки, предназначенные для хранения комментариев к изображению и прочей «полезной» информации вроде модель камеры – редактируются фотошопом, ACDSee и т.п.) строчку веб-шелла, даем расширение php, если требуется подделываем Content-Type и загружаем файл.
Функции могут сочетаться, поэтому комбинируй способы.
Вариантов сокрытия шелла масса, разберем некоторые базовые методы.
Функции могут сочетаться, поэтому комбинируй способы.
Вариантов сокрытия шелла масса, разберем некоторые базовые методы.
1. Маскируем расширение.
К примеру, у нас есть директория «images», доступная на запись, в ней хранятся картинки с расширением .gif, у нас есть вариант залить шелл с расширением .gif и добавить в директорию файл .htaccess со следующим содержанием:
AddHandler application/x-httpd-php .gifКак видно, мы даем серверу инструкцию интерпретировать файлы *.gif как php-скрипты.
2. Маскируемся под местность.
Допустим, у нас в директории есть файлы:
connect.inc.php
functions.inc.php
other_function.inc.php
config.inc.phpМы можем переименовать наш шелл, например, в main_functions.inc.php, и он более-менее нормально впишется в окружающую обстановку.
3. touch, touch, ты могуч...
Дабы не провоцировать админа, меняем дату изменения нашего свежезалитого шелла. В этом нам поможет заветный touch, будем использовать одноименную функцию PHP.
Итак, приступим:
UNIX touch1. Поставить на файл определенную дату, формат: год месяц число час минута.
touch -t200811182005 apach.phpИли так:
touch -d 'Jan 31 2007 12:34:56' apach.php2. Сделать file5 того же времени, что и file4:
touch -r file4 file53. Сделать file7 30 секундами старше, чем file6:
touch -r file6 -B 30 file74. Сделать file7 30 секундами моложе, чем file6:
touch -r file6 -F 30 file7
То же самое можно сделать средствами PHP функцией touch():
touch('/usr/www/site.ru/www/index.php', filemtime('/usr/www/site.ru/www/show_kvit.php'));Ну и наконец, на шелле r57 есть специальная вкладка с одноименным названием, она поможет это сделать в удобном виде. Не забывай, что для изменения атрибутов нужно иметь соответствующие права.
4. Гостеприимный tmp.
К примеру, если у нас LFI, то можно закачать файл шелла в директорию / tmp, она, как известно, в 99% случаев доступна на запись, к тому же там зачастую хранятся файлы сессии. Файл маскируем под сессию, далее просто инклудим его как ни в чем не бывало (
?file=../../tmp/sess_d17d8f066 1f8f44dd7dc5110c8825246).5. Смена хозяина.
Допустим, мы перезалили под рутом наш шелл в нужную директорию, только шелл больно палевный. т.к. у файла овнер и группа стоят права рута:
-rwr-x--x 1 root whell 5043 2009-07-09 13:51 shell.phpНужно под рутом сменить владельца файла и группу на данные владельца директории. К примеру, chown www shell.php сменит владельца файлу www shell.php.
Комментариев нет:
Отправить комментарий