Microsoft SQL Server
Enumerando
PowerUpSQL
O PowerUpSQL tem alguns cmdlets disponíveis para localizar servidores MS SQL, incluindo Get-SQLInstanceDomain
, Get-SQLInstanceBroadcast
e Get-SQLInstanceScanUDP
Podemos pesquisar SPNs que começam com MSSQL
. Na saída do comando abaixo, podemos ver a máquina que está executando o MSSQL, assim como o contexto da conta de Domínio que está em utuilização.
Para coletar mais informações sobre a instância, execute:
Você também pode pesquisar no Domínio por grupos que pareçam ter acesso a instâncias de banco de dados (por exemplo, p grupo SQL Admins
). Para o comando executar o comando abaixo, utilize o retorno do campo Instance
na saída do comando acima, que terá um resultado no formato hostname-mssql.domain.local,1433
.
Se houver muitos SQL Servers disponíveis, utilize o comando abaixo para automatizar a coleta de dados.
Com acessos privilegiados (utilize antes o make_token
em uma conta para isso), podemos executar queries no banco de dados
SQLRecon
SQLRecon também pode enumerar servidores via SPNs e buscar informações sobre a instância com o módulo info.
Com o resultado do comando acima, utilize o valor do campo ComputerName
para executar o comando abaixo e ter acesso a informações sobre o servidor
A opção /auth:wintoken
permite que SQLRecon use o token de acesso do Beacon. Podemos ver assim, se o nosso usuário atual é ou não um administrador Caso não seja, o SQLRecon tem um módulo interessante que pode nos mostrar quais funções nós temos.
Encontrar um usuário (ou grupo) que tenha acesso pode ser um desafio, porque sem a capacidade de consultar a instância SQL para fazer isso, você pode ficar sem adivinhar. Uma opção é procurar nomes padrões (com forte indicativo) para grupos de Domínio e seus membros.
Outra opção é ir atrás da própria conta de serviço MS SQL
, pois ela também recebe privilégios de administrador de sistema. Essa suposição é a base do caminho de ataque SQLAdmin do BloodHound. Sabemos que a conta de Domínio usada para executar o serviço é <mssql_svc_user> e que a conta está vulnerável a kerberoastable devido ao seu SPN. Se conseguirmos quebrar sua senha em texto simples, poderemos usá-la para obter acesso à instância SQL. As credenciais podem ser usadas com make_token
no Beacon.
Com acessos privilegiados (utilize antes o make_token
em uma conta para isso), podemos executar queries no banco de dados
mssqlclient.py (Impacket) com Proxychains
Impersonate
Descobrindo acessos disponíveis para personificação.
Na saída do comando, a coluna grantee_principal_id
pode fazer Impersonate para o grantor_principal_id
. Como os IDs não nos dizem muito, execute a query abaixo para ver quem são os usuários dos respectivos IDs
Também podemos escrever uma query que unirá essas duas ou usar o módulo de Impersonate do SQLRecon.
Outra maneira, é acessando o MSSQL de forma interativa. Execute o comando abaixo e, caso retorne 0
, significa que o usuário não é sysadmin
Agora vamos realizar o Impersonate e então, executar novamente o comando acima, a resposta agora deve ser 1
Os módulos SQLRecon também podem ser executados no Impersonation Mode
, prefixando o nome do módulo com o parâmetro i
e especificando o principal a ser representado
Command Injection (RCE)
O xp_cmdshell
pode ser usado para executar comandos shell no servidor SQL se você tiver privilégios de administrador de sistema. O mesmo irá falhar se você tentar manualmente no mssqlclient, pois o xp_cmdshell está desabilitado.
Para verificar o estado atual do xp_cmdshell, execute:
Caso o retorno seja 0
, significa que o xp_cmdshell está desabilitado, então devemos habilitá-lo com o seguinte comando:
Execute novamente o comando para verificar se o estado atual do xp_cmdshell foi alterado.
Apesar disso funcionar, alterar configurações de banco de dados é um trabalho muito sensível e que pode nos trazer problemas. Por isso, é recomendado utilizar ferramentas como o Invoke-SQLOSCmd
, porque ele tentará ativar automaticamente xp_cmdshell
se ainda não estiver, executar o comando fornecido e desativá-lo novamente. Sendo assim, não precisamos desfazer manualmente nossas alterações.
Com o xp_cmdshell
ativo, já podemos montar o nosso payload para termos o Beacon em mãos. O primeiro passo é ter o payload disponível no CS que, por questões de exemplo, estamos utilizando o smb_x64.ps1
.
Vamos fazer o Port Forwarding para que a porta 8080 da máquina com o Beacon ativo, redirecione para o CS na porta 80. Vamos também criar uma regra no Firewall para não termos problemas de bloqueio
O payload será encodado em base64.
Execute a query:
No Beacon da máquina que tem acesso ao SQL Server, execute:
SQLRecon
SQLRecon também possui um módulo para verificar a configuração xp_cmdshell, que também pode ser combinado com o módulo de Impersonate.
E por fim, executando comandos no SO
Movimentação Lateral
Procurando por links
, que em resumo é um conceito onde a instância do SQL Server permite acessar dados de uma fonte externa.
Ou caso prefira fazer manualmente, basta executar a query abaixo
Para executar queries nos servidores que estão "linkados", execute o comando abaixo. Aproveite também para ver se o xp_cmdshell
está ativo no host alvo.
Ou se preferir, pode executar uma query para realizar tal operação. As aspas duplas no segundo parâmetro são obrigatórias, não utilize aspas duplas. Não utilize escapes de aspas simples com barra invertido, mas sim com outra aspas simples
Para habilitar o xp_cmdshell
de outro SQL Server,execute a query abaixo (os colchetes são obrigatórios):
É sempre bom também, vermos se o SQL Server que está com link, também possui outros links.
Fazer esse processo em todos os servidores MSSQL pode ser algo demorado (dependendo da complexibilidade da rede), então podemos automatizar esse processo através do seguinte comando:
Verificando os acessos que possuímos no MSSQL remoto via Link
Reverse Shell
Ao fazer movimentação lateral de um SQL para outro, pare a forwarding na port 8080 do primeiro SQL Server, e configure o segundo SQL Server para utilizar a porta 8080
Agora vamos montar o Reverse Shell
Execute a query abaixo, porém se atente, pois quando for utilizar o OPENQUERY
, a query no segundo parâmetro tem que ficar entre aspas simples, então utilize escapes de aspas simples com outra aspas simples ao invés da barra invertida.
No Beacon do SQL Server, execute
Escalação de Privilégios
O padrão durante instalações SQL mais modernas, possui instância do SQL executada como NT Service\MSSQLSERVER
. Ele possui um tipo especial de privilégio chamado SeImpersonatePrivilege
, que permite à conta realizar o impersonate de outros usuários. Resumindo, esse privilégio permite que o usuário personifique um token que ele consegue controlar. No entanto, como esta conta não é um administrador local, ela não pode simplesmente controlar um processo com privilégios mais altos (por exemplo, SYSTEM) já em execução na máquina. Uma estratégia que muitos autores criaram é forçar um serviço SYSTEM a se autenticar em um serviço não autorizado criado pelo invasor. Esse serviço não autorizado é então capaz de se passar pelo serviço SYSTEM enquanto tenta se autenticar. Para verificar os privilégios atuais, execute (procure por SeImpersonatePrivilege
):
O SweetPotato
possui uma coleção dessas diversas técnicas que podem ser executadas. No exemplo abaixo, estamos pegando acesso ao SYSTEM
Sites
Last updated