Что такое шеллы в скриптах

Шелл (Shell), веб-шеллы

Программы и скрипты для удаленного доступа к взломанному сайту.

В большинстве случаев, после успешного взлома сайта, атакующий оставляет на сайте специализированные программы, коды или врезки в код легальных скриптов, обеспечивающие ему полный доступ к серверу. Эти программы, скрипты и коды называются шеллами.

Шеллы, шелл-коды, мини-шеллы

При эксплуатации удаленной уязвимости шелл-код может открывать заранее заданный порт TCP уязвимого компьютера, через который будет осуществляться дальнейший доступ к командной оболочке. Такой код называется привязывающим к порту (англ. port binding shellcode).
Если шелл-код осуществляет подключение к порту компьютера атакующего, что производится с целью обхода брандмауэра или NAT, то такой код называется обратной оболочкой (англ. reverse shell shellcode).

Шелл-код обычно внедряется в память эксплуатируемой программы, после чего на него передается управление. Результатом этого является выполнение шелл-кода, который открывает командную строку для использования взломщиком.

Веб-шеллы, PHP шеллы.

Веб-шеллы это мощные программные разработки, основной функционал которых заключается в работе с файловой системой сервера на уровне root доступа.
Как правило, веб-шеллы имеют графическую оболочку и удобный интерфейс, на подобии всем известных Far, MC, Norton Commander и др.

Скрин WSO 2.5 веб-шелла:

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Основной функционал веб-шеллов:

    Файловый менеджер Работа с консолью сервера Текстовой редактор Редактор HEX кода MD5, base64 и прочие конверторы Прочие утилиты для работы с сервером

Открытый код большинства веб-шеллов, а также некоторые особенности его написания хорошо известен поисковым системам и антивирусам.
Для маскировки веб-шеллов, их код обфусцируют. Иногда код веб-шеллы вписывают в тело легального кода, изображений и т.п., создавая необходимые условия для его выполнения, при этом пряча его от администраторов сайта.
В большинстве случаев, после взлома, атакующий «оставляет» десятки веб-шеллов, для того, чтобы в случае обнаружение одного или двух оставались запасные варианты доступа к взломанному серверу.

Сканер уязвимостей сайтов онлайн Проверьте, наколько устойчив к взлому Ваш сайт

Источник

Что такое командная оболочка (shell) в Linux?

Обновл. 27 Июл 2021 |

В этой статье мы разберемся, что такое shell и зачем это нужно, а также рассмотрим наиболее часто используемые командные оболочки в Linux и Unix.

Что такое shell?

Shell (или «шелл», «командная оболочка») — это не только командный интерпретатор, который обеспечивает интерфейс взаимодействия между пользователем и ядром операционной системы, но и своеобразный язык программирования, в котором присутствуют такие конструкции, как операторы условного ветвления, циклы, переменные и многое другое.

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Окно терминала привилегированного (root) пользователя (виден символ #)

Примечание: Знак тильды (

) указывает на то, что мы находимся в домашнем каталоге текущего пользователя.

После приглашения, пользователь вводит различные команды в терминал, оболочка запускает программы для пользователя, а затем отображает в терминале результат их выполнения. Команды могут быть либо введены непосредственно самим пользователем, либо считаны из файла, называемого shell-скриптом или shell-программой.

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Внутренние и внешние команды оболочки

Вводимые пользователем команды делятся на два типа:

Внутренние — это команды, изначально встроенные в оболочку.

Внешние — это команды, которые не встроены в оболочку. По своей сути они являются скорее небольшими отдельными программами, расположенными где-то в файловой системе (обычно, в каталогах /bin или /usr/bin).

Чтобы определить тип команды, достаточно в окне терминала ввести type :

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Ознакомиться с полным списком внутренних команд оболочки можно при помощи команды help :

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Как узнать какая оболочка у меня установлена?

Если вы только начинаете свое знакомство с Linux и не меняли оболочку, то наиболее вероятно, что в вашей системе используется bash. Самый простой способ узнать, какая оболочка используется в данный момент — это обратиться к переменной окружения SHELL :

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Не трудно заметить, что в настоящее время используется оболочка bash. Для просмотра всех доступных оболочек в вашей системе, необходимо обратиться к содержимому файла /etc/shells:

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Типы командных оболочек

В *nix-системах существует два основных типа оболочек: оболочки на основе Bourne shell и оболочки на основе C shell.

Типичными представителями оболочек типа Bourne shell являются:

bash (Bourne Again shell)

К оболочкам типа C Shell относятся:

tcsh (TENEX/TOPS C shell)

Ниже представлены некоторые из самых распространенных шеллов, используемых в *nix-системах:

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Примечание: Термин «*nix-системы» обозначает Unix-подобные операционные системы.

sh (Bourne shell)

sh (сокр. от «Bourne shell») — это самая старая (среди рассматриваемых) оболочка, написанная Стивеном Борном из AT&T Bell Labs для ОС UNIX v7. Оболочка доступна практически в любом *nix-дистрибутиве. Многие другие шеллы уходят своими корнями именно к sh. Благодаря своей скорости работы и компактности, данная оболочка является предпочтительным средством для написания shell-скриптов. К её недостаткам можно отнести отсутствие функций для использования оболочки в интерактивном режиме, а также отсутствие встроенной обработки арифметических и логических выражений.

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Примечание: Стоит отметить, что из-за общего морального устаревания оболочки, в современных системах ссылка на шелл sh (/bin/sh), обычно, является псевдонимом для запуска текущей, более новой оболочки.

Характерные черты sh:

Полные пути к интерпретатору: /bin/sh и /sbin/sh.

bash (Bourne-Again shell)

bash (сокр. от «Bourne–Again shell») — это усовершенствованный и дополненный вариант шелла sh, является одной из самых популярных современных командных оболочек *nix-систем.

Объединяет в себе полезные фишки оболочек ksh и csh.

Поддерживает навигацию при помощи стрелок, благодаря чему можно просматривать историю команд и выполнять редактирование прямо в командной строке.

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Характерные черты bash:

Полный путь к интерпретатору: /bin/bash.

Приглашение для обычного пользователя: имя_пользователя@имя_хоста:

— это домашний каталог текущего пользователя, например, mrsmith@mypc:

Приглашение для суперпользователя (root): root@имя_хоста:

ksh (Korn shell)

ksh (сокр. от «Korn shell») — это командная оболочка, разработанная Дэвидом Корном из AT&T Bell Labs в 1980-x годах.

Является расширением sh.

Имеет обратную совместимость с sh.

Имеет интерактивный функционал, сравнимый с csh.

Включает в себя удобные для программирования функции, такие как: встроенную поддержку арифметических выражений/функций, Си-подобный синтаксис скриптов и средства для работы со строками.

Работает быстрее, чем csh.

Может запускать скрипты, написанные для sh.

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Характерные черты ksh:

Полный путь к интерпретатору: /bin/ksh.

csh (C shell)

csh (сокр. от «C shell») — это командная оболочка, созданная Биллом Джоем (автором редактора vi) с целью усовершенствования стандартного шелла Unix (sh).

Имеет встроенные функции для интерактивного использования, например, псевдонимы (aliases) и историю команд.

Включает в себя удобные для программирования функции, такие как: встроенную поддержку арифметических выражений и Cи-подобный синтаксис скриптов.

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Характерные черты csh:

Полный путь к интерпретатору: /bin/csh.

tcsh (TENEX C Shell)

tcsh (сокр. от «TENEX C shell») — это командная оболочка, созданная Кэном Гриром, которая позиционируется как улучшенная версия шелла csh.

Имеет полную совместимость csh.

Именно в данном шелле впервые появилась функция автодополнения команд и путей.

Удобна для интерактивной работы.

Поддерживает редактор командной строки в стиле vi или emacs.

Является стандартным шеллом во FreeBSD.

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Характерные черты tcsh:

Полный путь к интерпретатору: /bin/tcsh.

Приглашение для обычного пользователя: имя_хоста:

zsh (Z Shell)

zsh (сокр. от «Z shell») — это командная оболочка, созданная Паулем Фалстадом во время его учебы в Принстонском университете, позиционируется как свободная современная sh-совместимая командная оболочка.

Среди стандартных шеллов больше всего похожа на ksh, но включает в себя множество улучшений.

Встроенная поддержка программируемого автодополнения команд, имен файлов и пр.

Поддержка проверки орфографии и опечаток.

Раздельная история команд для одновременной работы с несколькими запущенными шеллами.

Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Характерные черты zsh:

Полный путь к интерпретатору: /bin/zsh.

Приглашение для суперпользователя (root): root@имя_хоста:

Резюмируем

Краткая сводная таблица для 6 вышерассмотренных командных оболочек:

Командная оболочка Путь Приглашение (обычный пользователь) Приглашение (root)
sh (Bourne Shell)/bin/sh и /sbin/sh$#
bash (Bourne-Again Shell)/bin/bashимя_пользователя@имя_хоста:

$имя_пользователя@имя_хоста:

#ksh (Korn Shell)/bin/ksh$#csh (C Shell)/bin/csh%#tcsh (TENEX C Shell)/bin/tcshимя_хоста:

>#zsh (Z Shell)/bin/zsh%#

Примечание: Помимо представленных выше оболочек, есть еще и такие оболочки, как:

mksh — оболочка, основной упор в которой сделан на написание скриптов;

dash — более легковесная в сравнении с bash оболочка, но из-за этого обладающая ограниченной функциональностью;

fish — «новая» оболочка, написанная в 2005 году, отличительной чертой которой является упор на комфорт использования и упрощение командного языка;

Поделиться в социальных сетях:

Источник

WEB-Shell на PHP. Что это такое и способы его спрятать

Начнем с определения что такое «веб-шелл» (WEB-Shell)? Что нам говорит интернет по этому поводу: Это некий вредоносный скрипт (программа), который злоумышленники используют для управления чужими сайтами и серверами: выполнения команд терминала, перебора паролей, доступа к файловой системе и т.п. Для размещения скрипта чаще всего используются уязвимости в коде сайта или подбор паролей.

Хотя тут требуется уточнение. Вредоносным он становится в случае если он загружен не вами на ваш сервер, а злоумышленником. Если он загружен вами, то обычно это очень даже полезный инструмент.

PHP WEB-Shell обычно построен на PHP команде exec();

и по большому счету

уже является шеллом.
Но, как правило, от шелла хочется немного больше комфорта. Ведь неудобно каждый раз менять PHP код, чтобы выполнить команду.

Пример более удобного шелла можно найти в разделе файлы.
Но вот все хорошо, шелл размещен на сервере, но возникает вопрос как его скрыть от посторонних глаз.
Первое что приходит в голову, это сменить название на то, которое не вызовет подозрений (скажем functions.php).

Далее а стоит поменять время создания/изменения файла. В этом нам поможет команда touch с параметром -t

-t время
Использовать вместо текущего указанное время. Время задается десятичным числов вида:
[[CC]YY]MMDDhhmm[.SS]
где каждая пара цифр представляет следующее:

Так же можно Shell встроить в уже существующий PHP файл, но это лучше делать с компактным шеллом.
Например с таким:

Данный шелл проверяет, вызван ли скрипт с GET параметром pwd, который задан в переменной $pa (вызов скрипта должен выглядеть как: http://путь_и_имя_скрипта.php?pwd=qwe)

Перед его добавлением в существующий PHP файл следует удалить из него комментарии и максимально его сжать.
После удаления комментариев, лишних пробелов и переносов строк получится:

Но в любом случае лучше подстраивать стиль под стиль кода в существующем файле.
Хотя можно пойти и другим путем. Предварительно обфусцировать код, чтобы он стал не читаемым.
Пример легкой обфускации:

Это тот же простой шелл, просто с запутанным кодом.
Пример сильной обфускации:

Это все тот же простой шелл, но с шифрованием в base64. он так же будет исполняться.

Можно встроить загрузчик шелла в существующий скрипт. Этот путь хорошо в качестве резервного. Если основной шелл стерли и уязвимость закрыли, то возможно остался загрузчик, через который можно повторно закачать шелл. Хотя это иногда бывает довольно творческой работой, потому что не всегда все папки доступны на запись.

Пример загрузчика(в данном случае используется утилита wget через exec):

данная строка закачает файл shell.txt с сервера example.com и сохранит его под именем shell.php в папке, из которой исполнялся скрипт, если скрипт, в который она внедрена, вызван с параметром ?pwd=dl
Так же можно сделать загрузку с помощью самого PHP:

данный код так же закачает файл shell.txt с сервера example.com и сохранит его под именем shell.php в папке, из которой исполнялся скрипт, если скрипт, в который она внедрена, вызван с параметром ?pwd=dl

Только не забываем предварительно разместить шелл на сервере, с которого он будет закачан. И с не исполняемым расширением файла.

Скрипт закачки шелла на сервер так же желательно сжать, освободить от комментариев и, по желанию, обфусцировать.

Еще шелл можно спрятать в базе данных, но это уже зависит от используемой CMS и ее настроек. Если текст страниц хранится в базе данных, и CMS по каким-либо причинам не фильтрует PHP код при выводе текста из базы на страницу для конечного пользователя, то эти скрипты вполне могут жить в базе данных. Правда данный материал уже выходит за рамки этой статьи.

Вообще методов сокрытия шелла существует огромное множество. И данная работа больше напоминает творческую.

Что касается защиты: старайтесь держать эталонные версии скриптов и список файлов на сервере в резервной копии (естественно находящейся не на том же сервере). Тогда можно будет быстро сравнить все изменения, в случае если у вас есть подозрения.

Заказать создание и поддержку безопасной IT-инфраструктуры любой сложности

Быть уверенным в своей IT-инфраструктуре — это быть уверенным в завтрашнем дне.

Источник

Unix shell: абсолютно первые шаги

Зачем и для кого статья?

Изначально это была памятка для студентов, которые начинают работать с unix-подобными системами. Иными словами, статья рассчитана на тех, кто не имеет предыдущего опыта работы в unix-овой командной строке, но по тем или иным причинам хочет или должен научиться эффективно с нею взаимодействовать.

Здесь не будет пересказа манов (документации), и статья никак не отменяет и не заменяет их чтение. Вместо этого я расскажу о главных вещах (командах, приемах и принципах), которые надо осознать с самого начала работы в unix shell-е, чтобы работа происходила эффективно и приятно.

Статья касается полноценных unix-подобных окружений, с полнофункциональным шеллом (предпочтительно zsh или bash)и достаточно широким набором стандартных программ.

Что такое шелл

В целом работа через шелл выглядит так: пользователь (т.е. вы) с клавиатуры вводит команду, нажимает Enter, система выполняет команду, пишет на экран результат выполнения, и снова ожидает ввода следующей команды.

Типичный вид шелла:
Что такое шеллы в скриптах. Смотреть фото Что такое шеллы в скриптах. Смотреть картинку Что такое шеллы в скриптах. Картинка про Что такое шеллы в скриптах. Фото Что такое шеллы в скриптах

Шелл — это основной способ для взаимодействия со всеми Unix-подобными серверными системами.

Где встречаются системы с командной строкой?

Какие задачи разумно решать шеллом?

Абсолютно первые шаги

Начинаем работу: войти и выйти

Убедитесь, что точно знаете, как запустить шелл и как из него выйти.

Если вы работаете за машиной, на которой установлена Ubuntu, вам надо запустить программу Terminal. По окончании работы можно просто закрыть окно.

На MacOS — тоже запустить Terminal.

Для доступа к удаленному серверу — воспользоваться ssh (если локально у вас MacOS, Ubuntu или другая unix-like система) или putty (если у вас Windows).

Кто я, где я?

История команд (history)

Важное свойство полноценной командной строки — история команд.

Пролистывание истории, редактирование и повторное выполнение команд — самые типичные действия при работе в командной строке, привыкайте.

Copy-paste

Командная строка очень текстоцентрична: команды — это текст, входные данные для большинства стандартных программ — текст, результат работы — чаще всего тоже текст.

Прекрасной особенностью текста является то, что его можно копировать и вставлять, это верно и для командной строки.

Попробуйте выполнить команду date +»%y-%m-%d, %A»
Вводили ли вы ее целиком руками или скопировали из статьи? Убедитесь, что вы можете ее скопировать, вставить в терминал и выполнить.

Как именно копировать текст из терминала и вставлять его в терминал — зависит от вашей системы и от ее настроек, поэтому дать универсальную инструкцию, к сожалению, не получится. На Ubuntu попробуйте так: копирование — просто выделение мышью, вставка — средняя кнопка мыши. Если не работает, или если у вас другая система — поищите в Интернете или спросите более опытных знакомых.

Ключи и опции

При исследовании истории команд вы уже столкнулись с тем, что у команды ls есть по крайней мере два варианта. Если вызвать ее просто так, она выводит простой список:

Кроме того, команды могут принимать в качестве параметров имена файлов, каталогов или просто текстовые строки. Попробуйте:

man — справка по командам и программам, доступным на вашей машине, а также по системным вызовам и стандартной библиотеке C.

Попробуйте и сравните поведение:

Можно передать файл в пролистыватель сразу в параметрах:

Права

С любым файлом или каталогом связан набор «прав»: право на чтение файла, право на запись в файл, право исполнять файл. Все пользователи делятся на три категории: владелец файла, группа владельца файла, все прочие пользователи.

Этот вывод означает, что владельцу (akira) можно читать и писать файл, группе (students) — только читать, всем прочим пользователя — тоже только читать.

STDIN, STDOUT, конвейеры (пайпы)

В данном случае вы подали в STDIN программы двухстрочный текст, а в STDOUT получили три числа.

Важнейшее свойство юниксовой командной строки состоит в том, что программы-«трубы» можно соединять между собой: выход ( STDOUT ) одной программы передавать в качестве входных данных ( STDIN ) другой программе.

Такая конструкция из соединенных программ называется по-английски pipe (труба), по-русски — конвейер или пайп.

Объединение программ в конвейер делается символом | (вертикальная черта)

Составление конвейеров (пайпов) — очень частое дело при работе в командной строке. Пример того, как это делается на практике, читайте в разделе «Составление конвейера-однострочника».

Перенаправление ввода-вывода

Вывод ( STDOUT ) програмы можно не только передать другой программе по конвейеру, но и просто записать в файл. Такое перенаправление делается с помощью > (знак «больше»):

Если файл с таким именем уже существовал, его старое содержимое будет уничтожено. Если файл не существовал, он будет создан. Каталог, в котором создается файл, должен существовать до выполнения команды.

Если надо не перезаписать файл, а добавить вывод в его конец, используйте >> :

Проверьте, что теперь записано в файле.

Кроме того, программе можно вместо STDIN передать любой файл. Попробуйте:

Что делать, когда что-то непонятно

Если вы сталкиваетесь с поведением системы, которое не понимаете, или хотите добиться определенного результата, но не знаете, как именно, советую действовать в следующем порядке (кстати, это относится не только к шеллам):

Методы работы

Скопировать-и-вставить — из man-ов, из статей на StackOverflow и т.п.Командная строка состоит из текста, пользуйтесь этим: копируйте и используйте примеры команд,записывайте удачные находки на память, публикуйте их в твиттерах и блогах.

Читать man. Nuff said.

Вытащить из истории предыдущую команду, добавить в конвейер еще одну команду, запустить, повторить.См. также раздел «Составление конвейера-однострочника».

Базовые команды

Аналитика

Диагностика системы

Некоторых программ у вас может не быть, их надо установить дополнительно. Кроме того, некоторые опции этих программ доступны только привилегированным пользователям ( root ‘у).

Массовое и полуавтоматическое выполнение

На первых порах пропускайте этот раздел, эти команды и конструкции понадобятся вам тогда, когда доберетесь до несложного шелльного скриптинга.

Разное

Составление конвейера-однострочника

— только процессы текущего пользователя.

Шаг 3.
Повторять пункт 2, пока не получатся чистые нужные данные.

— все процессы с нужным именем (плюс, может быть, лишние вроде vim task-6-server.c и т.п.),

— только процессы с нужным именем

— pid-ы нужных процессов, п. 3 выполнен

Шаг 4.
Применить подходящий финальный обработчик. Клавишей «Вверх» вытаскиваем из истории предыдущую команду и добавляем обработку, которая завершит решение задачи:

Задания для тренировки

Хотите попрактиковаться в новых умениях? Попробуйте выполнить следующие задания:

Что изучать дальше?

Если командная строка начинает вам нравиться, не останавливайтесь, продолжайте совершенствовать свои навыки.

Вот некоторые программы, которые определенно вам пригодятся, если вы будете жить в командной строке:

Кому это надо?

А стоит ли вообще изучать сегодня командную строку и шелльный скриптинг? Определенно стоит. Приведу только несколько примеров из требований Facebook к кандидатам, которые хотят поступить на работу в FB.

Data Scientist, Economic Research: Comfort with the command line and with Unix core tools; preferred: adeptness with a scripting language such as Python, or previous software engineering experience.

MySQL Database Engineer: High degree of proficiency in Shell scripting (Bash, Awk, etc); high degree of proficiency in Linux administration.

Manufacturing Quality Engineer, Server: Scripting skills in Bash, Perl, or Python is desirable.

Data Platform Engineer: 2 years experience with Unix/Linux systems.

DevOps Engineer, Data: 2 years experience with Unix/Linux system administration and programming.

Вопросы?

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *