fbpx

Exploit Wars II – O servidor ataca novamente

Exploit Wars II – O servidor ataca novamente

 

Exploit Wars II – O servidor ataca novamente
Ao trabalhar com segurança, geralmente nos preocupamos com a segurança de nossos clientes e as possíveis vulnerabilidades em seus
software ou suas configurações.
Mas e os atacantes? Dificilmente alguém parece se preocupar com eles, e mesmo eles mesmos geralmente
preocupado com a OPSEC (https://www.youtube.com/watch?v=dTQAO7M5Gp8), se houver alguma coisa.
Dado esse desequilíbrio inerente, parecia justo examinar a segurança das explorações pela primeira vez, em vez de sempre os servidores
ou serviços.
Encontrando uma exploração a explorar
Existem alguns pré-requisitos para que uma exploração seja explorável de maneira impactante.
Deve estar prontamente disponível. Caso contrário, é improvável que qualquer exploração potencial funcione em qualquer tipo de escala.
Deve ser uma exploração remota. Caso contrário, ele não funcionaria realmente no sistema de atacantes (ou é vítima agora?).
Idealmente, ele usa uma chamada de função system (). Esse é um bom alvo para fazer a injeção de comando funcionar.
Ele precisa agir de maneira diferente, dependendo da resposta do servidor. Caso contrário, não temos como influenciar o
explorar que queremos explorar.
Os três primeiros pontos podem ser facilmente manipulados.
Disponibilidade – Tudo o que está no ExploitDB está amplamente disponível
Exploração remota – grep para “remote”
Usando system () – grep para “system (. *)”
Até o último ponto, as coisas são um pouco mais complicadas e, eventualmente, requerem inspeção manual. O que não é tão ruim, já que
em última análise, mesmo se ele usar a entrada do usuário (/ vítima), ainda precisaremos verificar manualmente se é explorável. Felizmente para nós Kali
O Linux vem pré-instalado com o exploitdb, portanto, é fácil pesquisar nos arquivos.
Fig.1 – O comando de pesquisa
Após um pouco de inspeção manual, encontramos um candidato (https://www.exploit-db.com/exploits/19909).
A exploração da vítima
A exploração é para o Mozilla Bugzilla até e incluindo a 2.10. (https://www.exploit-db.com/exploits/19909)
No processo de exploração, ele busca um nome de produto do servidor usando o lynx e uma chamada para system (). A chamada para
system () é um bom indicador para exploração potencial. Você pode ver a parte relevante da exploração abaixo. A linha tem
foi cortado um pouco à direita, mas apenas passa mais parâmetros e canaliza a saída em um arquivo.
Fig.2 – Buscando o nome de um produto
Depois de buscar as informações, ele as processa para extrair o nome do produto. Essencialmente, extrai tudo depois
“product =” até a primeira aspas duplas.
Com o nome do produto extraído, ele envia outra solicitação ao servidor para obter informações adicionais. Nesse pedido,
usa o nome do produto que foi extraído anteriormente da resposta dos servidores.
Fig.3 – Usando o nome do produto
A linha é novamente cortada à direita. Simplesmente porque é muito longo. A única coisa importante a saber sobre os desaparecidos
parte é que a saída é canalizada para um arquivo chamado enter_bug.cgi
Essa chamada para system () usa a variável $ page, construída a partir do nome do produto em $ product, entre outras
coisas. Portanto, há uma maneira de influenciar a chamada para system () com o que é retornado à primeira solicitação: dados arbitrários
de uma fonte não confiável, ou seja, o explorado.
O único problema TINY é que o nome do produto é codificado usando a função antiIDS ().
O pequeno grande problema de passar pelo codificador Anti IDS
Vamos dar uma olhada no antiIDS (), desenvolvido para contornar os sistemas de detecção de intrusões, evitando certos caracteres.
Fig.4 – O HORROR
Bem, isso é fácil. Basta escrever uma injeção de comando que não use nenhum dos seguintes caracteres:
Números
Cartas
Quaisquer aspas
Espaços
.- | <> \
Ok, talvez devêssemos ver se podemos encontrar outra exploração vulnerável.
Nesse ponto, eu realmente procurei outras explorações potencialmente vulneráveis, não consegui nada e acabei conseguindo
de volta a este. Sentamos para olhar para isso com a equipe do CTF da qual participo e tentamos. É surpreendentemente complicado
para fazer qualquer coisa sem letras ou números, então, quando encontramos uma maneira de poder usar números, ficamos todos realmente empolgados.
Vou tentar explicar como funciona abaixo.
Batendo nossas cabeças contra a parede
Globbing pode ajudar: os shells do Linux podem expandir certos caracteres para corresponder a vários caminhos ao mesmo tempo. A * corresponde a qualquer coisa em
o diretório atual. UMA ? corresponde a um único caractere.
Então / b? N / b? Sh provavelmente corresponderá a / bin / bash, mas, ao contrário dos caracteres / e?, As letras são filtradas pelo IDS
rotina. Infelizmente, ao tentar executar / ??? / ???? em um shell, ele executa a primeira correspondência encontrada, fornecendo a esse programa
outras correspondências como parâmetros.
Precisamos encontrar algo útil que possamos corresponder exclusivamente a partir de quantos caracteres ele possui, para que possamos executá-lo
usando apenas? e /. Infelizmente, não há nada parecido em uma instalação padrão do Kali Linux, que é o nosso objetivo.
Criando números de guias e caracteres especiais
Podemos, no entanto, declarar uma função Bash, pois podemos usar () e {}, bem como;. Com essa capacidade e também $ & num;
que se expande para o número de parâmetros fornecidos e usando guias em vez de espaços, podemos

28 de outubro de 2019

Sobre nós

A Linux Force Brasil é uma empresa que ama a arte de ensinar. Nossa missão é criar talentos para a área de tecnologia e atender com excelência nossos clientes.

CNPJ: 13.299.207/0001-50
SAC:         0800 721 7901

[email protected]

Comercial  Comercial: (11) 3796-5900

Suporte:    (11) 3796-5900
[email protected]

Copyright © Linux Force Security  - Desde 2011.