Что делать, если хочется всего и сразу, да еще и не напрягаться при этом? Правильно, надо найти того, кто сделает все за тебя.Так и в хакпроме — не хочешь выполнять рутинную работу, используй средства автоматизации. Благо, есть MetaspLoit, голова на плечах и немного фантазии.
Как-то раз у меня возникла идея создать портативную версию метасплойта. Зачем? Ну, представь, что ты порутал какой-нибудь узел в локалке и захотелось тебе окинуть пристальным взглядом всю сеть изнутри. Явно нужна помощь в виде всевозможных x-tool’z, которые надо установить, настроить и т.д. Они начнут следить и всячески гадить в системе. В общем, форменное палево, хотя все зависит от конкретных обстоятельств. Гораздо круче иметь портативные версии, которые можно настроить заранее и тупо скопировать на тачку. Если все правильно сделать, нигде они тебя не выдадут, а по окончании злостных действий их нужно будет просто удалить.
МЕТАСПЛОЙТ —ХР— MS08_067 — DB_UT0PWN
В джентльменском наборе пентестера мета-сплойт занимает отнюдь не последнее место, позволяя быстро проверить машинки и, по возможности, их поломать. Конечно, не 0-day, но тем не менее. В общем-то, если не брать в расчет установку nmap и, соответственно, winpcap, проблем с созданием портативной сборки не было. Но тут я наткнулся на EasyHack otSKVOZ be за май 2009) - про реализацию массрутинга с помощью метасплойта. Тема меня дико заинтересовала, и я решил ее развить.
Честно сказать, с метасплойтом я до этого особенно и не работал. Так, баловался разными сплойтами, не дальше user guide. Но идея массрутинга реально зацепила. Более того, у меня было стойкое ощущение, что после эпидемии conficker найти тачки с юзабельной дыркой проблематично. Напомню, что SKVOZ предлагал использовать связку nmap и метасплойт как раз для массрутинга дыры MS08JD67. Ради интереса я повторил эксперимент в своей локалке и был приятно удивлен. Более четверти машин выбросили рутовые шеллы. Еще больше обрадовал тот факт, что сам эксплойт мог бы быть и другим. Только за 2009 год Microsoft уже опубликовала порядка 20 критических уязвимостей. Одна из них — ms09-001 — также связана с SMB. Эксплойта под нее пока нет, но, возможно, это только вопрос времени.
Однако не все так сладко. Нарисовалось несколько проблем, которые требовали решения. Допустим, у тебя есть шелл. Классика жанра требует создания нового пользователя и добавления его в локальную группу администраторов (или снятия хешей паролей, или просто замены пароля локального админа). В российских реалиях подавляющее большинство машин в локалке(я говорю о клиентских тачках под WinXP) работают под локализованной осью, а, значит, локальная группа носит название «Администраторы». Попробуй вбить в удаленной консоли «Администраторы» и тебя накроет глубочайшее чувство обиды. Да-да. извечная проблема с кодировками. Консоль работает под ср866, Windows — под ср1251, никсы и вовсе под KoiS-гили Unicode. Метасплойтже и нагрузки, типа meterpreter, в принципе не понимают русскую локаль. Отсюда на ровном месте мы получаем нехилую проблему. В сетке эта тема достаточно широко обсуждается. В конечном итоге все ссылаются на один и тот же патч (trac.metasploit.com/ticket/253]. Я накладывал патч, пробовал разные кодировки, но ни черта не получилось. Может, получится у тебя, но меня эта проблема окончательно добила, и я решил искать нормальное решение.
Итак, встала задача добавления пользователя в локальную группу администраторов посредством полученной консоли в условиях невозможности использовать символы кириллицы. План действий таков: пишем скрипт, реализующий необходимый функционал, каким-то образом заливаем его на подопытную тачку и исполняем. Скрипты я предпочитаю писать на AutolT, так что открываем SciTe из поставки AutolT и начинаем ваять. При этом хотелось бы сделать версию скрипта, независящую от локали, — то есть скрипт должен уметь автоматически определять название локальной группы администраторов. Известно, что системные группы в винде имеют предопределенные SID, в частности, SID группы администраторов имеет значение HneS-1-5-32-544. Для получения названия по SID предоставляется API-функция LookupAccountName, экспортируемая библиотекой AdvAPI32.dll. В автоит модуль Security. аиЗ предоставляет соответствующую функцию-обертку _5ecurity_LookupAccountName.
Этой функцией мы и воспользуемся (смотри файл user.au3 на DVD).
Вызов TraySetState с параметром 2 блокирует появление иконки AutolT в трее. Далее определяется имя группы администраторов, создается пользователь и добавляется в эту группу. Последний вызов модифицирует реестр, чтобы пользователь отсутствовал в списке интерактивного входа ХР.
Компилируем скрипт в ехе-файл и проверяем на виртуалке. Если все в порядке, двигаемся дальше. В качестве транспорта поначалу я думал использовать SMB. Мы находимся в той же сетке, что и жертва, — так почему бы не расшарить у себя папку и не подложить туда файлик user, ехе? Не видя никаких проблем, я так и поступил. Но монтирование папки с удаленной системы ни в какую не получалось — видимо, после эксплуатации сервис начинал работать неправильно. Нуда ладно, в винде по умолчанию встроен консольный клиент ftp. Я поднял натачке ftp-сервер (портативный FileZilla), настроил анонимный вход, а на удаленной тачке в папке %temp% строка за строкой прописал ftp-скрипт для подключения к моему серваку и получения файла. Далее в консоли появился вызов ftp.exe с ключом -s, и файл user.exe оказался на предназначенном ему месте. После запуска в системе появился пользователь с нужными правами.
Таким образом, принципиально проблема решается несложно. Впрочем, чем дальше, тем больше хочется. Вбивать каждый раз РТР’шный скрипт, качать и запускать файл — идеологически крайне далеко от поставленной задачи автосплойтинга. Кроме того, доступ из консоли в винде — совсем не так круто как в никсах, большинство утил просто не будут работать без графики. Так что, будем шаманить в попытке открыть доступ к рабочему столу. Вариантов, в принципе, всего два. Это — расшаривание стола (типа Radmin, VNC и т.д.] и использование терминальных служб. Первый для клиентских машин — совсем и не вариант, ибо очень палится. С RDP в ХР вообще тухло: при инициации удаленного подключения локальный пользователь будет выброшен из активной сессии. Но не надо отчаиваться, выход есть.
Чем думают ребята из Redmond’a, я не знаю, но порой их решения поражают воображение. Если в серверных ОС мы имеем человеческий доступ по RDP, то в клиентских — полная лажа. Удаленный доступ в ХР не уживается с локальным, и только один из пользователей может оставаться активным (в Home Edition, кстати, терминальной службы вообще нет). Зачем это сделано — большая загадка, потому что вряд ли кто-то будет только из-за этого покупать серверную ось. а неудобств доставляет немеренно, особенно в нашем случае. В одном из бета-релизов ХР такого ограничения не было, поэтому для его снятия достаточно подменить библиотеку termsrv.dll и перезагрузиться. На словах просто, на деле — нет. В сети различных патчеров, как грязи, но все они работают, прямо скажем, хреново, да и то — только если их запускать из интерактивной сессии и иметь доступ к рабочему столу. Дело в том, что системные dll охраняются системой Windows File Protection.
Если доступен установочный дистрибутив (с CD или по сети), файлы будут автоматически заменены на оригинальные. Если нет, будет выброшено предупреждение о недоступности диска и предложение вставить диск либо принять новый файл. И хотя название файла не пишется, надо быть полным дауном, чтобы ответить «Да», на что я, естественно, полагаться не буду. Один из методов обхода заключается в необходимости загрузки в безопасном режиме, ноудаленно, к сожалению, этого не сделаешь. Поэтому все патчеры идут лесом, и мы будем ваять собственный, который подменял бы библиотеку из неинтерактивной сессии, да и еще как-то справлялся с защитой файлов.
Первая часть тривиальна, а вот со второй сложнее. Надо отследить появление окна и эмулировать нажатия на нужные кнопки. Положим, код для этого мы написали, но, запустив его из консоли metasploit. мы дико обломаемся, так как, не имея доступа к рабочему столу, окно он, естественно, не поймает, и никакие сигналы послать не сможет. На выручку, как обычно, приходит планировщик задач, позволяющий запускать проги в интерактивном режиме. Идея в том, чтобы поставить задачу эмуляции пользовательских действий на выполнение в интерактивном режиме. Далее — дождаться ее запуска и уже потом подменять нужные файлы. Смотри на DVD полный код скрипта под названием final.au3, а я тем временем поясню, что к чему. Я весь функционал засунул в один файл, поэтому сначала проверяю, с какими аргументами запущен бинарник. Если присутствует ключ fsp, значит, будем ждать появления окна и щелкать по кнопкам. Определить идентификационные данные окна и кнопок можно с помощью Au3lnfo из сборки AutolT. После этого я отправляю машину в перезагрузку, дав юзеру 2 минуты на сохранение результатов работы. Если ключ fsp не задан, скрипт выполняет свою основную задачу.
Сначала инициализируются необходимые переменные и осуществляется работа по созданию нового администратора. Затем производятся телодвижения касательно реестра и нетшелла, цель которых — открытие доступа к RDP. Дальше проверяется версия ОС и, если она не ХР, работа скрипта прекращается. Если же на узле установлена ХР, с помощью sc поднимается сервис планировщика, и на выполнение ставится наш же скрипт, но с ключом fsp. Подождав, пока планировщик запустит задачу, скрипт реализует подмену библиотеки. Для этого переименовывается текущая dll (если запущена служба TermService, библиотека будет заблокирована, и удалить ее не получится), а новая dll копируется в %systemroot%\ system32\DLLCache (чтобы невозможно было восстановить исходную версию из кэша), и, наконец, подменяется сама библиотека в %systemroot%\system32. После сборки я упаковал собранный экзешник и библиотеку в самораспаковывающийся архив. Архив настроил на распаковку в %temp%, автоматическую перезапись всех файлов (кстати, не перезаписывает — доказано), и запуск %temp%\final.exe по окончании распаковки. Хочешь протестировать? Бери psexec и запусти архив на удаленной машине. Через примерно три минуты подключайся по RDP. У меня все получилось, так что двигаемся дальше.
При всей своей простоте и удобстве использования SMB — жутко глючная штука. Ктомуже, из всехтехнологий, реализованных Microsoft, это наверное, одна из самых корявых (не считая осла). Тот же метасплойт несет в себе 1А сплойтов для smb; не за горами и новые дырки. Ну а мы пока воспользуемся ms08_067, как наиболее свежей и, пока еще, достаточно пробивной. Проблема кроется в библиотеке netapi32.dll, а точнее, в функции wcscat (по крайней мере, та к ее использовал conficker). Для удаленного доступа используется RPC-Bbi3OBcUUIDAb32Afc8-1670-01d3-1278-5a47bf6ee188, то есть — обращение к интерфейсу srvsvc. Чтобы не мучить пользователей локалки, было решено создать тестовый стенд. Я накатил образ винды на VmWare с обновлениями, вышедшими до октября 2008 года (тогда появился патч), немного его подстроил и клонировал в трех вариантах. Итак, получена локальная минисеть, на которой можно оттачивать мастерство автосплойта. Моим удивлению и досаде не было предела, когда попытка применить метасплойтовский ms08_067 окончилась неудачей! Та же история постигла и милвормовский вариант, причем последний выплюнул ошибку«Маке SMB Connection error:53 (network path was not found)». Я подумал, что виноват файер, отключил его и попробовал заново. Ситуация немного изменилась, но была далека от идеала. Метасплойт неправильно определил сервис пак — «Fingerprint: Windows XP Service Pack 2+
— lang:Russian», хотя у меня был SP3. Чтобы понять, что это значит, я немного пошарил по исходникам.
Как итог, если в sp возвращается строка со знаком «+», значит, сервис пактупо неудалось определить. Что ж, выбираем в качестве цели конкретную версию (Windows XP SP3 Russian (NX)) и пробуем заново. Опять облом — «Exploit failed: The server responded with error: STATUS_ 0BJECT_NAME_NOT_FOUND (Command=162 WordCount=0)». Эта ошибка навевала мысль о невозможности подключения к пайпу. Я включил общий доступ к файлам и в случае автоопределения версии получал следующий результат — «Selected Target: Windows XP SP0/SP1 Universal — Exploit failed: The server responded with error: STATUS_OBJECT_NAME_ NOT_FOUND(Command=162WordCount=0)». Уже другое, но все равно не то. В случае явного указания цели эксплойттакже не работал. Однако если сменить пайп с BROWSER на SRVSVC. можно получить заветный шелл. Конечно, здорово, но для реализации нужно заранее знать версию операционной системы на удаленной машине, что для автосплойта совсем не катит. Но ведь я пробовал сплойт на локалке, и он работал! Оставалась последняя надежда — расшарить какую-нибудь папку. Это ничуть не изменило картину. Я готов уже был рвать на себе волосы и крушить-ломать все подряд. От бессилия я стал гуглить и наткнулся на какой-то баглист, в котором парень писал о жутких терках с фаером. Тогда так. Запускаем и сразу же останавливаем чудо-мегафаер мелкомягких… Эксплойт работает, как миленький! Причем на обоих пайпах одинаково хорошо определяет версии сервис пака и создает любезные глазу сессии. Итак, с тестовой настройкой я определился, расклонировал систему и получил стенд из трех уязвимых машин.
Для реализации автоматической системы эксплуатации необходимо обеспечить транспорт и запуск созданного бинарника на уязвимых системах. Окинув взглядом доступные нагрузки, я радостно потер руки и принялся окучивать нагрузку windows/upexec/ bind_tcp. Ее цель как раз и состоит в загрузке файла на хосте последующим исполнением. Увы, радость быстро улетучилась, когда я обнаружил, что ни хрена она не пашет. Позже я выяснил, что в никсовой версии метасплойта все работает на ура, однако я подразумеваю запуск метасплойта на поломанной виндовской машине, следовательно, нужно искать другие варианты. Выходом стало использование нагрузки windows/download_exec. Для этого необходим доступный Web-сервер, куда надо положить созданный бинарник. Сервак можно поднять на самой машине, например, используя ХАМРР. Я так и поступил. URL бинарника указываем в одноименном параметре нагрузки и запускаем эксплойт. На выходе получаем ошибку — «Exploit failed: No encoders encoded the buffer successfully». Все правильно: download_exec представляет собой цельную нагрузку, которая не умещается в буфер сплойта, поэтому нужно использовать stager, например, download_exec/bind_tcp. Проводим аналогичные настройки и получаем нужный результат. Через пару минут я мог коннектиться по RDP с админскими правами, не выбивая текущего юзера. Мое внимание привлек тот факт, что задание оставалось висеть, а сессия так и не создавалась. Для единичного воздействия это вполне нормально, но при автосплойте сети мы получим большие проблемы.
Во-первых, мoдyльdb_autopwn выполняется многопоточно и имеет ограничение на количество одновременно выполняемых заданий, которое по умолчанию равно 5. Это значит, что при успешной эксплуатации 5 узлов остальные будут бесконечно и бестолково болтаться в очереди. Во-вторых, после прогона db_autopwn неплохо было бы иметь список порутанных узлов, который удобно получать по команде «sessions -I». Конечно, эти ограничения не так уж и существенны, но хочется же все сделать красиво, — поэтому я решил немного подправить код download_exec с тем, чтобы он все-таки приводил к созданию сессии.
Код нагрузки находится по адресу %appdata%\msf32\ modules\payloads\singles\windows\download_exec. rb и предельно прост. Очевидно, что сессия не создается по причине того, что нагрузка просто не предназначена для создания шелла. Это легко поправить! Достаточно добавить параметр session со значением Msf::Sessions::CommandShetl. Исправленный исходник ждет тебя на диске.
Стой! He листай дальше. Если ты до сих пор воспринимаешь SSH исключительно как безопасную альтернативу устаревшему Telnet, не рискуй вызывать гнев богов, тьфу, разработчиков протокола. Ниже мы собрали самый полный мануал по правильному использованию Secure Shell на полную катушку.
Пользователь судит о программе в первую очередь потому, насколько с ней удобно и понятно работать. Поэтому в хорошей программе необходимо уделить немалое внимание разработке пользовательского интерфейса. В этой статье мы рассмотрим азы написания GUI на языке Python.
По ссылке на боковом выносе можно выбрать подходящий IDE, заточенный для работы с GUI. Выбор весьма богат, так что, скорее всего, ты не разочаруешься, «примеру, для работы именно с wxPython мне приглянулся BoaConstructor. Он удобен для визуального проектирования GUI: избавляет от рутины и, в целом, имеет интуитивно понятный интерфейс (что не отменяет чтения туториала]. Какой IDE выбрать — это дело вкуса, поэтому я больше не буду акцентировать на нем внимание. Дальнейшее чтение статьи должно быть понятным независимо от сделанного выбора. Так что устанавливай wxPython и приступим непосредственно к кодингу.