sup3rm4n Posted February 8, 2018 at 09:42 PM Share Posted February 8, 2018 at 09:42 PM 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 0302 01 00 01 00 50 00 10 f4 47 00 76 ad f1 50 1800 e4 4e bd 00 00 28 66 61 6c 74 61 20 61 6c 676f 20 61 71 75 69 29 0d 0a 58 2d 49 6e 73 74 7275 63 74 69 6f 6e 73 3a 20 65 6e 63 6f 6e 74 7265 20 48 6f 73 74 20 65 20 55 52 49 20 65 20 636f 6e 74 69 6e 75 65 20 6f 20 64 65 73 61 66 696f 0d 0a 55 73 65 72 2d 41 67 65 6e 74 3a 20 6375 72 6c 2f 37 2e 34 37 2e 30 0d 0a 43 6f 6f 6b69 65 3a 20 5a 57 35 6a 63 6e 6c 77 64 47 56 6b58 32 52 68 64 47 45 39 4d 6d 51 79 5a 6a 4e 6c4e 47 45 30 4e 54 41 35 4d 47 49 77 4e 44 46 6c4e 44 55 77 5a 44 42 6d 4d 57 55 30 4e 54 45 7a4d 44 55 78 5a 6a 51 31 4d 44 55 78 5a 6a 46 6c4e 44 55 77 4e 54 42 6a 4e 44 55 77 4e 7a 45 7a4e 44 55 77 4d 6a 42 6d 4d 47 49 77 5a 54 51 304d 44 49 78 5a 54 41 33 4d 44 59 30 59 54 49 794d 32 55 7a 5a 54 4e 68 4e 44 55 31 59 6a 51 304e 57 49 7a 4e 6a 45 34 4d 7a 59 77 4e 44 49 794d 44 55 78 4f 54 46 6c 4e 54 41 30 59 54 41 354d 47 49 78 59 7a 42 69 4d 44 55 78 4f 44 46 6c4d 47 49 30 4e 44 41 35 4d 44 55 77 4e 7a 51 304d 44 67 78 4f 44 4d 32 4d 54 67 7a 4e 6a 41 304e 6a 41 4b 0d 0a 43 6f 6e 74 65 6e 74 2d 4c 656e 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 to comment Share on other sites More sharing options...
Pimptech Posted February 25, 2018 at 06:03 AM Share Posted February 25, 2018 at 06:03 AM 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 Abri o ELF no radare e fucei um pouco. Spoiler 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 Era isso mesmo ? Abraço! FLAG: Spoiler http://104.131.017.14/final_instructions.txt?flag=The-Man-Who-Sold-The-World Link to comment Share on other sites More sharing options...
gzn Posted February 26, 2018 at 01:03 AM Share Posted February 26, 2018 at 01:03 AM 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 to comment Share on other sites More sharing options...
Pimptech Posted February 26, 2018 at 06:15 AM Share Posted February 26, 2018 at 06:15 AM 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 to comment Share on other sites More sharing options...
anonimo Posted March 10, 2018 at 07:46 AM Share Posted March 10, 2018 at 07:46 AM Em 2/25/2018 em 06:03, Pimptech disse: Deduzi que fosse hex. Vi que estava como encrypted, então parti pro bruteforce. vc pode mostrar como fez o bruteforce daquele trecho em base64?? valeu ai.. Link to comment Share on other sites More sharing options...
Pimptech Posted March 11, 2018 at 02:23 AM Share Posted March 11, 2018 at 02:23 AM 18 horas atrás, anonimo disse: vc pode mostrar como fez o bruteforce daquele trecho em base64?? valeu ai.. Opa, claro. Tá na mão. https://gist.github.com/bernardopadua/3ee2e03a464f64820264124e27f5feae#file-bruteforce_superman_desafio-py Qualquer dúvida, só falar. Link to comment Share on other sites More sharing options...
anonimo Posted March 11, 2018 at 08:05 AM Share Posted March 11, 2018 at 08:05 AM 5 horas atrás, Pimptech disse: Opa, claro. Tá na mão. https://gist.github.com/bernardopadua/3ee2e03a464f64820264124e27f5feae#file-bruteforce_superman_desafio-py Qualquer dúvida, só falar. 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 to comment Share on other sites More sharing options...
Pimptech Posted March 11, 2018 at 04:00 PM Share Posted March 11, 2018 at 04:00 PM 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 b 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 c 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 to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.