Академический Документы
Профессиональный Документы
Культура Документы
2014
[ Crackme fast ]
. Descripcin .
. Introduccin .
En la descripcin del reto nos muestra lo siguiente: Crackme Fast The
binary http://41.231.53.44:9393/ Send the password in less than 2 seconds
http://41.231.53.44:9393/check.php?p={p@55} .
. Manos a la obra .
. Anlisis esttico .
Al conectarse a la direccin http://41.231.53.44:9393/ se descarga un
binario. Cada vez que nos conectados a esa direccin, tenemos un binario
diferente. Al abrirlo con un editor hexadecimal se muestra lo siguiente.
#1/6
by skuater, Longinos & Nox @ Programming::Crackme fast
. Tiempo de IDA .
Abrimos el binario con IDA y buscamos la referencia de la cadena
Password :.
#2/6
Sigue la impresin en consola de la cadena Password :, y la peticin de
una contrasea a ingresar que es guardada en la variable local pass_in.
Finalmente se inicia un contador a 0 para comenzar con el bucle.
#3/6
by skuater, Longinos & Nox @ Programming::Crackme fast
Ya sabemos que el binario tiene una key hardcodeada1, y que opera con
una operacin lgica XOR. Si revisamos la cabecera de la seccin de datos,
RawAddress, es decir, el offset, dnde empieza la seccin en disco es 0x1200.
. Python .
Una vez establecido la lgica, debemos automatizar dichas acciones para
enviar la respuesta al servidor en menos de dos segundos, ya que ese es el
objetivo, y este nos devuelva el Flag.
1
El termino key hardcodeada o key hardcoded, significa que la llave usada para la operacin
lgica XOR, fue fijada desde la programacin del reto tambin llamado constante .
#4/6
Sabiendo eso, se program el siguiente cdigo.
import cookielib
import urllib2
import urllib
import os
import sys
cookies = cookielib.LWPCookieJar()
handlers = [
urllib2.HTTPHandler(),
urllib2.HTTPSHandler(),
urllib2.HTTPCookieProcessor(cookies)
]
opener = urllib2.build_opener(*handlers)
def fetch(uri,parametros):
if len(parametros)>0:
req = urllib2.Request(uri,data=parametros)
else:
req = urllib2.Request(uri)
return opener.open(req)
def send_result(v):
params = {}
# params = urllib.urlencode(params)
uri = 'http://41.231.53.44:9393/check.php?p='+v
res = fetch(uri,params)
dump()
contenido=res.read()
return contenido
def Get_valor():
params = {}
uri = 'http://41.231.53.44:9393'
res = fetch(uri,params)
contenido=res.read()
myhash = contenido[0x1310:0x1330]
myhash2 = ""
for i in range(0, len(myhash), 4):
myhash2 += myhash[i:i+1]
valor=Get_valor()
print El Flag es: , send_result(valor)
#5/6
by skuater, Longinos & Nox @ Programming::Crackme fast
. Conclusin .
. La contrasea .
No guardamos el Flag .
A por el mundo!
Nox.
#6/6