Escalação de Privilégios

Enumeração de Serviços

Comando para saber quais serviços estão presentes no SO e quais os seus executáveis

run wmic service get name, pathname

Unquoted Service Path

Execute o comando abaixo no Beacon para executar o SharpUp.exe na máquina atacante

execute-assembly <C:\path\to\SharpUp\SharpUp\bin\Release\SharpUp.exe> audit UnquotedServicePath

Caso encontre alguma vulnerabilidade, faça upload do executável malicioso, porém, se atente com o tipo de arquivo que irá enviar. Ao utilizar o Menu Payloads > Windows Stageless Generate All Payloads, envie arquivos que contém o svc no nome, pois estes precisam interagir com o Service Control Manager. Um bom exemplo que pode ser utilizado, é o arquivo tcp-local_x64.svc.exe. É recomendado utilizar Beacons TCP vinculados ao host local apenas para escalação de privilégios. O próximo passo consiste em reiniciar o serviço. Provavelmente você não terá esse permissão, então uma saída seria reiniciar a máquina. Note que após fazer isso, o Beacon não apareceu no painel do CS, pois ele está como uma conexão local. Então devemos entrar no Beacon da máquina alvo (pode ser a mesma que utilizou anteriormente) e então execute o comando abaixo para triggar o novo Beacon, que provavelmente terá um usuário com mais privilégios no SO.

connect localhost 4444

Para remover o Beacon, basta deletar o executável. E para corrigir o problemas das aspas duplas, deve-se configurar o serviço da seguinte maneira (altere para o path correto):

run sc config <service> binPath= \""C:\Program Files\Vulnerable Service\Start.exe"\"

Weak Service Permission

Execute o comando abaixo no Beacon para executar o SharpUp.exe na máquina atacante

execute-assembly <C:\Path\to\SharpUp\SharpUp\bin\Release\SharpUp.exe> audit ModifiableServices

Em alguns casos, pode ser que o SharpUp traga que um determinado serviço apresente vulnverabilidade, porém ele não informa quais as permissões que esse serviço possui. Sendo asism, precisamos verificar mais detalhes sobre isso, então execute os comandos abaixo no Beacon:

powershell-import <C:\path\to\Get-ServiceAcl.ps1>
powershell Get-ServiceAcl -Name <servico-vulneravel> | select -expand Access

A união das permissões (campo ServiceRights) ChangeConfig Start e Stop pode ser um cenário perfeito, pois assim podemos alterar as configurações (mudar o executável) e depois reiniciar o serviço. A saída do comando acima nem sempre irá mostrar (campo IdentityReference) de uma forma clara que o seu específico usuários tem permissões sobre o serviço, por esse motivo devemos sempre ficar de olho nos grupos em que fazemos partes e também no acesso de NT AUTHORITY\Authenticated Users, que inclui todos os usuários que estão autenticados. Dando continuidade, vamos então pegar mais detalhes desse serviço, em especial o seu path, através do comando:

run sc qc <service>

Vamos então alterar o path do seu executável (binPath), mas antes precisamos fazer o upload do nosso executável malicioso, lembrando sempre que para escalação de privilégios, iremos utilizar o tcp-local que foi gerado através do SC (Generate All Payloads) e também conter um svc no nome, já que nesse caso estamos trabalhando com Services do Windows.

cd C:\windows\temp
upload <c:\path\to\tcp-local_x64.svc.exe>
run sc config <service> binPath=  C:\windows\temp\tcp-local_x64.svc.exe

OBS.: Note que após o binPath= possui um espaço, isso é intencional, pois é assim que está na documentação de ajuda do sc

Para verificar se o path foi realmente atualizado, faça um consulta nas configurações do serviço

run sc qc <service>

Caso esteja correto, vamos reiniciar o serviço

run sc stop <service>
run sc start <service>

Caso queria remover o Beacon, altere novamente o valor do binPath para o valor correto e reinicie o serviço. Lembre de colocar aspas duplas, para não gerar outra vulnerabilidade.

Agora execute no Beacon:

connect localhost 4444

Weak Service Binary Permissions

Esta é uma ligeira variação da vulnerabilidade anterior, mas em vez das permissões fracas estarem no serviço, estão no próprio binário do serviço. Ao verificarmos as permissões de um executável de serviço, podemos nos deparar com um BUILTIN\Users Allow Modify, Synchronize. Esse modify nos permite sobrescrever o binário por outro código. Certifique-se de fazer o backup antes de prosseguir.

powershell Get-Acl -Path "<C:\path\to\service.exe>" | fl

Basta então fazer upload do arquivo, lembrando que como se trata de um serviço, pode ser que seja necessário ter pará-lo antes. e receber mensagens como [-] could not upload file: 32 - ERROR_SHARING_VIOLATION, pegue o valor numeral, no caso 32 e execute o comando abaixo para ter mais detalhes:

run net helpmsg 32

Sites

# SharpUp
https://github.com/GhostPack/SharpUp

# Get-ServiceAcl
https://rohnspowershellblog.wordpress.com/2013/03/19/viewing-service-acls/

Last updated