write up #wgsbd2 zeropwn

Bien este reto fue muy interesante. Aqui debemos conectarnos al servidor por el puerto 8008. La primera vez que entre me devolvio un codigo XML con una cadena interesante. La cadena estaba codificada con base64 y al volverla texto plano vemos unos parametros muy interesantes, entre ellos podemos ver que se usa un sistema de MD5-sess para ejecutarel login. Aunque no pude resolverlo en ese momento despues nos dieron una gran pista, la verdad para mi gusto solo hubieran dado informacion sobre los parametros y no todo el cosigo pero bueno, la pista fue el codigo fuente y un diccionario de passwords. Aqui en mas el reto era pan comido, Se hacia un programa inverso, es decir, que diera lo que el servidor queria. quedando asi:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import socket
import time
import hashlib
import base64

dic = open(«password4.txt»,»r»)

def propiedad(campo,datos):
for valor in datos:
temp = valor.split(«=»)
if temp[0]==campo:
return temp[1]

def md5_chall(uname, passw, realm, nonce, cnonce, nc, digest_uri, qop):
ha1d = hashlib.md5(uname+»:»+realm+»:»+passw).digest()
ha1d = ha1d + («:» + nonce[1:len(nonce)-1] +»:» +cnonce).encode( «utf-8» )
ha1 = hashlib.md5(ha1d).hexdigest()
ha2 = hashlib.md5(«AUTHENTICATE:»+ digest_uri).hexdigest()
hash = hashlib.md5(ha1+»:»+nonce+»:»+nc+»:»+cnonce+»:»+qop+»:»+ha2).hexdigest()
return hash

def peticion(clave):
fs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
fs.connect((«217.124.209.253», 8008))
xml = «»
s = » »

while(len(s) > 0):
s = fs.recv(100)
xml = xml + s

xml = xml[242:328]
servidor = base64.b64decode(xml[0:60] + xml[61:85])
propiedades = servidor.split(«,»)

nonce = propiedad(«nonce», propiedades)
qop = propiedad(«qop», propiedades)
charset = propiedad(«charset», propiedades)

respuesta = md5_chall(«zero_cool»,clave,»war.game.sbd»,nonce,»1598635″,»00001″,»xmpp/war.game.sbd»,qop)

data = «username = \»zero_cool\» ,realm = \»war.game.sbd\», nonce = «+nonce+»,cnonce = \»1598635\», nc = \»00001\», qop =»+ qop+», digest-uri = \»xmpp/war.game.sbd\», response = \»» + respuesta + «\», charset= \»»+charset+»\»»
fs.send(«<response>»+base64.b64encode(data)+»</response>»)

s = » »
while(len(s) > 0):
s = fs.recv(100)
print s

for palabra in dic:
print palabra
peticion(palabra)

Como este blog no formatea bien el cosido tambien incluyo una imagen de como debe quedar:

codigo de zeropwn

Con el token : I_LoVe_Angelina_J0Lie_

Deja un comentario