Ir para conteúdo

Desafio


sup3rm4n

Posts Recomendados

01 01 02 03 05 08 13 21 34 55 ca fe 08 00 45 00     
01 a1 7a 69 40 00 80 06 74 e4 01 02 03 04 04 03
02 01 00 01 00 50 00 10 f4 47 00 76 ad f1 50 18
00 e4 4e bd 00 00 28 66 61 6c 74 61 20 61 6c 67
6f 20 61 71 75 69 29 0d 0a 58 2d 49 6e 73 74 72
75 63 74 69 6f 6e 73 3a 20 65 6e 63 6f 6e 74 72
65 20 48 6f 73 74 20 65 20 55 52 49 20 65 20 63
6f 6e 74 69 6e 75 65 20 6f 20 64 65 73 61 66 69
6f 0d 0a 55 73 65 72 2d 41 67 65 6e 74 3a 20 63
75 72 6c 2f 37 2e 34 37 2e 30 0d 0a 43 6f 6f 6b
69 65 3a 20 5a 57 35 6a 63 6e 6c 77 64 47 56 6b
58 32 52 68 64 47 45 39 4d 6d 51 79 5a 6a 4e 6c
4e 47 45 30 4e 54 41 35 4d 47 49 77 4e 44 46 6c
4e 44 55 77 5a 44 42 6d 4d 57 55 30 4e 54 45 7a
4d 44 55 78 5a 6a 51 31 4d 44 55 78 5a 6a 46 6c
4e 44 55 77 4e 54 42 6a 4e 44 55 77 4e 7a 45 7a
4e 44 55 77 4d 6a 42 6d 4d 47 49 77 5a 54 51 30
4d 44 49 78 5a 54 41 33 4d 44 59 30 59 54 49 79
4d 32 55 7a 5a 54 4e 68 4e 44 55 31 59 6a 51 30
4e 57 49 7a 4e 6a 45 34 4d 7a 59 77 4e 44 49 79
4d 44 55 78 4f 54 46 6c 4e 54 41 30 59 54 41 35
4d 47 49 78 59 7a 42 69 4d 44 55 78 4f 44 46 6c
4d 47 49 30 4e 44 41 35 4d 44 55 77 4e 7a 51 30
4d 44 67 78 4f 44 4d 32 4d 54 67 7a 4e 6a 41 30
4e 6a 41 4b 0d 0a 43 6f 6e 74 65 6e 74 2d 4c 65
6e 67 74 68 3a 20 31 33 33 37 0d 0a 0d 0a

 

Quem conseguir, postar o resultado aqui embaixo e como conseguiu chegar a ele ;)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...

E ai, @sup3rm4n!

Cara, curti o desafio. Contudo acredito que este post deveria estar nos desafios e CTF, não ? :)

Bom, vamos lá.

Primeiro de tudo eu já desconfiei de um HTTP request.

Citar

0d 0a 0d 0a

Fiz o revert pra ASCII.

!4UÊþE¡zi@täPôGv­ñPäN½(falta algo aqui)
X-Instructions: encontre Host e URI e continue o desafio
User-Agent: curl/7.47.0
Cookie: ZW5jcnlwdGVkX2RhdGE9MmQyZjNlNGE0NTA5MGIwNDFlNDUwZDBmMWU0NTEzMDUxZjQ1MDUxZjFlNDUwNTBjNDUwNzEzNDUwMjBmMGIwZTQ0MDIxZTA3MDY0YTIyM2UzZTNhNDU1YjQ0NWIzNjE4MzYwNDIyMDUxOTFlNTA0YTA5MGIxYzBiMDUxODFlMGI0NDA5MDUwNzQ0MDgxODM2MTgzNjA0NjAK
Content-Length: 1337

Notei que o Cookie tinha uma informação encodada. Base64.

encrypted_data=2d2f3e4a45090b041e450d0f1e4513051f45051f1e45050c45071345020f0b0e44021e07064a223e3e3a455b445b361836042205191e504a090b1c0b05181e0b440905074408183618360460

encrypted_data=2d2f3e4a45090b041e450d0f1e4513051f45051f1e45050c45071345020f0b0e44021e07064a223e3e3a455b445b361836042205191e504a090b1c0b05181e0b440905074408183618360460

Bom, aqui temos uma string de elemento pares. Nenhuma letra maior do que F. 
Deduzi que fosse hex. Vi que estava como encrypted, então parti pro bruteforce.

Achei duas strings interessantes.

Citar

0x4a ==> get ☼CANT☼GET☼YOU☼OUT☼OF☼MY☼HEAD♫HTML http☼◄♫◄|R|NhOST→ CAVAORTA♫COM♫BR|R|N*
0x6a ==> GET /cant/get/you/out/of/my/head.html HTTP/1.1\r\nHost: cavaorta.com.br\r\n

Rapaz, que criativo! hahahaha

Fiz o request.

GET https://cavaorta.com.br/cant/get/you/out/of/my/head.html
 200 OK       397 bytes       1014 ms

HEADERS
Accept-Ranges: bytes

Connection: keep-alive

Content-Length: 397

Content-Type: text/html

Date: Thu, 15 Feb 2018 03:27:12 GMT

Etag: "cde028b-18d-558b55c27f280"

Keep-Alive: timeout=15

Last-Modified: Fri, 08 Sep 2017 22:47:22 GMT

Server: Apache

BODY view raw
<!DOCTYPE html>
<html>
  <body>
    <pre>
      <p>Muito bem!
        <br>
Nao esqueca de detalhar no relatorio como chegou ate aqui.
Eh muito importante que seu relatorio contenha DETALHES!
Nao serao aceitos apenas respostas
        </p>
        <p>Sua proxima pista: ??</p>
        <?php
$fp=@fopen('muito-prazer-meu-nome-eh-otario','r');
@fread($fp,2000);
@fclose($fp); // nice catch, vah em frente no seu hack :)
?>
      </pre>
    </body>
  </html>

Não entendi muito bem esse "muito-prazer-meu-nome-eh-otario" kkkk
Enfim, segue o hack...

Fiz mais um request nesse endpoint.

GET https://cavaorta.com.br/cant/get/you/out/of/my/muito-prazer-meu-nome-eh-otario
 200 OK       535 bytes       1019 ms

HEADERS
Accept-Ranges: bytes

Connection: keep-alive

Content-Length: 535

Content-Type: text/plain

Date: Thu, 15 Feb 2018 03:29:17 GMT

Etag: "8338004-217-5589b873313c0"

Keep-Alive: timeout=15

Last-Modified: Thu, 07 Sep 2017 15:58:15 GMT

Server: Apache

BODY view raw
H4sIAAAAAAACA6VTwUrDQBCdpE3VgrSCB6GXViiekjbYg4hKQBQP9aTQ3tKNbU0gTSRZoZ7sJ+VY
POjR31Hau+6mk5CurQgO7M68t292s7OT54v2pSxJkJgMZ8BRBEaMDeQnciph3BHTGVCAXKxVIGvG
kp8hmqXr1XjmeQU25sjOobfk28i3hbzhe76ek3qgN3m0waKWPmnVFRb4U77pG5+uXpN9XlQ2lZTp
CV+COAab0ofjRkNvtjT9UNe63S4bjaHjEdd0vJAGj3fU8b1Qo2NaHLrk/vTWHqjXxFM7tq/e+G5f
5UTHD9w+/GK8OlFajywvp/dMjH91Hj6/RG0VX0XUbyNfk5b5XTbKK84txTx7NUFfWcPvr+HBYmUK
HF8j4QgsME0rDM2QkoCCOegTSpjzWFW08GlEicU8DRbeTiI6GFPQYu3/rZLpJcj0bYT4XNCXBVzD
/NyPPhT7b2F5Ae9kcrPWwf/lQOClFVhekW+g8AOxgnfcRLyHfmvN+c0/nl/8BtClmAoBBAAA

Aqui eu dei uma coçada na cabeça ahaha... Até que me veio a luz esse padrão geralmente é encoded, então tentei de novo base64.
Para chegar no ELF final eu fiz o seguinte.

 

Spoiler

2.jpg.9121cc139b60c172d95a27e8509bdafe.jpg

Abri o ELF no radare e fucei um pouco.

Spoiler

1.jpg.53e15494b04d32d74c9e9d412610dcfb.jpg

Para ter o resultado final executando o ELF, eu teria que fazer o patch no segundo quadrado azul.
Mas não precisei, pq o próprio radare me ajudou nessa.

Tentei buscar algo nessa flag, mas parece que o conteúdo foi removido.

Spoiler

3.jpg.0e52c8b248d9f6f907c686ab985c8bd8.jpg

Era isso mesmo ?

Abraço! ;)

 

FLAG:
 

Spoiler

http://104.131.017.14/final_instructions.txt?flag=The-Man-Who-Sold-The-World

 

Link para o comentário
Compartilhar em outros sites

Eu fiz aqui com o intuito em exercitar shell scripting:

#!/bin/bash
shopt -s nocasematch
data='2d2f3e4a45090b041e450d0f1e4513051f45051f1e45050c45071345020f0b0e44021e07064a223e3e3a455b445b361836042205191e504a090b1c0b05181e0b440905074408183618360460'
hexs=$(echo $data|egrep -o '.{2}')
for ((i = 0; i <= 255; i++))
do
    str=''
    printf "$i "
    for hex in $hexs
    do
        int=$((0x$hex ^ $i))
        if (($int >= 32 && $int <= 126))
        then
            str+=$(printf "\x$(printf %x $int)")
        fi
    done
    if [[ $str =~ http ]]
    then
      printf "\nchave: $i\nstr: $str\n"
      break
    fi
done

Mas a saída ainda precisou ser trabalhada:

chave: 74
str: getCANTGETYOUOUTOFMYHEADHTMLhttp|R|NhOSTCAVAORTACOMBR|R|N*

Pulei alguns caracteres especiais, mas foi quase rs.

Link para o comentário
Compartilhar em outros sites

5 horas atrás, gzn disse:

Eu fiz aqui com o intuito em exercitar shell scripting:


#!/bin/bash
shopt -s nocasematch
data='2d2f3e4a45090b041e450d0f1e4513051f45051f1e45050c45071345020f0b0e44021e07064a223e3e3a455b445b361836042205191e504a090b1c0b05181e0b440905074408183618360460'
hexs=$(echo $data|egrep -o '.{2}')
for ((i = 0; i <= 255; i++))
do
    str=''
    printf "$i "
    for hex in $hexs
    do
        int=$((0x$hex ^ $i))
        if (($int >= 32 && $int <= 126))
        then
            str+=$(printf "\x$(printf %x $int)")
        fi
    done
    if [[ $str =~ http ]]
    then
      printf "\nchave: $i\nstr: $str\n"
      break
    fi
done

Mas a saída ainda precisou ser trabalhada:

chave: 74
str: getCANTGETYOUOUTOFMYHEADHTMLhttp|R|NhOSTCAVAORTACOMBR|R|N*

Pulei alguns caracteres especiais, mas foi quase rs.

N manjo muito de shell scripting. Eu fiz em python ;p
Depois posto o script aqui se alguém se interessar. 

Abraço!

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
5 horas atrás, Pimptech disse:

naum entendi nada do codigo.. mais ai naum eh problema seu neh.. mais sim meu q tenho q tomar vergonha na cara e aprender python.. uhauhauhauaha.. valeu ai.. fica com deus..

Link para o comentário
Compartilhar em outros sites

7 horas atrás, anonimo disse:

naum entendi nada do codigo.. mais ai naum eh problema seu neh.. mais sim meu q tenho q tomar vergonha na cara e aprender python.. uhauhauhauaha.. valeu ai.. fica com deus..

Posso te ajudar a entender, mas realmente você vai precisar aprender python. No canal do Papo Binário tem um curso gratuito, pq não começa por ele ? 

Spoiler

 

 

Em relação ao código, posso te ajudar a entender a lógica da coisa. O código não tá bem "documentado", pq foi algo que eu fiz rápido para resolver o problema. Vou te dar os pontos chaves, mas ai você precisa dar uma pesquisada melhor para entender. 

Para começar bytes em hexadecimal geralmente são compostos por 2 dígitos, por exemplo o caracter "1" é representado por 0x31 em hexadecimal. E geralmente quando o hexadecimal poderia ser representado por um só dígito colocamos o 0 na frente, 0x01. O 0x representa que é um hexadecimal. Se quiser entender melhor essa questão de hex, no Papo Binário tem um curso gratuito também de Engenharia Reversa.

Spoiler

 

 

Agora vamos ao código... Nessa parte:
 

b = "2d2f3e4a45090b041e450d0f1e4513051f45051f1e45050c45071345020f0b0e44021e07064a223e3e3a455b445b361836042205191e504a090b1c0b05181e0b440905074408183618360460"
s = 0
ns = ""

for c in b:
    if s == 2:
        ns += "."
        ns += c
        s = 1
    else:
        ns += c
        s = s + 1

b = ns.split('.')

Como eu disse anteriormente, ao analisar a variável você pode observar que a string não possui nenhum caracter maior do que F e a quantidade de caracteres é um número par, ou seja caracteriza hex, fora que essa string grande está dentro de uma "variável" "encrypted". Se você explorar o desafio verá que não existe nada além dessa informação, então o primeiro pensamento foi fazer o brute force, mas para isso eu precisava trabalhar com cada byte separadamente. Essa primeira parte faz isso, eu coloco um caracter de . (ponto) em um intervalo de dois caracteres. Ficando mais ou menos assim: 24.2f.3e.4a.45.09........ E assim por diante. Com isso eu posso dar um split que transforma essa nova string com pontos em um array separando os bytes em hex.

Na segunda parte é a parte que faz o brute force.

ns = ""
for i in range(0xFF): #0x4a 0x6a
    for c in b:
        ns += chr(int(c, 16)^i)
    print(hex(i) + " ==> " + ns.replace('\n', '').replace('\r', ''))
    ns = ""

Criei uma variável ns (newstring) para receber o resultado da operação. Utilizei 2 loops. Primeiro para usar o menor byte até o maior valor possível em 1 byte hexadecimal que é 0xFF.
Esse byte vai servir de "chave" para a operação de XOR caracterizado pelo caracter ^. A função int(c, 16), sendo o byte hexa que foi separado na primeira parte do código. Mas para fazer o XOR eu preciso primeiro converter esse byte em hexadecimal para que o "python" possa fazer essa operação e para isso utilizamos o int com o parametro 16 que é o número base de hexadecimal. Então transformamos o byte em um número hexa para o python. Já a função chr transforma o resultado do XOR que é um hexadecimal em caracter ASCII.

Depois eu simplesmente concateno o valor XOREADO na variável ns e após fazer esta operação em todos os bytes da primeira parte do código, eu faço um print em tela do resultado, utilizando o replace para remover qualquer quebra de linha (para ficar legível e fácil de identificar).

 

Cara aconselho a pesquisar e estudar. Veja os vídeos que eu te mandei mais acima que tenho certeza que você conseguirá entender muito melhor. Qualquer coisa dá um alô que se u puder ajudar eu ajudo. Abraço!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...