Bem vindos ao Blog da comunidade ITsafe



Boa Leitura


Blog em em português sobre construção . Por favor se encontrar algo que necessite correção entre em contato. Os vídeos do blog ainda estão em hebraico, mas em breve estaremos traduzindo com a mesma qualidade que traduzimos os cursos.


Desafios de recrutamento ao Mossad 2018 Parte 1

O mossad, como outras organizações de inteligência no mundo, publica um desafio de vez em quando para recrutar hackers e, como a maioria dos pesquisadores que conhecemos, decidimos mergulhar. Só que desta vez, ao contrário de outras vezes, decidimos publicar um artigo com as soluções..

Este desafio foi resolvido por mim, Roman Zaikin e Dikla Barda pesquisadora na check point.

Pessoalmente, de todos os desafios do mossad que resolvemos este foi o mais interessante até agora.

Durante o artigo, iremos descrever as soluções e a maneira de chegar à solução, em desafios desse tipo é preciso pensar muito fora da caixa e ter experiência em resolver outros desafios não atrapalha, é claro :)

Espero que você goste de ler como nós gostamos de resolver...
O desafio começa no seguinte domínio:
www.r-u-ready.xyz
No domínio, vemos a seguinte imagem:
O símbolo do mossad
Para extrair o texto da imagem, usei uma ferramenta chamada OCR, OCR é um acrônimo para Optical Character Recognition e, ao pesquisar este método, é usado para contornar mecanismos fracos de captcha.

Para usar o OCR, copiaremos as partes da imagem usando uma ferramenta de recorte e as salvaremos em arquivos separados.:
A primeira cifra de brainfuck
Agora vamos carregar os arquivos para um dos sites ocr, ao realizar desvios de captcha você também pode usar o módulo python chamado pytesser.
https://www.onlineocr.net/
O resultado ficará assim:
Use OCR para extrair texto da imagem
Você pode ver que alguns caracteres estão faltando e o resultado não é perfeito, mas ao mesmo tempo é melhor do que copiar todos os caracteres por nós mesmos.

Agora vamos organizar o resultado de acordo com a imagem, a primeira parte:
O primeiro código dentro de um editor de texto
Faremos o mesmo para a segunda parte:
O segundo código dentro de um editor de texto
Esses caracteres são, na verdade, uma linguagem de programação chamada brainfuck, uma linguagem de programação bastante simples, geralmente usada para desafios..

Para executar o código, você pode usar o seguinte site:
http://www.bf.doleczek.pl/
Depois de executar o código com a segunda parte, obteremos o resultado xor-with-key:
xor-with-key
Se olharmos para a primeira parte podemos ver que há um ponto que se repete várias vezes no código que não aparece na segunda parte do código, na linguagem brainfuck se aparecer isso indica uma impressão do local atual na memória, quando tentamos executar o código não vimos nada, então clicamos Para obter a localização das células de memória no código e aqui está o resultado:
Um código a ser decifrado
Se pegarmos a dica que obtivemos na segunda parte do código de fazer xor com alguma chave, e o fato de a operação xor ser realizada em 2 valores, concluiremos que está faltando algum valor que provavelmente está na imagem.

Portanto, concluímos que o primeiro valor na operação XOR são as células de memória:
7A 46 5C 53 55 59 03 5A 41 03 06 01 00
Olhamos para a imagem novamente e notamos que há outro texto que se repete várias vezes, então concluímos que o segundo valor que falta é o texto que aparece na imagem:
Israel-is-70
Uma vez que o primeiro valor é um valor hexadecimal, devemos converter o texto em hexadecimal também, isso pode ser feito usando python :
"Israel-is-70".encode("hex")
Obteremos:
49737261656c2d69732d3730
Agora vamos executar xor conforme solicitado pelos redatores do desafio:
hex(0x49737261656c2d69732d3730 ^ 0x7A465C535559035A41030601)
E vamos obter o resultado:
33352e3230352e33322e3131
Vamos converter o resultado de volta para ascii, e assim:
"33352e3230352e33322e3131".decode("hex")
E vamos receber:
35.205.32.11
Se formos para o endereço IP, teremos o seguinte desafio:
Segundo desafio


part 1

O desafio começa com um site pequeno e simples que contém um total de 2 ações:

  • inscrição
  • Conectar

Um site de notícias chamado Dark New
Vamos examinar o código-fonte do site, e parece que no final do arquivo temos um link para uma página chamada administration:
Código html que traz a página de administração
Se abrirmos a página, parece que recebemos o código de status 401 que indica que a página existe, mas não temos acesso a ela, então o objetivo é claro!

Temos que chegar a esta página de alguma forma, depois de examinar o site em profundidade parece que além do registro não temos muitas opções.
Formulário de registro do sistema
Durante o processo de registro pode-se perceber que a última opção é muito suspeita, os sites não costumam pedir para inserir uma foto de perfil como um link de um site remoto.

Já nesta parte concluímos que a solução ao desafio provavelmente estará de alguma forma relacionada a este url, selecionamos alguma imagem do Google e clicamos no botão TRY:
https://upload.wikimedia.org/wikipedia/he/1/19/Google_Maps_Icon.png
Ao realizar a operação, pode-se ver no burp suite que por algum motivo o link está codificado com base64
Uma solicitação que contém base64
Como a base64 atual termina com padding, no final você pode ver o texto %3D%3D Que é realmente a codificação de Url que o navegador executou. Devemos primeiro abrir a codificação de url e só então abrir a base64 para fazer isso facilmente

Selecionamos o texto e pressionamos ctrl + shift + u no qual estamos realizando a decodificação de url e o resultado ficará assim:
aHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvaGUvMS8xOS9Hb29nbGVfTWFwc19JY29uLnBuZw==
Agora marque o texto novamente e pressione ctrl + shift + b ele executa a decodificação base64 e o resultado ficará assim:
Caminho para a foto do perfil no url que apareceu na base64
Em princípio, ao desenvolver um site, não há razão para codificar base64 para url, então algo é muito suspeito sobre este aplicativo, para continuar pesquisando pressione ctrl + r para movê-lo para-repeater.
O pacote de informações no-repeater
Se voltarmos ao sistema, parece que a imagem foi carregada e está no caminho /profilePics/[code].
O caminho para a imagem
Tentar entrar em contato com este endereço diretamente irá apresentá-lo Nothing there:
Responda do servidor com a legenda nothing there
Isso ocorre porque o conteúdo do cookie também deve ser substituído na resposta do upload do arquivo, se você prestar atenção ao enviar o arquivo recebemos do servidor um set-cookie geralmente quando se recebe um set-cookie ele não está lá para nada, ele precisa ser usado para algo.
Pedido com o cookie exibe a imagem
Até agora, aprendemos a enviar uma imagem no formato base64 e acessá-la, a próxima etapa é fazer uma tentativa de pedido local aos arquivo do lado do servidor, referindo-se ao file assim:
file:///var/www/register.php
Antes de enviá-lo para o servidor, vamos converter a informação para base64 usando ctrl + b e envia-lo:
Tentativa de explorar SSRF
O lado do servidor nos retorna que não é possível entrar em contato com o endereço porque a extensão não é .png, vamos tentar contornar isso usando byte nulo assim:
file:///var/www/register.php%00.png
E bingo, o servidor carregou o arquivo:
Usar byte nulo ajudou a acessar o arquivo
Agora vamos nos voltar para o arquivo acessando o arquivo register.php e atualizar o cookie:
O conteúdo do arquivo register.php
Parece que conseguimos acessar o arquivo, mas não parece haver nada de interessante neste arquivo, então tentamos acessar o arquivo login.php e o resultado foi:
O conteúdo do arquivo login.php
Você pode ver que no arquivo login.php há uma verificação se você está contatando o usuário administrador e se você está vindo do endereço IP 127.0.0.1.

Deve-se levar em consideração que a solicitação é feita pelo servidor, assim não há nenhum impedimento para que ele faça a solicitação para o endereço:
http://127.0.0.1/
E ao enviar o usuário admin pode ser visto de acordo com o código que revelamos que ao lado do servidor anexa ao parâmetro user_name, com base nas informações que recebemos do arquivo faremos a seguinte solicitação:
http://127.0.0.1/login.php?user_name=admin%00.png
E obteremos o cookie chState como antes, agora usaremos o cookie para fazer um pedido a administrations, no qual não conseguimos pedir antes e obteremos:
http://127.0.0.1/administration%00.png
Referência SSRF para um arquivo de administração interno
Se abrirmos a página como antes, obteremos:
O conteúdo do arquivo administration contendo o caminho para a solução
Se abrirmos a página em um navegador e clicarmos no link, passaremos para o próximo desafio:
Aviso da solução da etapa Continua na segunda parte Para a segunda parte da solução

Compartilhe este post