Procura por arquivos com permissões erradas (SUID) ou kernels desatualizados.
Contexto
A Escalação de Privilégios ocorre quando exploramos falhas de configuração ou vulnerabilidades no sistema operacional para elevar nosso nível de permissão.
Este módulo foca em dois vetores principais no Linux:
- Arquivos SUID (Set User ID): Arquivos que, quando executados, rodam com as permissões do proprietário (geralmente o Root). Se um binário como o
find,vimoubashtiver o bit SUID ativado indevidamente, ele pode ser usado para obter um shell de administrador. - Versão do Kernel: Kernels antigos possuem vulnerabilidades famosas (como Dirty COW ou PwnKit). O script identifica a versão para que o Pentester possa buscar o exploit correspondente.
Possibilidades de Implementação
- Busca de Binários SUID: Utiliza o comando
finddo sistema ou percorre diretórios via Python para listar arquivos com a permissão4000. - Checagem de Kernel: Lê o arquivo
/proc/versionou executauname -apara extrair a versão exata do sistema. - Escriturabilidade em Pastas Críticas: Verifica se o usuário atual pode escrever em arquivos sensíveis como
/etc/passwdou/etc/shadow.
Código
Este módulo utiliza a biblioteca os e subprocess para interagir com o sistema operacional e coletar dados de configuração.
import os
import subprocess
def check_kernel_version():
"""
Coleta informações sobre a versão do Kernel e arquitetura.
"""
print("[*] Verificando versão do Kernel...")
try:
kernel = subprocess.check_output("uname -a", shell=True).decode().strip()
print(f"[+] Kernel Info: {kernel}")
except Exception as e:
print(f"[!] Não foi possível obter o kernel: {e}")
def find_suid_files():
"""
Busca por arquivos com o bit SUID definido.
"""
print("\n[*] Buscando por arquivos com permissão SUID...")
print("[*] Isso pode levar alguns segundos...")
# Comando find para buscar arquivos com permissão 4000 (SUID)
# 2>/dev/null descarta erros de permissão negada durante a busca
command = "find / -perm -4000 -type f 2>/dev/null | head -n 20"
try:
suid_files = subprocess.check_output(command, shell=True).decode().strip()
if suid_files:
print("[!] Binários SUID encontrados (Top 20):")
print(suid_files)
else:
print("[-] Nenhum binário SUID incomum detectado.")
except Exception:
print("[!] Erro ao executar a busca por SUID.")
def check_writable_files():
"""
Verifica se arquivos críticos são editáveis pelo usuário atual.
"""
critical_files = ["/etc/passwd", "/etc/shadow", "/etc/sudoers"]
print("\n[*] Verificando permissões em arquivos críticos...")
for f in critical_files:
if os.access(f, os.W_OK):
print(f"[!!!] PERIGO: O arquivo {f} é EDITÁVEL por você!")
else:
print(f"[-] {f:12}: Apenas leitura ou sem acesso.")
def main():
print("=" * 60)
print("Módulo: Privilege Escalation Checker | Projeto: 30 Lessons")
print("=" * 60)
# Verifica se estamos em um sistema Linux
if os.name != 'posix':
print("[!] Este módulo foi desenhado para ambientes Linux/Unix.")
return
check_kernel_version()
check_writable_files()
find_suid_files()
print("\n" + "=" * 60)
print("[*] Auditoria de privilégios finalizada.")
if __name__ == "__main__":
main()
Observações
- TFOBins: Sempre que encontrar um binário SUID, você deve consultar o site GTFOBins. Ele lista comandos específicos para cada binário (como
cpounmap) que permitem escalar o privilégio para Root. - Falsos Positivos: Nem todo arquivo SUID é uma falha; muitos (como o
passwd) precisam dessa permissão para funcionar. O segredo é encontrar binários que permitem execução de comandos ou leitura de arquivos arbitrários. - Automatização Profissional: Este script é uma versão minimalista do famoso
LinPEAS. Em seu projeto, destaque que a automação da enumeração interna economiza horas de trabalho manual em um exame de certificação como o OSCP.