Tarefas Mini CTF

Saudações a todos habrachitateli. Três semanas se passaram desde que eu propus àqueles que desejam resolver meu CTF e, acho, é hora de publicar a análise de tarefas. Pela minha própria experiência, sei que é uma pena estar em uma situação em que passei muito tempo em uma tarefa, mas não encontrei uma solução, por isso posto a análise das tarefas. As soluções são divididas em etapas e ocultas sob um spoiler para que, após qualquer etapa, você possa tentar concluir a tarefa sozinho, superando um momento difícil.

XT_CTF_01

XT_TASK_101

Etapa 1
Abra o arquivo e veja nomes longos de pastas. A última pasta contém arquivos, mas sem uma senha, seu conteúdo não está disponível.

Escrevemos os nomes das pastas:

5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
2346ad27d7568ba9896f1b7da6b5991251debdf2
e3cbba8883fe746c6e35783c9404b4bc0c7ee9eb
bef21e9bfcf9fab0a5aebd46a735efe5434da96b
86f7e437faa5a7fce15d1ddcb9eaeaea377667b8


Dirigimos as seqüências para o Google e descobrimos rapidamente que isso é sha1 com as palavras:

password
hash
1000
letters
a


Juntando tudo, assumimos que a senha é um hash de 1000 letras 'a'. Se sha1 foi usado para palavras, tentaremos aqui - 291e9a6c66994949b57ba5e650361e98fc36b1ba. Extraímos os arquivos, garantindo que a senha esteja correta.

Etapa 2
O exame dos arquivos mostra que todos eles são compostos de acordo com um princípio geral: o nome do formato xt + número, o conteúdo de algumas linhas, onde a primeira contém poucas letras e a segunda uma sequência de caracteres hexadecimais. É bastante desinteressante considerar sequências hexadecimais, pois elas contêm 79 caracteres cada (exceto o arquivo xt121785230414240585522142219912, onde existem 58) - essas definitivamente não são hashes e não são algo codificadas.

Como é o mesmo em todos os lugares e há menos em apenas um arquivo, pode-se presumir que todas as sequências hexadecimais devem ser combinadas e a parte menor é apenas a última parte. Resta entender a ordem. Foi possível brincar com os nomes, mas não conseguiu nada de interessante, mas se você prestar atenção nas primeiras linhas dos arquivos, também poderá encontrar um padrão usando o olhar.

Aqui, vou indicar algumas linhas: ele, li, n, o, ne, mg, si, ca, cu, zn, br, kr, ag ...

Quando estão próximos, é muito mais fácil reconhecer a designação de elementos químicos neles. Abrimos a tabela periódica e coletamos a sequência hexadecimal em um arquivo (existem 53 arquivos no total, este é o número da última parte com o símbolo i, que corresponde a 53 elementos Yod).

O resultado é um arquivo PNG com um retângulo verde.

Etapa 3
É improvável que os metadados estejam contidos no arquivo de forma clara, pois vemos todos os bytes na representação hexadecimal. Portanto, trabalharemos com a própria imagem. Você pode perceber (não com os olhos, é claro, mas com ferramentas) que mais de uma cor é realmente usada. Usaremos o preenchimento e veremos o guia para a próxima etapa.



Etapa 4
Misturamos todos os nomes dos arquivos e os organizamos de acordo com a ordem da etapa anterior.

696e7400b8a8c7da1c52e63550ddfdf8ae03be73
206d6100f4eb7c768890e8502db2bdeb81718301
696e2800f1c5c0df7676667ffca16856e808f9dd
297b69008e0d05b67df33c751da3c6f17a3fdb9d
6e742000bf96cea16e609731aa7397ac2b9f7b15
613d3400d2fedbf43ad7c43d678382d2ef83dde8
36303900b909f396c69c6d47ccb623cc83d5e2ea
313132007f6fdde9d3abad5545f44b2d2661b0be
3b696e0002582f22cab7aeaf730680b87780279a
74206200267e505a621cf264e303d3df63222fa7
3d343600ac031f166103b5319a273a867d5247ae
36393700d9e521b0e0d488b47fde51e5f5f9650d
37323b00bdf3caa241b2936f0355ad89e420389c
696e7400a1f9f8e62cd64c8e25d852e433bda80c
20633d009932d3b69b7a74296c7b75894bcddbc1
373639000ca31548a80fe28adf263bbe89f03069
33393400f56920f247d4d66798bb2c54e3db668c
373b6900222283ee79a5e7e3e79d55d4b159ffb1
6e742000fac60ac1f78aa90201e98b30a9c4adbc
643d3700b55bc0dda8bd748983716018b29fbd6f
38323300176db95a8aa4aaf1770346c353fd4753
32313400644e234a3899bd84e9f7d61a12bfecab
3b696e00654b4b7d8fb3b022777c6346342eba91
742065009720d2693f833788e69a6641e8de22f6
3d363800b1e40956ec8ca6a64013c8a651eff0f7
3435340008b5419f5139553c85b605009e3fb343
38393b004e5d66b6980c7cf14dc9bf0acf09e444
696e7400e648ffad4cde46b4d845f1ffad075da5
20663d00b9bdab8cb8721581f5aa8a2c2522d9de
3334330054fb4abaf144e818ec1199b7b4ffec47
34353900378490c3ba53a356327af1bbb2d2c8b0
313b69008803024e711baf3695402d3a13e0c905
6e7420006434f491ab51a923995a3daf56a65f5e
673d3800c5198ae1565cc5744d23ac492f6d2506
3231380000217a2c380bf9c9a6e122b1c01e90ea
373339003ef4f423f0d9c54ea5d8fbe4d8bf518c
3b70720073caad02c9cba60debf81f72c0ac23ad
696e7400d9ddb857a7608947aae60ed6d054c039
6628220061a3a81dcc20ce43903a18cea28b77db
2573250065285f647ed3e22a9233974ac24509a1
73257300678138427cc07ee072c987583db2fc5e
25732500d183d5303ed6bda0606eb5e4ccc1e7c8
73257300c5e9d7bfdb76b5fee122fe57bc8aa81a
25735c003675c4f732d95ae6a0d9bcc6769f94ca
6e222c0088503423d1f56148bbf2573a6e2e0518
26612c007c8d1d6b90d252fa7b2084bd8695a8f9
26622c00ec96a4edbdeb286484af38395a3fc928
26632c004a1db36cdef743283e6bc853b6995555
26642c00dd66db502138413e272deb2da78d4f57
26652c00bb1785b4e41444da4230b602f1860557
26662c00e739c24f55c0899b8eae2a948622c7d7
26672900f4b4843d0056571d293bec879cd1968f
3b7d20006750ebb44ffd784dc8afdd5b0f76816a


Se você fizer tudo com canetas, notará rapidamente que 4 bytes são sempre zero e, à esquerda, alguns caracteres impressos. Deixamos apenas eles, coletamos em uma linha.

Temos a seguinte linha:

 int main(){int a=4609112;int b=4669772;int c=7693947;int d=7823214;int e=6845489;int f=3434591;int g=8218739;printf("%s%s%s%s%s%s%s\n",&a,&b,&c,&d,&e,&f,&g);} 


Executamos esse código em C , como resultado, obtemos um sinalizador. Verificamos o hash para garantir mais uma vez - sim, esse é o sinalizador desejado.

XT_TASK_102

Etapa 1
Abra o arquivo e veja imediatamente os nomes dos arquivos no hexadecimal. Conteúdo do arquivo não disponível porque a senha é necessária. Vamos começar a distorcer os nomes.

Todos os nomes têm o mesmo comprimento, exceto um arquivo com a extensão 64F00000 (é mais curto). Em geral, as extensões são estranhas, atípicas. Mas é fácil notar que todos os arquivos têm diferentes comprimentos de extensão e é de 1 a 7. O nome com a extensão mais longa é o mais curto. É lógico supor que você precisa combinar todas as seqüências hexadecimais de acordo com os comprimentos das extensões de arquivo.

Nós salvamos a sequência de bytes separadamente, entendendo que este é um arquivo 7z, desde os dois primeiros bytes (0x37 0x7a - 7z).

Etapa 2
O segundo arquivo é novamente protegido por senha, mas desta vez temos nomes curtos e conteúdo pequeno. É bom que o visualizador de arquivos mostre os metadados do arquivo, ou seja, suas somas de verificação.

Apesar do fato de o CRC ter pesquisado bastante no Google, você ainda pode verificar todas as seqüências e descobrir que, a pedido do CRC 90c1667d, ainda existe um protótipo de "quatro". Ou apenas crie uma sequência de três bytes para os arquivos mais curtos. Qualquer um dos métodos levou ao fato de que o conteúdo dos arquivos era facilmente instalado - esses eram os números em inglês “um”, “dois”, “três”, “quatro”, “cinco” e “seis”. Não temos opções a não ser juntar os nomes dos arquivos nesta ordem. Temos VVNFIENSQzMy. Verificamos como a senha do primeiro arquivo - ele se encaixa.

Etapa 3
Os solucionadores de observadores, mesmo antes da senha, podem perceber que o crc32 dos arquivos compactados tem uma forma bastante específica, ou seja, 0xC0DExxxx. Não existem tais correspondências nos CTFs.

Os arquivos em si são imagens PNG com texto. Como em cada etapa que consideramos crc32, vale a pena continuar fazendo isso. Depois de verificar o primeiro texto da imagem (por exemplo, qnGyaQBc), fica claro que estamos no caminho certo, porque crc32 é 0xc0de0831. Consideramos CRC de tudo o que resta e coletamos em uma pilha.

CRC de fotos:
0xc0de094e
0xc0de054e
0xc0de0d7d
0xc0de0343
0xc0de0b52
0xc0de0734
0xc0de0154


CRC do texto:
0xc0de0831
0xc0de0430
0xc0de0c35
0xc0de027b
0xc0de0a33
0xc0de0654
0xc0de0058


Jogamos fora a parte comum, vemos que a partir do valor do primeiro byte dos dois é executado de 0x00 a 0x0d. Parece que é um número de série. Nós coletamos, recebemos uma bandeira. Verificamos sha1 e, além disso, garantimos que tudo esteja correto.

XT_QUEST_103

list1
Dada uma sequência de números. Apenas pegamos os caracteres com os números indicados no cartão, numerando do zero e pulando as quebras de linha. Faz sentido escrever essa ação - ela será necessária mais de uma vez.

Resposta: awEs0me_sTart

list2
Muitos números. O nome do arquivo sugere que você precisa saber o número de dígitos 5. Contamos o número de cinco não apenas, mas geralmente todos os dígitos de 0 a 7. Temos a sequência: 135, 95, 61, 27, 58, 57, 85, 190. Colocamos no cartão, nós obtemos a resposta.

Resposta: b1g_sTEp

list3
Vemos uma foto com um polinômio. Substituímos n de zero a 9, conforme aconselhamos o nome do arquivo, obtemos uma sequência que, quando sobreposta ao cartão, fornece uma resposta.

Resposta: coOl2math!

list4
Nome de arquivo estranho e conteúdo estranho. Se você pesquisar no fdhvdu, entre os resultados irrelevantes, poderá encontrar uma indicação de que essa palavra césar codificada pela cifra de César representa uma mudança de três caracteres em ordem alfabética. Tendo decodificado o conteúdo, vemos números romanos. Eu acho que está claro o que fazer com uma sequência de números.

Resposta: dOinG_w3ll

list5
O conteúdo da tarefa literalmente diz o que precisa ser feito. Hash do arquivo, obtemos 20 bytes, que podem ser interpretados como uma sequência de números para o cartão.

Resposta: excLlenT_impECc4ble

visual1
Sobrepomos o texto da tarefa no texto do mapa, além disso, “sobrepomos” literalmente.

Resposta: fa5t! One

visual2
Existem 840 zeros e uns no texto do problema. Como o tema é visual, estamos tentando obter alguma representação visual. Se o texto estiver dividido em 5 linhas de 168 caracteres cada, você poderá ver a sequência que leva à resposta.



Resposta: go_fUrth6r


visual3
O nome do arquivo nos diz diretamente diretamente sobre dominós. Tentamos conectar as juntas sextavadas e obter duas correntes. Um é circular e não é interessante, o segundo pode ser considerado como uma sequência de números para um cartão. O resultado é uma resposta ou uma resposta na ordem inversa.

Resposta: heRoic_effOr7s

visual4
Recebemos dezesseis números hexadecimais nos quais existem claramente muitas unidades de bits. Traduzimos os números com uma calculadora e novamente literalmente "impomos". Zeros de bits marcam os caracteres desejados. Lemos os símbolos de cima para baixo, da esquerda para a direita.

Resposta: ih8BiTs!

visual5
O nome do arquivo novamente dá uma dica. "B3s23" é a designação da configuração para a vida do jogo. Pegamos um simulador on-line, entramos no local inicial, aguardamos cinco movimentos e lemos o número de células vivas nas linhas (o que você precisa fazer ainda indica o nome do arquivo).

Resposta: jUsT_9ood

prog1
No texto do problema, vemos algo como uma máquina de Turing bidimensional, que só precisa ser feita.

Resposta: k1l0_Byte

prog2
A tarefa fornece explicitamente o código para o brainfuck, mas se você o executar no emulador, o programa exibirá uma mensagem de que a tarefa não é sobre brainfuck. Sim, você só precisa calcular o número de caracteres em cada linha e aplicar ao mapa.

Resposta: l1kEl1On!

prog3
Brainfuck novamente, mas desta vez a conclusão concorda com a gente. A sequência desejada para o cartão está na memória.

Resposta: moRe_1nfO2me

prog4
E então foda-se. Começamos e o programa exibe uma mensagem de que não há senha. Nada interessante na memória também. Tem que entender o código.

O código consiste em três linhas. O primeiro define alguns valores, o segundo também e o terceiro exibe o estado da memória na tela.

Removemos a segunda linha, corremos e obtemos a sequência do cartão.

Resposta: nO_baRr13rs

prog5
A última tarefa. Código Brainfuck novamente. Vemos uma indicação de que precisamos calcular alguma função de alguma linha do mapa e código. Executamos o código, que deixa uma dica na memória de que a função desejada é decodificar base64. Verificamos as linhas do mapa para saber o que acontecerá se elas forem decodificadas da base64. De repente, a cadeia KysrWz4rPis8PC1d é decodificada em +++ [> +> + << -]. Executamos o código com essa adição e vemos as instruções para envolver todos os caracteres em cada uma das linhas do mapa. O resultado será a última senha.

Resposta: ofF1ci4l! SUCceSs

Isso é tudo. A todos que participaram - obrigado, se você tiver alguma dúvida, pergunte nos comentários.

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


All Articles