Hacking na Grécia Antiga: resultados do estágio online do NeoQUEST-2019


Para resumir o estágio on - line do NeoQUEST-2019 : por baixo, vamos falar sobre as tarefas, analisar as estatísticas de seu progresso e elogiar os vencedores!


Isenção de responsabilidade: o produto pode conter vestígios de amendoim e spoilers para aqueles que ainda não concluíram a tarefa, mas estão honestamente indo (e existe essa oportunidade - o site on-line do palco continua funcionando!). Não é recomendado o uso se você não tiver demonstrado perseverança suficiente para obter todas as chaves sozinho.


Quem é o melhor?


Então, este ano nossos vencedores foram:


1º lugar - AV1ct0r, 952 pontos;
2º lugar - OLD_NA_MESTE, 766 pontos;
3º lugar - gurgenhopar, 505 pontos.


Honra e respeito das crianças! Note-se que os vencedores de 1-2 lugares já foram determinados desde o primeiro dia da competição e não concederam suas posições a ninguém (exceto que eles trocaram de lugar). Mas a luta pelo terceiro lugar foi quente: às vezes o participante “bronze” mudava várias vezes ao dia!


Os três primeiros estão à espera de presentes bem merecidos, e todos os que concluíram pelo menos uma tarefa completa são lembranças da equipe NeoQUEST! (Sim, a propósito: se você resolveu pelo menos uma tarefa, mas ainda não nos disse como gostaria de receber um presente - agora é a hora de fazer isso escrevendo para support@neoquest.ru )


Revelar segredos


Para os participantes, elaboramos 10 tarefas, variando em complexidade e tópico. Falaremos sobre alguns detalhes, e o restante será lançado em breve em Habré na forma de artigos separados!


Tarefa número 1 - "eco nemeano"
Nesta tarefa, os participantes receberam o chamado servidor de eco, que você pode conectar a uma porta específica e enviar dados. Em resposta, o servidor envia o mesmo que o enviado para ele. A bandeira está no servidor e deve ser obtida apenas com um endereço IP e uma porta.


Tarefa nº 2 - “Suave e sedosa”
A história é banal - informações muito importantes vazam na rede. Os participantes recebem dois arquivos: o próprio arquivo binário, que gerou o vazamento de tráfego, e o pcap dump desse tráfego. O sinalizador está em um despejo pcap, mas no formato criptografado, e você precisa descompactar o arquivo binário para descriptografar os dados e obter o sinalizador.


As tarefas de interrogatório número 1 e número 2 serão separadas Habrastatami!


Tarefa número 3 - "Comunicação com os céus"
Quase todos os participantes conseguiram estabelecer conexões celestes, a tarefa tornou-se líder em habilidades entre países. Dados iniciais - link para o bot de telegrama.


O primeiro passo foi adicionar um bot e ler sua descrição. Ele diz que o bot “congela” em sua rede social favorita e em nenhum outro lugar. Para todas as tentativas de, pelo menos de alguma forma, falar com ele, o bot dispensa e pede que ele escreva para ele em Olímpia. Vamos para o endereço indicado pelo bot e chegamos à página com autorização na rede social "divina" (não).


Ao se comunicar com o bot, você pode receber a seguinte mensagem: "Não sigo links desconhecidos!", O que pode nos dar a ideia de que o bot pode seguir o link familiar.


Quando você tenta ir para outro lugar que não seja a página de autorização (para a página de índice, por exemplo), redirecionamos de uma maneira interessante (na verdade, isso é feito em muitos sites, mas eles normalmente filtram o próximo parâmetro):


login? next = index


A primeira coisa que vem à mente: "Não existe o OpenRedirect-a?" É, mas funciona apenas para um usuário autorizado em uma rede social, que é o deus do ridículo e da calúnia, mãe , porque constantemente sentado nele. Sim, vamos criar nosso site, como o próximo parâmetro, passar o link para ele e ver se o bot clica no link? Nós criamos rapidamente qualquer site em uma hospedagem gratuita. Servimos o bot:


http://213.170.100.214?next=https://your.freeapp.kek/


O bot não chegou à página, o redirecionamento não funcionou. É tudo uma questão de filtro, infelizes desenvolvedores verificam se o próximo parâmetro contém substrings http ou https, esperando redirecionar o usuário apenas dentro do domínio. Ingênuo. Nós enviamos:


http://213.170.100.214?next=//your.freeapp.kek/


III ... bot vai para o nosso site! Mas nada mais acontece. O bot entrou, olhou e saiu (no primeiro dia, não foi assim, pois o bot tinha um bug: enviamos cookies com uma sessão após um redirecionamento para o site do atacante, o que facilitou um pouco a tarefa; no segundo dia, a brecha foi fechada no segundo dia).


No entanto, se você fizer uma cópia da página de autorização, o bot pensará que está logado e fará login na sua página. Copiamos recursos da página de autorização da rede social e criamos uma página de phishing. No servidor, escrevemos nos logs todos os logins e senhas inseridos. Enviamos o link para o bot, e ele efetivamente faz login na página falsa.


imagem

Pegamos o nome de usuário e a senha e efetuamos login na rede social, obtemos a chave. Sucesso!


Para esta tarefa, a redação foi redigida por um de nossos participantes, mr_umnik , leia aqui .


Tarefa número 4 - "Crypto Crypto"
A quarta missão do "Crypto Crypto" é dedicada, curiosamente, à criptografia! E isso não é sobre o CTF tradicional RSA, mas sobre as cifras do Mundo Antigo, quando a arte da criptografia estava apenas em sua infância.
Portanto, é fornecido um arquivo com três arquivos. O conteúdo do primeiro arquivo inclui texto legível e uma linha criptografada:


Use a sabedoria que a deusa concedeu a você.
5fw909zcmxsc7sxn1m6m86wxs2xrhrx78r72333mms8rlkg1u41o4dm82n632n2c2s2r17nwx3673c6hnh8n8x3mn7dwrrdswmxm1nc3wc681d16rmdc8x


Surge a pergunta: de que tipo de deusa estamos falando? Vamos virar a lenda. A única referência é a menção de uma mulher sábia em um capacete com uma lança nas mãos, representada no medalhão Cerberus. Tais vestes correspondem à deusa da sabedoria Atena, que sugere imediatamente o uso de uma cifra afim consoante. A boa e velha força bruta permitiu decifrar a mensagem secreta:


módulo 9b6598564ebfb1fd6576cac681c87000bb51
Texto cifrado 2b174f07479751ce84d60f809fa4a14160b482dcc25db6be490d9f1e2efcb29196


Então o que fazer a seguir? Talvez o segundo arquivo dê mais informações? Então seu conteúdo:


Que outro código antigo virá à mente? Vamos começar com um simples ...
35ub2b9slmkjonnqtsokomumqnphkinmrqlqoyz4aayvr4tzv4ax8vv19xrcvb9ayv6fayrx58vr4ayv58v3r4uayvtyz4v9v68v9v4avuayvtyz4v9vayv58v3v5v


A primeira cifra que vem à mente é a cifra de César . Felizmente, e pode ser facilmente descriptografado! Temos:


módulo b45327669cb7375d596803165a9497
dica Os gregos antigos nos deram o teorema de Pitágoras e os chineses apresentaram o teorema chinês sobre você sabe o que


Sim! Aqui está uma dica! Além disso, sugerindo o teorema chinês restante . Este teorema afirma que um determinado número inteiro pode ser reconstruído do conjunto de seus resíduos da divisão por números de um conjunto de números primos mutuamente em pares.
Então, então, então, temos 2 módulos, bem como um determinado texto cifrado. Talvez este texto cifrado seja o mesmo número inteiro restaurado? Então, para encontrar os restos mortais, basta trazer o texto cifrado em dois módulos conhecidos por nós. Temos:


Resíduo 1: C1 = Modificação de texto cifrado (módulo 1) = 8b53sex74ebfb1fd6576cac681c86ffc36e7
Resíduo 2: C2 = Modificação de texto cifrado (módulo 2) = 14327669cb7348d59680c6595418


O que fazer depois? Vamos prestar atenção no terceiro arquivo:


Tínhamos dois módulos mutuamente simples, um texto cifrado, uma dica de alguma tecnologia chinesa e ... a impressão da Antiga Esparta.
Não que fosse uma reserva necessária para resolver o quebra-cabeça, mas desde que comecei a colecionar dicas, é difícil parar ... Talvez seja a hora de começar a resolvê-lo?


Tudo parece estar no lugar ... exceto pela impressão da antiga Esparta. Por que ela está aqui? Talvez haja uma cifra? De fato, a cifra de Esparta Antiga também é chamada de cz de Szital .
Vamos tentar descriptografar os resíduos resultantes. Como resultado, selecionamos aqueles cujos fragmentos coincidem com as peças da bandeira fornecidas na legenda. Como resultado, recebemos:


M1 = 88b78fb7161c54fcc33eda86bb6c6edf56f7
M2 = 19d64c553b9927657384640168c8


Em seguida, o sinalizador final assume a forma:


NQ2019 88b78fb7161c54fcc33eda86bb6c6edf56f719d64c553b9927657384640168c8


Tarefa número 5 - "Carta da Apple"
Segundo a lenda, temos os seguintes dados: uma imagem de uma webcam que diz "Robert B. GmbH" nela. E também - um arquivo com algum conteúdo estranho. Para obter a chave, você deve preencher os seguintes campos do formulário:



Além disso, o herói da lenda sugere que a imagem é uma dica para o número de telefone e o arquivo deve, de alguma forma, nos levar à identificação da câmera.


Lidaremos com a imagem primeiro. Pesquisá-lo na Internet não leva a nada. Mas a inscrição "Robert B. GmbH" após o primeiro pedido no Google nos diz que o fabricante desta câmera é a empresa alemã Bosch, cujo fundador é Robert Bosch. E então é hora de lembrar que no formulário da web próximo ao campo "Telefone" estava marcado "(.gr)". Bem, a ação ocorre na Grécia, é lógico. Portanto, após algumas deliberações, passamos ao site grego da Bosch . E o número de telefone indicado lá ( +30 210 5701360 ) é exatamente o que precisamos!


Passamos para o segundo arquivo. Tem o seguinte tipo de entrada:


... c6d1eb6f29d739176bdbe79c3d3b504c9d64fecb ... olympic_shot.png


Tínhamos que adivinhar que possuímos um link magnético em seu formato mais simples, no qual existe um hash usado na rede BitTorrent mais comum! Resta restaurar corretamente o formato do link magnético.


magnet :? xt = urn: btih: c6d1eb6f29d739176bdbe79c3d3b504c9d64fecb & dn = olympic_shot.png


Adicionamos este link ao cliente de torrent, baixe a imagem:


imagem

À primeira vista, não há nada de especial nisso, mas se você olhar de perto, poderá ver que o professor de uma escola grega antiga não aponta o dedo para o vazio, mas para um vínculo bastante válido com o grupo VKontakte.


No grupo, encontramos um post com a próxima parte da tarefa. É necessário baixar um arquivo escrito em C de documentos e encontrar erros de sintaxe e semântica nele. No próprio arquivo, você pode observar uma interpretação peculiar dos mitos gregos antigos.


Código fonte C
#include "AncientGreece.h" void eat (int who, int *whom) { *whom = 0; } int BirthOfAthena() { int Zeus = 10000; int Metis = 1000; int Athena = Zeus + Metis; eat(Zeus, &Metis); Athena = 0; bool headache = TRUE; int kick = -1000; do { kick++; if (kick = Athena) { Athena = 1000; headache = FALSE; } } while (headache); return Athena; } int ApplesOfTheHesperides() { int labour = 0; int Heracles = 100; int heaven = 100000; int Atlas = 1000; int golden_apples = 8222; /*why?*/ bool trick = TRUE; while(!Heracles_is_here) { Atlas = Atlas + heaven; if (labour == 10) break; labour++; } Heracles_is_here = TRUE; Atlas = Atlas - heaven; Heracles = Heracles + heaven; Atlas = Atlas + golden_apples; trick = TRUE; Atlas = Atlas - golden_apples; Heracles = Heracles - heaven; Atlas = Atlas + heaven; return Heracles + golden_apples } void BirthOfZeus() { int Cronus = 1000; int newborn_gods[] = {1000, 1000, 1000, 1000, 1000, 1000}; int i = 0; for (i = 0; i < 6; i++) { eat(Cronus, &newborn_gods[i]); } int Zeus = newborn_gods[6] + 10000; bool battle = TRUE; bool peace = FALSE; int Thetis = newborn_gods[0] + 1000; int Hera = newborn_gods[2] + 1000; int Hades = newborn_gods[3] + 1000; int Demeter = newborn_gods[1] + 1000; int Poseidon = newborn_gods[4] + 1000; Cronus = 0; battle = FALSE; peace = TRUE; } void main() { BirthOfZeus(); BirthOfAthena(); ApplesOfTheHesperides(); } 

Nós encontramos a função main () e entendemos que é necessário considerar as funções na ordem de suas chamadas em main (). Os números nesta tarefa têm um significado próprio: a pessoa não nascida / morta / deus é designada pelo número 0, a pessoa pelo número 100, todos os deuses e titãs - 1000 e Zeus, o Trovão, é 10.000.


Vá para a função BirthOfZeus (). É lógico supor que essa função fale sobre o nascimento de Zeus, bem como sobre sua luta pelo poder. Então, depois de ler o mito do nascimento de Zeus, examinamos o código e vemos que um ciclo de 0 a 6 nesse caso é um erro semântico - Cronos não comeu cinco de seus filhos, mas apenas cinco. Resta entender como compor uma chave a partir disso: a chave é compilada pelos números de linha com erros. A primeira parte da tecla - o número da linha - é 60. Seguimos em frente.


O próximo erro nos espera na linha número 64 - tudo é simples, indo além dos limites da matriz.


O próximo erro na linha 67. O fato é que Thetis, a deusa Thetis, não era filha de Cronos e irmã de Zeus. Em vez disso, deve haver a deusa Hestia.


Na função BirthOfAthena (), um erro nos espera por muito cuidado: na condição na linha 20, um sinal de igual é escrito e, de acordo com o padrão da linguagem C, dois sinais de igual são necessários para comparação.


A função mais complexa era ApplesOfTheHesperides (). Um ramo de uma tarefa direta surge literalmente imediatamente. Por que int golden_apples = 8222? Ainda não está claro.


A postagem do VKontakte também tem algumas dicas para esta tarefa:


1) Onde procurar a resposta? Na abertura, que aconteceu no dia primeiro de março.


Ao não olhar brevemente para os eventos de primeiro de março (ou você pode encontrar imediatamente o que precisa lembrando do post e da menção à alquimia), está a descoberta da Tabela Periódica de D. I. Mendeleev. Ótimo, siga em frente!


2) O que usar ao elaborar parte da chave? (observe a localização do quebra-cabeça no texto)


• O que une as três seguintes palavras: Mnemosine, Oceano, Huygens?
• Quem deu fogo às pessoas?


Google e encontre a resposta: TITAN OF PROMETHES. Conforme declarado na tarefa, isso ajudará na compilação da chave. Resta entender por que exatamente 8222. Não foi em vão que procuramos informações sobre a tabela periódica: é óbvio que a resposta deve ser buscada lá. Lembrando da química, encontramos o número de série do ouro = 79.


Mas e a maçã? Provavelmente, a química também será útil aqui de alguma forma. Descobrimos que a maçã contém mais potássio. Seu número de série é 19. Abordamos o grande segredo: por que 8222, e não 7919? Claro, o bom e velho código de César. Deslocamos cada elemento 3 para a direita, obtemos nosso valor de 8222.


Restava um pouco: criptografar o titan de PROMETEI de acordo com a tabela periódica. Ambos os elementos estão na tabela, temos: 2564. Notavelmente, prosseguimos para a descoberta adicional de erros no código.


Na mesma função, uma variável não inicializada é esperada na linha 38, um erro semântico na linha 41 (foi o feito de 12 de Hércules!) E a ausência de ponto e vírgula na linha 52. Ah, conseguimos. O código resultante = 606467202564384152. Esse é o ID da nossa câmera. Estranho, mas na Grécia antiga isso simplesmente não acontece.


Introduzimos esses dois valores na forma, provamos ao mundo inteiro que não somos um robô e obtemos a chave preciosa!


Tarefa número 6 - "Vai, o touro, balança"
A tarefa número 6 deste ano foi muito difícil, mas interessante. Vamos analisá-lo em detalhes em um Habrastatya separado, mas por enquanto dizer brevemente: era necessário brincar com o Minotauro usando um aplicativo no qual algo estava faltando.


Tarefa número 7 - "Você é mais inteligente? Não, rápido!
Nesta tarefa (que também será um artigo separado!), Os participantes foram convidados a lidar com um aplicativo que criptografa os dados inseridos usando o valor dos parâmetros do acelerômetro do dispositivo, enquanto pressiona os botões do teclado. Para concluir a tarefa, foi necessário inserir vários dados no aplicativo e analisar cuidadosamente os desvios resultantes.


Tarefa número 8 - "O intérprete divino"
Nossos participantes regulares podem ter aprendido essa tarefa - ela permaneceu desde o ano passado. Então ninguém passou pela segunda parte, e decidimos dar a ele uma segunda chance. De acordo com a primeira parte da tarefa, existe o nosso artigo sobre Habré, onde ele fala principalmente sobre a pesquisa de vulnerabilidades. Este ano, o foco da tarefa não foi focado na pesquisa, mas na exploração de vulnerabilidades - e, para isso, mais uma vez, destacaremos um Habrastaty separado.


A conclusão é que o programa interpretador de comandos está sendo executado na porta de rede do servidor. O binário do programa está anexado à tarefa. O servidor está executando o Windows Server 2016 e, entre outras coisas, o mecanismo de proteção CFG está incluído nele. Tudo o que se sabe sobre a chave é que ela consiste em 70 caracteres e está no arquivo key.txt ao lado do executável no servidor.


Tarefas №9 - "O jogo na caixa"
Nesta tarefa, temos dois servidores. Você pode enviar arquivos RAR para o servidor nº 1, descompactado lá, e pode ajudar a ocultar a chave no servidor nº 2.


Tarefa número 10 - "Não bata, Odisseu"
Essa tarefa foi uma das mais difíceis - apenas um participante a dominou. Dados iniciais - arquive com infraestrutura de rede, todos os arquivos necessários nos quais foram criptografados. E se estiver criptografado, existe apenas uma maneira - descriptografar!


As tarefas de interrogatório número 9 e número 10 também serão separadas Habrastatami!


Cientistas britânicos estabeleceram


Pequenas estatísticas deste ano:


  • O número de participantes registrados é 1014 pessoas.
  • O número de tarefas concluídas - 10/10
  • O número de participantes que concluíram pelo menos uma tarefa na íntegra é 33.

O número de chaves válidas para cada tarefa



O número de chaves válidas para cada dia da competição



Durante todo o período da fase online do NeoQUEST-2019, 94 chaves foram recebidas.



O que vem a seguir?


E então - "Confronto" em 26 de junho, em São Petersburgo, que sediará a final da nossa competição! Estamos esperando pelos melhores hackers para garantir que você seja o melhor! E sobre quem não vem, vamos pensar assim ...



Acompanhe as novidades no site do evento de verão!

Source: https://habr.com/ru/post/pt446286/


All Articles