Forense, injeção de SQL e gato sofredor: análise da tarefa nº 3 do estágio online NeoQUEST-2020



Hoje consideraremos a tarefa mais controversa do NeoQUEST-2020 : sua primeira parte é uma campeã no número de participantes que a aprovaram, e a segunda parte obedeceu apenas a alguns. O que há de tão especial sobre ele? Entenda o corte!


Você já teve que investigar um despejo de RAM? Você sabe quantas coisas interessantes você pode obter de lá? (spoiler: tudo, incluindo os resultados da execução de scripts, fotos recentes e o histórico do navegador).
E as injeções exóticas de SQL? Você envia uma determinada foto para o site e recebe informações de um banco de dados fechado - isso não é um crime ideal?
Na primeira parte do artigo, consideraremos as ferramentas para analisar o despejo de memória e aprenderemos como extrair as informações necessárias, e na segunda parte do artigo mostraremos claramente o processo de manipulação de tags de imagem para uma injeção complicada :)

Portanto, a tarefa é fazer o download do arquivo morto., que contém um arquivo binário de 1 GB com o nome falante memdump.bin, com base no qual podemos assumir que este é um despejo de RAM. Usaremos a estrutura de volatilidade para sua pesquisa . O Volatility suporta vários plugins que facilitam a pesquisa e a extração do despejo de várias informações úteis para chantagear um analista. Primeiro, use o comando imageinfo e obtenha informações sobre o dump:



A julgar pela saída do comando imageinfo, estamos lidando com um despejo de memória do Windows 7. A seguir, veremos a lista de processos em execução no sistema no momento em que o despejo foi removido usando o comando pslist:



Nesta lista, você pode ver vários processos interessantes. Vamos começar o estudo com o processo chrome.exe - você sempre pode encontrar algo intrigante no navegador. Existem plugins adicionais para volatilidade que automatizam a extração de informações dos processos. Por exemplo, o plugin chromehistory nos permitirá extrair um histórico de visitas do navegador de um despejo de RAM:



Na história do chrome, várias coisas interessantes podem ser notadas ao mesmo tempo. Primeiro, um link para a segunda parte da tarefa, bem como consultas de pesquisa sobre metadados em imagens PNG, que também são uma dica para a segunda parte, mas veremos mais adiante. No estágio atual, estamos interessados ​​em solicitar um código promocional para um desconto no site e em arquivos pdf, o que indica o objeto de novas pesquisas (a execução do Acrobat Reader`a também pode nos solicitar isso). Vamos tentar encontrar documentos PDF em um despejo usando o comando filescan:



Boa sorte! Parece que há algum promo.pdf no despejo. Vamos tentar puxá-lo usando o comando dumpfiles:



Nesse estágio, pequenas dificuldades podem surgir devido ao fato de que alguns visualizadores de documentos em PDF podem não reconhecer o arquivo extraído (você só precisa excluir os bytes extras no final do arquivo). Mas estamos realmente com medo de alguns bytes extras? :) No final, abra o documento e veja o código QR, depois de ler o que recebemos a bandeira da primeira parte da tarefa (e ao mesmo tempo o código promocional para receber um presente da equipe NeoQUEST - oferecemos prêmios memoráveis todos os participantes que concluíram pelo menos uma tarefa!).



Em seguida, tente obter a segunda bandeira. Voltamos ao site, cujo link foi encontrado no histórico do navegador. Para acessar o site, você precisa inserir um código promocional. Recordamos o histórico de pesquisa no navegador e a descrição do próprio documento (USE ISTO PARA ADERIR), a partir do qual podemos assumir que o primeiro sinalizador é o código promocional de que precisamos. Entramos no campo e chegamos ao site onde é oferecido o upload de uma foto: a



julgar pela frequência com que o site congela, nossos participantes decidiram verificar experimentalmente o carregamento de todos os tipos possíveis de documentos. Depois de um certo período de tempo, entendemos que apenas imagens PNG podem ser carregadas no site. O próximo quebra-cabeça é a mensagem “Não há dados suficientes para armazenar esta imagem, desculpe!”, O que ocorre quando você tenta fazer upload de uma imagem.

Voltando ao histórico do navegador, lembramos sobre solicitações do formulário "adicionar metadados ao arquivo png". Usando inferências simples, concluímos que, provavelmente, certos valores devem ser inseridos nos metadados para fazer upload de uma imagem em um site. Você pode começar explorando o formato PNG (para obter uma descrição, por exemplo, clique aqui ). Primeiro, verifique a lista de palavras-chave padrão para imagens PNG de metadados, por exemplo: "Autor", "Descrição" etc. Usando, por exemplo, o utilitário de conversão do conjunto ImageMagick, adicione metadados à imagem de teste:

convert test.png -set 'Title' '1' -set 'Author' '2' -set 'Description' '3' -set 'Copyright' '4 '-set' Tempo de criação '' 5 '-set' Software '' 6 '-set' Isenção de responsabilidade '' 7 '-set 'Warning' '8' -set 'Source' '9' -set 'Comment' '0' out.png

Tentamos fazer upload da imagem resultante para o site e obter o sucesso:



Acontece que os campos de metadados necessários são Título, Descrição, Autor e Direitos autorais.
A propósito, uma dica para isso também pode ser encontrada no despejo de memória: você pode encontrar a menção do arquivo mr_cat.png usando volatilidade.



Nossos participantes decidiram que era com a ajuda do Sr. Cat que era necessário injetar o site (muitas mensagens chegaram ao nosso correio com o Sr. Gato em uma aparência comprimida, invertida, refletida e outras feias ), mas o gato não tinha nada a ver com isso! Ele simplesmente distrai e sugere aos participantes: bem, olhe para mim, há algo interessante por dentro! Dentro da lixeira, a imagem foi preservada apenas parcialmente; no entanto, em seus resíduos, é possível observar os campos de metadados preenchidos necessários:



Vá em frente: agora podemos fazer upload de arquivos para o site; no entanto, o que dá e como procurar uma bandeira? É lógico supor que, uma vez que os metadados sejam necessários para o download, é possível que eles sejam usados ​​de alguma forma para armazenar arquivos baixados (por exemplo, como chaves em um banco de dados). Viva! Estamos nos aproximando da sobremesa: precisamos verificar o site quanto à possibilidade de injeção de SQL. Descobrimos que, se um dos parâmetros for substituído por aspas duplas ("), o site notificará um erro em vez de carregar a imagem:



Agora, vemos a própria consulta SQL e entendemos quais campos podemos operar para construir uma injeção para extrair dados do banco de dados usado. Quanto à localização do sinalizador, neste caso, é lógico verificar a primeira imagem que foi carregada no banco de dados. Além disso, durante a operação de injeção, você deve prestar atenção ao fato de que INSERT é executado na solicitação. Isso nos força a construir consultas específicas porque é impossível executar explicitamente uma operação SELECT da mesma tabela na qual estamos inserindo ao mesmo tempo que a operação de inserção (INSERT).

Vamos fazer uma solicitação com a qual extraímos a Descrição da primeira imagem no banco de dados:

converter test1.png -set 'Title' '1' -set 'Author' '", (SELECT description FROM (imagem SELECT * FROM) AS x limite 0,1)) - -' -set 'Descrição' '3' - set 'Copyright' '4' test.png

Carregue a imagem resultante no site e obtenha a descrição no campo Copyright, que é uma bandeira:



Hurrah, tarefa concluída! Esperamos convencer a todos a verificar novamente a entrada do usuário pela milionésima vez e também mantê-la segura olho no olho de criar uma reserva de memória RAM :)
Termine o artigo com uma citação dos grandes sábios:


All Articles