
Em 27 de janeiro de 2019, foi realizado o evento SITIS CTF - um concurso de segurança da informação para estudantes de escolas e faculdades. Cerca de 80 jovens especialistas e um selo participaram do torneio. O jogo foi realizado no escritório da Jet Infosystems; a jovem equipe do SITIS foi a organizadora das tarefas e da plataforma técnica.
CTF
O formato do evento é CTF (risco) baseado em tarefas, no qual os jogadores resolvem tarefas (tarefas) de vários níveis de dificuldade. A resposta pode ser um conjunto de caracteres ou uma frase arbitrária. Para cada resposta correta (captura de bandeira), os participantes recebem uma certa quantidade de pontos. O acesso a parte das tarefas é aberto somente após a decisão das anteriores.
Os participantes do jogo CTF conseguiram resolver quase todas as tarefas, mas dois deles não desistiram: provavelmente fadiga afetada - os jovens hackers e hackers “quebraram” a tarefa e o cérebro da manhã à noite.
Missões
PPC
Cadeia (200 pontos)
Os participantes receberam um conjunto de pixels, especialmente convertidos em hexadecimal, entre os quais uma cadeia de pixels-chave. Ao traduzir hexadecimal em uma imagem, você pode obter uma imagem com uma bandeira.
Pintura (200 pontos)
Os participantes receberam um arquivo contendo cerca de 1.600 imagens monocromáticas representando números de 75 bytes de tamanho. A maneira de obter a bandeira é adicionar números nas imagens usando zeros como separadores e converter a lista resultante em uma representação de string.
Kotorova (250 pontos)
Veja a seção "Vraytapy".
Música (300 pontos)
Veja a seção "Vraytapy".
REVERSE
Razminka (75 pontos)
Os participantes precisaram das habilidades iniciais de reversão, a senha foi armazenada como variável de caracteres na classe principal.
Minha criação! (250 pontos)
Veja a seção "Vraytapy".
CRYPTO
Sonho estranho (100 pontos)
Veja a seção "Vraytapy".
Hmmmmmmm (150 pontos)
Veja a seção "Vraytapy".
Alegria
a (25 pontos)
Os participantes precisavam encontrar uma bandeira em letras pequenas em um dos quadros em um gif com selos.
Flocos de neve (75 pontos)
Os participantes receberam um arquivo html com código javascript ofuscado. Era necessário fazer uma bandeira com os símbolos caindo lentamente na página.
Bandeira Entre Nós (100 pontos)
Uma foto foi anexada à tarefa.

Antes de tudo, todos correram para procurar uma bandeira na imagem. Revirando-o e certificando-se de que a bandeira não está lá, valeu a pena retornar à descrição e ao título da tarefa e lê-los cuidadosamente novamente. O fato é que, na própria competição, nas portas das salas onde o evento foi realizado, havia adesivos incomuns com códigos QR.

Depois de coletar todas as partes, foi possível obter a frase HRGRH {9I3371M95_7i4e3o3i}. A bandeira é obviamente rastreada aqui, mas está criptografada. Não foram dados muitos pontos para a tarefa; portanto, seria lógico que a cifra não fosse complicada. Com uma pesquisa das principais opções, pode-se concluir que o Atbash estava aqui. Sinalizador SITIS {9R3371N95_7r4v3l3r}.
STEGO
Bug ou recurso? (50 pontos)
Um documento de texto foi anexado à tarefa, no qual, à primeira vista, havia apenas duas linhas. No entanto, olhando mais de perto e destacando o texto, era possível ver muitos espaços e guias em 39 linhas. Quem já encontrou isso não deve ter tido problemas para conseguir uma bandeira.
Poesia (75 pontos)
Os participantes receberam uma foto de uma moldura do filme "O Jogo da Imitação". Era necessário encontrar a figura original e compará-la, e a partir dos diferentes pixels, para criar uma nova figura com versos de Byron, cujo sobrenome era a bandeira.
HISTÓRIA
Bem-vindo (50 pontos)
Droids em todo lugar (100 pontos)
É hora de ventilar (105 pontos)
A ajuda nunca é supérflua (125 pontos)
Você precisa jogar um veado (150 pontos)
Primeiro teste de campo (175 pontos)
A diversão começa p1 (200 pontos)
A diversão começa p2 (205 pontos)
Chefe final (300 pontos)
Dentro do bloco, os participantes tiveram que desvendar várias tarefas relacionadas.
O objetivo era fornecer aos participantes um arquivo com vários arquivos, mas eles precisavam encontrar as coordenadas na meta-informação. A dica dizia que o autor possui cretinismo topográfico; portanto, é necessário trocar a latitude e a longitude e obter uma bandeira na forma do nome do lago.
Na segunda tarefa, foi necessário encontrar um arquivo com um sinalizador no sistema de arquivos. Houve também um link que abriu o acesso a três tarefas. Em seguida, o sinalizador precisou ser encontrado na página salva no arquivo da web. Nas tarefas a seguir, os participantes tiveram que descobrir um hacker popular a partir de um vídeo no Youtube (seu nome e sobrenome eram a bandeira), encontrar sua conta em algum fórum de "hackers", onde havia uma bandeira e uma dica para invadir o site. Em seguida, foi necessário realizar um ataque no site do CTfOS (encontre a senha de hash no cookie md5 e use o serviço para obter a senha original, o sinalizador era o par de administrador + senha).
Em seguida, você tinha que se conectar via ssh, ver o arquivo, baixá-lo via sftp, pegar uma senha, descobrir que, em vez da imagem dentro, havia realmente um arquivo e obter uma bandeira. No final, o número da porta era “65530”, era necessário selecionar uma senha (dicionário rockyou), formatar o sistema e fornecer evidências aos organizadores.
Sitis
- INSTA (100 pontos)
Para ter sucesso, você teve que fazer uma postagem no Instagram com uma foto CTF e hashtags temáticas. - MINI-POLL (125 pontos)
Como parte da tarefa, os participantes passaram em uma mini-pesquisa.
Vraytapy
Aqui estão algumas análises de tarefas interessantes dos participantes do CTF.
Kotorova

Kotorova, ênfase no terceiro "o". Tarefa para 250 pontos em 300 possíveis. O jogador recebe uma imagem (veja acima) e um texto estranho que consiste nas palavras "Miu", "Meow", "FRR" e "Face".

Pela análise visual da imagem (e curiosidade no passado), entendemos que o texto fonte não é nada além da linguagem COW com operadores substituídos. Depois de fazer as seguintes substituições, você pode receber uma mensagem de "vaca": Miu => MOo, Meow => MoO, RDF => OOO, Lik => Moo. Execute o código resultante através do intérprete online e obtenha o token desejado:

Um sonho estranho ...
Curiosamente, mas a idéia dessa tarefa realmente veio à mente de um dos organizadores depois de acordar em uma manhã fria de janeiro. Descrição da tarefa:
Eu sonhava com uma tarefa aqui, verifique a solvabilidade pzh: 3
A partir do nome e da descrição, é fácil adivinhar que a referência se refere a Dmitry Ivanovich, ou seja, Mendeleev. Agora vamos ver o que temos no arquivo:
0x53 0x49 0x54 0x49 0x53 0x7b 0x6d 0x65 Mx3c 0x65 0x6c 0x65 0x65 Mx17 0x5f 0x65 Mx21 Mx27 0x5f Mx4b Mxf Mx39 Mx3a 0x6d 0x65 Mx7 Mx75 0x7d
Hex, mas com prefixos "M" estranhos em alguns lugares.
Traduzimos HEX para ASCII e imediatamente obtemos, à primeira vista, um sinalizador quebrado:

Tendo traduzido apenas Hex com o prefixo “M” no sistema decimal, obtemos a seguinte sequência:
60 23 33 39 75 15 57 58 7 117
Recordamos a descrição.

Combine ASCIInut HEX com Mendeleev e obtenha a bandeira.
Música
Pensamos em como traduzir o texto em notas por um longo tempo e, finalmente, a idéia foi concretizada:

Antes de tudo, decidiu-se traduzir o texto em uma representação numérica usando ord ()
"awsm_msic"
Um espaço é deixado intencionalmente no início, para que os últimos bits não estraguem o último caractere.
ord(): [97, 119, 115, 109, 95, 109, 115, 105, 99, 32]
Em seguida, traduza-o em bytes:
>>bin(): ['01100001', '01110111', '01110011', '01101101', '01011111', '01101101', '01110011', '01101001', '01100011', '00100000']
Concatenar:
concatenate:01100001011101110111001101101101010111110110110101110011011010010110001100100000
Divida o texto resultante em caracteres de três (trigêmeos). Como 8 números podem ser codificados no intervalo de 000 a 111, usaremos um conjunto de notas das oitavas C5 e C6, consistindo de 8 notas:
['011', '000', '010', '111', '011', …] ["C5","D5","E5","F5","G5","A5","B5","C6"]
Resta apenas um pouco, convertemos os trigêmeos de volta no sistema de números decimais e compomos uma nova lista, com base nos índices das notas:
['F5', 'C5', 'E5', 'C6', 'F5', 'A5', 'B5', 'F5', 'F5', 'F5', 'E5', 'A5', 'C6', 'A5', 'A5', 'A5', 'F5', 'G5', 'B5', 'B5', 'G5', 'A5', 'G5', 'F5', 'D5', 'C5']
Nós escrevemos um arquivo MIDI, se desejar, você pode usar qualquer instrumento para emitir um som para as notas.

Reverso 250
Primeiro, desmontamos o programa (usando o IDA), convertemos para C e procuramos linhas suspeitas:

Podemos concluir que a v39 é uma bandeira que no estado falso nos dará a string que estamos procurando.
Observamos onde a bandeira muda:

Olhando para este código, é difícil determinar com quais variáveis devemos fazer alterações para que o sinalizador seja diminuído. Ao clicar duas vezes na variável Buffer, chegamos à janela para visualizar a pilha do programa. Devemos entender que o Buffer é uma string (já que podemos inserir qualquer coisa no programa), o que significa que definiremos esse tamanho para que todas as variáveis var_xxx estejam nele:

Ler o código ficou muito mais fácil:

Agora considere o bloco alterando os caracteres da nossa string.

Analisamos:
- v38 é a soma dos valores das variáveis simbólicas (pela condição 1231).
- O elemento de 7 linhas (Buffer_6) é deslocado em 7 bits, ou seja, é impossível reverter a conversão (não importa qual número seja convertido aqui, o resultado será 0).
- O loop com as variáveis v35, v41, v34 é usado para desviar a atenção (copia o valor de uma linha para outra para salvar a tradução correta de binário para hexadecimal, já que alteramos a linha original).
- O ciclo com os três primeiros caracteres é uma multiplicação simples por 2.
- Quarto a sexta é um pouco mais difícil. É necessário resolver a equação (para o quarto caractere, será assim: (x * 2) ^ 57 = 95). Embora o XOR seja uma operação irreversível, é bem possível selecionar um valor usando a enumeração e, mesmo com as habilidades iniciais, isso pode ser concluído em alguns segundos.
- As mudanças terminaram, retornamos ao bloco de condições e elaboramos equações simples para os demais elementos.
Temos (x - desconhecido, 0 - conhecido): 000000x00000x. A soma dos valores = 1231. Subtraia os números conhecidos desse número e obtenha a soma dos números desconhecidos = 164. Portanto, pegamos dois caracteres cuja soma será 164. Com base no significado da primeira palavra, seja 'R' e 'R'.

Depois de inserir a tecla, obteremos a frase desejada.
Hmmmmm
Ao abrir a tarefa, obtemos dois arquivos: data.txt e Hmmmm.png:


Obviamente, a primeira linha no arquivo de texto é uma codificação. De fato, este é um Base64 comum, embora sem o sinal "=" peculiar no final.
Tendo decodificado, vemos números suspeitosamente semelhantes a graus:

Já neste momento, pode-se adivinhar que estamos falando de uma treliça e seu ângulo de inclinação. Mas onde está o próprio estêncil? Obviamente, ainda temos um conjunto binário de números em que o número avassalador é 1 e apenas 8 zeros.
Testar uma hipótese é muito simples. O átomo diz que temos 256 caracteres. Assim como na tabela da foto, e disso também podemos adivinhar que a treliça é quadrada.

Provavelmente, a melhor maneira é usar o Excel para delinear a grade. Então vamos lá.
Na verdade, aqui está:

Suponha, e não em vão, que essa é a posição dada da rede em relação a 0 graus. Em seguida, usando as manipulações no Excel ou Photoshop, escreva os números nas janelas:

Que tipo de números podem ser esses? Hexadecimal ... Hex, é claro!

Hooray, estamos no caminho certo, resta mudar a grade e escrever os números restantes:

Acontece que a sequência desejada está em células azuis, ou seja:
53 49 54 49 53 7b 43 61 72 64 61 6e 6f 5f 69 73 5f 70 72 6f 75 64 5f 6f 66 5f 79 6f 75 5f 21 7d

O resultado é: SITIS {Cardano_is_proud_of you !}
Sim, sim, é apenas uma rede Cardano, proposta por ele no século XVI. Um dos algoritmos criptográficos mais simples.
No entanto, apesar da aparente simplicidade e obviedade da tarefa, apenas uma equipe conseguiu resolvê-la - "10x", mesmo com essas dicas:


Deputados
Os competidores eram iniciantes e experientes em CTF.
1º lugar, MLPWN:
Minha equipe gostou. Quanto às tarefas, não foi muito difícil para nós, como uma equipe bastante experiente, resolvê-las, foi notável que as tarefas foram projetadas para iniciantes, elas não encontraram tanto a ideia de uma tarefa cruel difícil, quanto uma mensagem interessante, o que é muito legal. Quanto à organização, tudo estava no mais alto nível, o que, para ser honesto, nem sempre é encontrado nos centros escolares. Desejo boa sorte à equipe do SITIS na organização dos seguintes SITIS CTF!
2 lugares, 10x
3º lugar, Inview:
Esta foi a minha primeira visita ao CTF, desde antes participei apenas do CTF em São Petersburgo. As tarefas eram bastante interessantes e difíceis, mas o único problema por causa do qual muitas vezes era simples era a queda da Internet. Gostaria muito de vir no próximo ano e espero que o SITIS CTF apenas melhore. Desejo aos organizadores sucesso nas competições e na organização de tais eventos.

O vencedor foi o time da MLPWN - My Little Pony (Pwnie).

Entre os participantes, havia algumas meninas =)

A luta foi séria, às vezes era necessária a ajuda dos organizadores:

Organizadores
O evento é organizado pela jovem equipe do SITIS . Os parceiros da CTF foram a Jet Infosystems (parceira geral do SITIS CTF ), Grupo-IB, Elefus, BCS e FSBI Research Institute Voskhod.

Para aqueles que vieram buscar um selo. Ele foi visto no time vencedor. Eu acho que foi um sinal.
LV: conte algumas palavras sobre o seu mascote - seal =)
lítio: na verdade, este não é exatamente o nosso mascote c: Reunimos essa equipe há relativamente pouco tempo, antes que todos (bem, quase todos) estivessem em equipes diferentes ou não tivessem uma equipe. Theodore estava na equipe do SEAL, cujo mascote é o selo. Theodore o arrastou. Na verdade, esperávamos que ele trouxesse seu pônei, que ele ganhou em Sirius como um prêmio Pwnie)

Seal diz: não seja um selo, jogue com CTF, aprimore suas habilidades!
A publicação mantém a pontuação e a ortografia dos membros do CTF.