Deseja obter acesso de superusuário a um sistema Linux? Aqui estão algumas das melhores maneiras de enumerar uma máquina Linux.

A enumeração é um dos principais estágios do teste de penetração. É a primeira coisa a fazer quando você compromete um sistema de destino como testador de penetração. Embora haja uma infinidade de ferramentas para automatizar esse processo, é sempre recomendável vasculhar manualmente e verificar novamente o sistema em busca de possíveis vetores de escalonamento de privilégios.

Vejamos as diferentes maneiras de enumerar manualmente um sistema Linux para escalonamento de privilégios.

Por que a enumeração é importante para o escalonamento de privilégios?

A escalação de privilégio, também conhecida como Escalação de Privilégio (EOP), é um componente central do teste de penetração e da metodologia de teste de penetração. Como o nome sugere, é um estágio em que você tenta elevar seus privilégios ao administrador ou, em sistemas Linux, ao usuário root.

Para obter privilégios de root, você precisa primeiro encontrar uma vulnerabilidade no sistema. É aqui que a enumeração entra em jogo. Embora existam ferramentas para automatizar a enumeração, na maioria das vezes, a enumeração manual e completa pode revelar configurações incorretas e outras vulnerabilidades que não são detectadas pelas ferramentas.

instagram viewer

1. Enumeração do sistema

A primeira coisa que você deve fazer depois de obter uma posição inicial é aprender sobre o sistema ao qual você estabeleceu acesso. Isso ajudará você a otimizar suas cargas para corresponder à arquitetura e garantir a compatibilidade máxima de suas cargas com o sistema de destino.

Por exemplo, se você tiver uma exploração de 64 bits, precisará modificá-la se o seu sistema de destino oferecer suporte apenas a software de 32 bits, pois há uma diferença entre sistemas de 32 e 64 bits.

Além disso, saber a versão do kernel ajudará você a procurar explorações na Web, caso descubra que a versão está desatualizada e vulnerável a uma exploração pública. Aqui estão alguns comandos que irão ajudá-lo a buscar informações do sistema:

Para encontrar informações do sistema, como versão do kernel, versão do SO, etc., digite:

cat /etc/cpuinfo 
uname -a

Se você quiser aprender mais sobre a arquitetura da CPU, use o comando lscpu:

lscpu

2. Enumeração do Processo

Processos são programas em execução. Conhecer a lista completa de processos em um sistema Linux, juntamente com algumas outras táticas de enumeração mencionados neste guia irão ajudá-lo a identificar processos potencialmente vulneráveis ​​e aproveitá-los para elevar privilégio.

Por exemplo, se você encontrar um processo em execução com privilégios de root, poderá injetar código arbitrário nele, o que pode levar a uma escalação bem-sucedida de privilégio.

Você pode usar o comando ps com o auxiliar sinalizadores para listar todos os processos no sistema:

ps aux

3. Enumeração de usuários e grupos

A enumeração de usuários e grupos é importante para descobrir quem tem acesso a qual parte do sistema. Saber disso permite que você defina o escopo de seus alvos com eficiência e crie uma estratégia de ataque eficaz. Além disso, você pode criar mapeamentos adequados e entender em profundidade as funções e privilégios de cada conta.

Ter visibilidade de contas privilegiadas permite que você experimente combinações conhecidas de nome de usuário e senha. Você pode imprimir o conteúdo do /etc/passwd e /etc/group arquivos para acessar a lista de usuários. Como alternativa, você também pode usar o comando getent.

Para obter a lista de usuários no Linux:

obter senha

Para obter a lista de grupos:

grupo getent

4. Investigando arquivos confidenciais

Arquivos confidenciais, como /etc/passwd e /etc/shadow pode potencialmente vazar muitas informações. De /etc/shadow você pode encontrar os hashes da senha dos usuários e tentar quebrá-los com uma ferramenta de quebra de hash como Hashcat ou John the Ripper.

Há também o /etc/sudoers arquivo, que, se você puder editá-lo de alguma forma, permitirá modificar as permissões do sudo para usuários e grupos.

5. Verificando as permissões do sudo

O gerenciamento adequado das permissões sudo é crucial para a segurança de um sistema Linux. A análise das permissões do sudo fornecerá informações sobre possíveis vetores para escalonamento de privilégios. Se houver configurações incorretas, como certos programas com um nível alarmante de privilégio, você poderá explorá-los para obter acesso root.

Este é apenas um exemplo dos muitos caminhos de ataque que podem se abrir quando você tiver clareza das permissões de sudo no sistema Linux. Outro exemplo seria abusar do mecanismo de pré-carregamento da biblioteca LD_PRELOAD, que você pode enumerar observando as permissões do sudo.

sudo -l

6. Encontrando Exploits do Kernel do Linux

As explorações do kernel do Linux são mortais porque atacam o núcleo do sistema operacional em execução no sistema comprometido. Com uma falha crítica do kernel, você poderá fazer praticamente qualquer coisa com o sistema.

Para encontrar explorações do kernel, primeiro descubra a versão do kernel e, em seguida, usando uma ferramenta como searchsploit ou, usando o Google Dorks, encontre um exploit adequado que afete a versão exata do kernel em execução no sistema.

7. Explorando binários SUID

SUID é a abreviação de Set Owner User ID na execução. É um tipo especial de permissão de arquivo que, quando definido, executa um programa com os privilégios de seu proprietário.

Se um programa foi criado pelo usuário root e o bit SUID foi definido para ele, o programa, quando executado, possuirá privilégios de root. Como o SUID pode ser abusado? É simples.

Enumere todos os binários com conjunto de bits SUID, vasculhe a lista, encontre um binário para o qual você tenha acesso de gravação e edite sua fonte para adicionar sua carga útil. Você pode usar o comando find para procurar binários SUID e redirecionar a saída padrão para /dev/null:

find / -perm -4000 2>/dev/null

8. Sequestro de bibliotecas

Às vezes, pode haver programas em execução no sistema que usam bibliotecas que não são protegidas contra gravação. Nesse cenário, você pode substituir facilmente a biblioteca em uso e assumir o controle da funcionalidade do programa.

Se você tiver sorte e encontrar um programa rodando como root, você pode seqüestrar a biblioteca da qual ele depende e potencialmente obter acesso ao shell root.

9. Investigando e sequestrando variáveis ​​de ambiente

As variáveis ​​de ambiente são tipos especiais de variáveis ​​que, até certo ponto, definem como o sistema e os programas funcionam. Uma variável de ambiente importante é a variável PATH.

Ele armazena a localização de todos os binários executáveis ​​no sistema. Você pode manipular a variável PATH e encadeá-la com outras vulnerabilidades, como sequestro de biblioteca, para obter acesso root.

Por exemplo, suponha que haja um executável com um conjunto de bits SUID. Para funcionar corretamente, ele está chamando um binário sem definir seu caminho completo.

Você pode tirar proveito disso criando uma versão duplicada e maliciosa do binário e atualizando a variável PATH com a localização de o binário malicioso, portanto, quando o executável SUID for executado, seu binário malicioso será executado como root e você poderá gerar um shell de root.

Além disso, também há uma boa chance de encontrar chaves e senhas secretas simplesmente examinando as variáveis ​​de ambiente. Você pode imprimir todas as variáveis ​​de ambiente usando o comando env:

ambiente

10. Encontrar artefatos no histórico do Bash

Muitas vezes, o histórico do usuário atual não será excluído. Você pode abusar disso para obter acesso a informações confidenciais ou executar novamente comandos anteriores com parâmetros modificados.

Embora isso provavelmente não leve à escalação de privilégios, é uma boa fonte de vazamentos de informações para fornecer clareza sobre o que o usuário geralmente faz no sistema.

11. Sequestro de tarefas cron vulneráveis

Os trabalhos Cron são um recurso embutido e altamente engenhoso do Linux. Se você migrou do Windows, um cron job pode ser comparado diretamente a uma tarefa agendada no Windows.

Ele é executado periodicamente e executa comandos. Tanto o horário de execução quanto os comandos que serão executados são pré-definidos pelo usuário. Às vezes, você pode encontrar alguns cron jobs vulneráveis ​​a ataques como injeção de curinga ou graváveis ​​pelo usuário com o qual você se conectou.

Você pode abusar dessas vulnerabilidades para obter acesso root ao sistema. Para explorar um trabalho cron, você deve primeiro encontrar um vulnerável. Aqui estão os comandos para listar cron jobs atualmente em execução e outros dados relevantes:

ls /etc/cron.d/
crontab -l -u

12. Listando pacotes desatualizados

Depois de estabelecer o acesso a um sistema, uma das primeiras etapas a serem executadas é listar todos os pacotes de software instalados e comparar suas versões instaladas com o lançamento mais recente.

Existe a possibilidade de que algum pacote obscuro esteja instalado, o qual pode não ser muito usado, mas é criticamente vulnerável a um ataque de escalonamento de privilégios. Você pode então explorar esse pacote para obter acesso root.

Use o comando dpkg com o -eu tag para listar pacotes instalados em sistemas baseados em Debian e Ubuntu:

dpkg -l

Para sistemas RHEL/CentOS/Fedora, use este comando para listar os pacotes instalados:

rpm -qa 

Agora você sabe como enumerar manualmente o Linux para escalonamento de privilégios

A escalação de privilégios depende exclusivamente da enumeração. Quanto mais informações você tiver acesso, melhor será capaz de planejar suas estratégias de ataque.

A enumeração eficiente é a chave para estabelecer uma base, escalar privilégios e persistir com sucesso em seu sistema de destino. Embora fazer as coisas manualmente ajude, algumas das tarefas podem ser atribuídas a ferramentas automatizadas para economizar tempo e esforço. Você deve conhecer as melhores ferramentas de segurança para verificar vulnerabilidades em um sistema.