Segunda entrega de esta serie de trolles. Y antes de continuar quiero dar la gracias a su autor, @Maleus21. y tambien a vulnhub por dar visibilidad a estas obras de arte. Mis respetos.

 

Link: https://www.vulnhub.com/...

 

 

192.168.110.140 es su nombre y estas sus verguenzas:

 

Como siempre un vistacito inofensivo por la pagina web.

 

Jejejeje, miralo! ahí está otra vez. El troll no, digo el robots.txt xD, con un buen puñado de rutas, que por no probar a mano una por una se lo voy a pasar a wfuzz, y así voy tambien voy haciendome una 'listita' de palabras. ...Que aveces salvan el culo.

 

Por cierto, en el codigo fuente del index.html he encontrado lo siguiente:

 

<!--Nothing here, Try Harder!>
<!--Author: Tr0ll>
<!--Editor: VIM>

 

Si lo pone es por algo, y ese algo es un posible usuario como un campano. Prosigamos....

 

Si entramos en esas 4 carpetas vamos a encontrar una foto de un gato realmente bonito, pero con cara de troll. Yo estaba pensando que los cuatro enlaces estaban llevando a la misma imagen, pero no! Cada carpeta tiene una copia exacta de la misma imagen.... ¿exacta, exacta?

 

Si descargamos las cuatro imagenes podemos ver que una de ellas ocupa un poco más.

 

Es cuestión de mirarle los strings para ver que tiene un mensaje escondido para nosotros. uuuuuuuuuuh!

 

Ahá, que misterioso... pero ya vengo yo con los huevos pelados de hacerme tr0ll-I y no tardo ni un minuto en meter "y0ur_self" en el navegador.

 

Ja!, tenemos un nuevo archivo a nuestra disposición, answer.txt. Pero...., ¿que mierda es esto? Un listado en base64 y me lo está dando para que haga fuerza bruta a algo con eso pero, ¿Tendré que usar el listado como viene? ¿decodeado?...

 

Tenemos un user (o eso creo), pero esta lista son casi 100000 palabras, que quitando las repetidas se queda en un 75%. Exactamente tenemos 73128 posibilidades... No veo factible meterle al ftp o al ssh con eso. Pero con algo mas pequeño sí.

 

Veis para lo que vale irse haciendo una lista de palabras? Aunque tambien habria valido con probar el mismo pass que el user jejej, pero eso a mí no se me habia ocurrido.

 

Dentro del FTP nos encontramos con un archivo .zip y al intentar descomprimirlo:

 

Parece facil. El listado que nos dió antes aquí si tiene mas sentido usarlo de diccionario. Vamos a decodearlo de base64 y se lo pasamos a fcrackzip.

 

Estaba claro. Y que tenemos aqui?? una clave RSA. de 'Tr0ll'? 'noob' quizás?

 

'noob' es el user de la clave RSA pero según nos conectamos nos tira. Pfff... Intento mandar comandos pero parace que no hace ni caso, intento copiarle algun archivo en el servidor http con scp pero tampoco.

 

Finalmente, entre todas las mierdas que me dió por probar, la explotacion de shellshock fué la que me devolvió la esperanza.

ssh noob@192.168.110.140 -i noob -t '() { :;}; /bin/bash'

 

Uuuuuhhh big troubles! Una vez dentro lo de siempre; recopilar informacion sobre usuarios, archivos, configuraciones y demás.

 

Rapidamente sale a la luz un directorio que nos lleva hacia lo que parece un juego. Un juego en el que nos va a marear seguro.... a los trolles les gusta este tipo de juegos ...a mi tambien!

 

Dentro de cada puerta vamos a encontrarnos con un binario llamado r00t, setiudeado y con toda la pinta de ser nuestra escalera al cielo. Pero no va a ser tan facil... Me lleva un buen rato darme cuenta, pero creo que mas o menos entiendo de que va todo esto.

 

Los tres binarios son diferentes. Uno es un cachondeo que reinicia la maquina, otro nos capa algunos comandos durante 2 minutos y el otro nos pide un archivo de entrada. Hasta aqui bien, no?

 

La dificultad está en que los archivos se cambian de sitio, jejej si. Se borran de donde están y se vuelven a generar en una de las tres carpetas, totalmente random. De tal manera que cuando localizas el bueno y estás probandolo, de repente se cambia, lo ejecutas y has reiniciado la maquina... no es mas que eso y al final te ries, pero que cabrón!

 

Si nos ponemos a enredar con el binario que nos pide el archivo descubrimos algo muy, pero que muy interesante. Es vulnerable a bufferoverflow??

 

Yeah!, que alegria me acabo de llevar, y todavia más cuando me doy cuenta de que disponemos de gdb. Esto pinta bien eh?

 

Aqui vemos el desensamblado de la función main, es cuando se confirman nuestras sospechas: strcpy. Es letal!!.

 

Vamos a poner un par de puntos de ruptura. Uno despues de que se haya ejecutado strcpy y otro en el ret, para poder mirar el stado de la pila y ver donde empieza y donde deberia terminar nuestro payload (ret).

 

Me he pasado de frenada jeje. Es igual, ahi lo tenemos! 268 caracteres hasta llegar a la direccion de retorno.

 

(La direccion de retorno siempré va a ser las que esté al principio de la pila antes de la ejecución del ret. Precisamete es lo que este hace, popear la direccion que se encuentra en la cima y pasarla al EIP (dirección de la proxima instrucción a ejecutar). Por eso, en este caso, se vá a 0x5a5a5a5a ("ZZZZ"): Se ha sobreescrito la direecion esperada en ret a partir de la 268º Z).

 

Entonces nuestro exploit ya va pillando un poco de forma: exploit=(268 + RET).

 

Ahora que podemos escribir la direccion de retorno ¿que dirección vamos a usar? Podriamos intentar meter un shellcode en los 268 caracteres y hacerle saltar hacia atrás. Pero lo vamos a meter en una variable de entorno y lo vamos a llamar alli.

 

Primero vamos a crear la variable con nuestro shellcode y ahora os digo como podemos localizar su posición, o por lo menos una aproximacion de esta.

 

Tenemos que elegir un shellcode, el tamaño nos da en principio igual, asi que uno estandard de 32bits que ejecute un /bin/bash.

----------------------------------------Shellcode-------------------------------------------------

"\x6a\x0b\x58\x99\x52\x66\x68\x2d\x70\x89\xe1\x52\x6a\x68\x68\x2f\x62\x61\x73\x68\x2f\x62\x69\x6e\x89\xe3\x52\x51\x53\x89\xe1\xcd\x80"

----------------------------------------------------------------------------------------------------

 

Ahora le ponemos un colchoncito de nops (\x90) delante por si luego no damos con la direccion exacta. Una vez hecho esto lo exportamos.

 

Ya lo tenemos. Ahora tan solo hay que buscar en que direccion de memoria se encuentra. Para esto podriamos hacernos un EggHunter, pero tambien podemos mirarlo con el debugger. Mas rápido!

 

Bien pues parece que tenemos la ultima pieza que nos faltaba del puzzle. Al final la cosa queda en: "Z"x268 + "\x06\xfe\xff\xbf"  (Acordarse que estamos en little endian y se transcribe al reveś 0xbffffe06)

 

Funcionará????

 

Si os dais cuenta he tenido que ir 'toqueteando' la direccion de retorno, saltando hacia delante sin miedo, que para eso estaban ahi nuestro colchoncito de nops. GG!!

 

 

Ah y para los que hayais llegado hasta aquí, si os ha gustado tr0ll, tengo una buena noticia para vosotros. Mirad lo que veo en el twiter del autor.

 

Un beso de vuestro doctor. Zaiuss