Mostrando entradas con la etiqueta CTF. Mostrar todas las entradas
Mostrando entradas con la etiqueta CTF. Mostrar todas las entradas

domingo, 13 de septiembre de 2015

Ejecutar ELF 32 bits en arquitectura de 64 bits


Me ocurre a menudo que tengo que realizar alguna acción que alguna vez hice y que al tiempo debo repetir y claro, como generalmente no las anoto, pues me toca volver a bucear por la web hasta que encuentro lo que necesito.

Especialmente esto me ocurre cada vez que participo en algún CTF y sinceramente, me da bastante coraje tener que volver a dedicar tiempo a algo que en su día ya se lo dediqué.

Es por esto, por lo que comenzaré a escribir entradas con pequeñas 'recetas' de aquello que no quiero volver a buscar cada vez que lo necesite hacer.

Por tanto, abro esta nueva categoría con una receta que me permite ejecutar ELF de 32 bits en arquitecturas de 64 bits, como es el caso de la distribución Kali Linux 2.

  1. Compruebo que arquitecturas tengo habilitadas:
    dpkg --print-foreign-architectures
  1. Si en la lista aparece i386, voy al paso 5. En caso contrario, la añado:
    dpkg --add-architecture i386
  1. Actualizo:
    apt-get update
  1. Por último la instalo:
    apt-get install sl-modem-daemon:i386
  1. Fin del proceso.

sábado, 20 de junio de 2015

Bandit Level 17 → Level 18



Los datos de conexión para este nivel son:

- Host: bandit.labs.overthewire.org
- User: bandit17
- Pass: xLYVMN9WE5zQ5vHacb0sZEVqbrp7nBTn



Los objetivos son claros:


La resolución de este reto es sencilla. Basta con hacer uso del comando grep:



Esto es todo por ahora. ¡Hasta el próximo reto!

lunes, 2 de febrero de 2015

Entrevista a Sergio Llata a.k.a. thEpOpE




Con esta entrada, intento recuperar el flujo de entrevistas a personas que de alguna manera, me aportan y hacen crecer en lo técnico y en lo humano. 

Esta vez, lo haremos de la mano de Sergio Llata (@sergiollata) a.k.a. thEpOpE. 

Fue en la rooted 2k14, donde tuve el inmenso placer de conocerle personalmente y en donde pude contemplar brevemente su enorme potencial.


Desde entonces, no solo hemos mantenido una buena amistad, sino que además hemos conseguido juntar y formar un equipo con unas cuantas mentes inquietas, del cual posiblemente hable en próximas entradas. Sin más preámbulos empezamos con la interview.


  • ¿Cuéntanos un poco a que te dedicas en tu día a día? 
Todo empezó allá en el año 1974, en un pueblo que dista 12 km de Santander (España). Allí nacía un servidor, siendo el tercero de 4 hermanos... (esto parece el inicio de una novela). Bueno, vamos al grano de la pregunta: actualmente tengo 40 años, y no me dedico a nada relacionado con la informática, o al menos de un modo directo. Aunque es algo que siempre se ha rumoreado de mí tanto en las listas de CracksLatinoS, o en el canal #crackers del IRC-Hispano, para salir de todad duda he de decir que, efectivamente, desde el año 2000 soy sacerdote católico. Realmente mi día a día consiste en ejercer mi sacerdocio como párroco en una localidad de la diócesis de Santander.
  • ¿De dónde viene o de dónde sacaste el nick thEpOpE? 
El nick creo que está claro :) En el año 1998, cuando aún estaba estudiando en el seminario, mi hermano puso un modem 33k en casa, y de este modo empezamos a tener Internet. Anteriormente siempre había firmado como DJ Dos, S.O.S. , o simplemente con mi nombre. A raíz de conectarme al IRC, tuve que elegir un nick, y ahí estuvo la pega. Inicialmente me atrajo la idea de Bishop, por el doble significado que tiene en castellano. Pero pensé que siempre habría alguien que podría ponerse un nick en jerarquía superior, y además me parecía que iba a hacer uso del nick de un modo no ofensivo a lo que significa. Además fundé el #canal_catolico también en IRC-Hispano, lo cual daba una identidad interesante. De ahí surgió mi nick inicial, que originalmente tenía corchetes [ThePope] ; y finalmente, cuando quité los corchetes lo dejé con una grafía un poco más h4xor, y que además era el estilo que adopté para la página con tutoriales (y otras lindezas ;) que tuve enlazada desde la web de karpoff. En mi caso he usado otros nicks, como Horeb y MrKhaki.
  • Estoy deseando que nos cuentes como fueron tus comienzos, especialmente en lo que a términos como 'spectrum', 'dibujo', 'música', 'scene', ...
Los comienzos son fáciles de explicarlos. Cuando yo tenía 13 años a mi hermano alguien le regaló un Spectrum+ de 48kb. Hay que pensar que en aquella época en mi casa no había electricidad a 220V, y teníamos que usar un transformador, junto con la única TV que había en casa. Aunque los juegos que venían de demostración eran divertidos, pronto me cansé de ellos, y empecé a experimentar y probar los programas del manual. Así es como poco a poco fui haciendo mis primeros pinitos en Basic de Sinclair. Pronto descubrí que con Basic poco o nada se podía hacer, y aunque la MicroManía tenía bastante enjundia como revista de juegos, cuando mi hermano empezó a la universidad trajo un día una revista que regalaban una cinta.. MicroHobby. Eso fue el lanzamiento total: listados en ensamblador de z80, artículos de programación, herramientas, consultorio de dudas, etc. En el instituto pude intercambiar un montón de material con gente que tenía la misma afición, pero desgraciadamente debía ser casi el único que le gustaba el ensamblador y listados hexadecimales.
Fue a raíz de los concursos de MicroHobby como me puse a hacer los primeros pinitos en dibujos pixel a pixel, así como destripar algunos juegos, en busca de los ansiados pokes de vidas infinitas, o quitar las limitaciones de tiempo que tenían las demos jugables que venían en MicroHobby. Debido al concurso de aventuras conversacionales que hizo MicroHobby me enrolé en ese mundo también, haciendo muchas colaboraciones en el fanzine Z for Zero. En este período llegó a casa un Macintosh Classic, y posteriormente un PC - 386. Fueron dos ordenadores que me introdujeron en el mundo de formatos de sonido, formatos de gráficos, compresores, Motorola 68000...
Justo al año siguiente yo empecé a la universidad, me matriculé en Físicas. A decir verdad lo hice con la intención de hacer Física Electrónica, pero la idea del seminario y la vocación llevaban tiempo en la mente y en el corazón. Y cuando terminé el segundo curso en la universidad, me fui al seminario. En el seminario teníamos una sala con 2 ordenadores Macintosh :) Y posteriormente nos permitieron tener ordenador personal en la habitación :) En ese periodo desarrollé una aventura conversacional para PC, desarrollé un sistema de sonido para PC que permitía incluir sonidos y música en este tipo de juegos (hay unos cuantos juegos por ahí que llevan música mía):
e hice una librería para QBasic que permitía gestionar el CD-Rom, SoundBlaster, ratón, etc...
Al mundo de la scene ... es otra historia muy larga. Porque realmente fue la evolución desde los IRC de ingeniería inversa. Al participar en las parties, nos juntamos unos cuantos que nos gustaba este tema (inicialmente Cathedral :O , y posteriormente Nocturns). A mí me tocó la parte de sonido, a decir verdad, me dediqué a reversar motores de sonido de intros de 64kb, y de 4kb, para después desarrollar el nuestro propio.
  • ¿Cómo ha sido tu evolución en el mundo del (Hack | Crack)ing?
No me considero hacker. Más bien siempre me he considerado cracker. Y no por romper cosas... sino porque "lo virtual" me ha resultado siempre muy etéreo. Me ha gustado más todo lo que se pueda toquetear en local.
Mis inicios en esto indudablemente están en la etapa del Spectrum, cuando usaba el MONS para desensamblar y poder buscar los pokes de los juegos (un parche en toda regla, vamos). También para buscar las contraseñas y poder jugar a las segundas partes sin haber terminado la primera. Después estuve en relación con todo lo de Macintosh (tenía un debugger en la propia instalación del sistema 7 MacsBugs , y un editor de recursos que desensamblaba los recursos de código), y cuando tuve mi 486 cayó por mis manos una versión del win32dasm. La etapa del IRC trajo el resto: sice, trw2000, ollydbg... A todo esto hay que añadir que anteriormente a Internet, no había más posibilidad que la biblioteca de la universidad, y un montón de cintas de spectrum y diskettes que intercambiábamos por correo ordinario.
  • Sabemos de buena tinta que fuiste parte importante en grupos de mucha importancia tales como TNT o WkT! ¿qué nos puedes contar de tu paso por esos te@ms? y sobre todo  ¿en que crees que habéis podido influir para las actuales generaciones?
Bueno, parte importante no me he considerado nunca. En TNT coincidí con miembros españoles, como Xasx (fundador de TNT), Metamorfer, SkUaTeR, y Karlitoz. Salvo con Metamorfer, he tenido la suerte de poder dialogar personalmente y compartir mesa con el resto. TNT me aportó el vértigo de lo que eran originalmente los 0days. Hoy sale un programa, y en menos de 24 horas había que sacar la medicina. Mi conexión de Internet no daba para tanto, y mi tiempo tampoco.
A través del canal #crackers de IRC-Hispano pudimos hacer varias kedadas en la Euskal
Party. La primera fue en la edición 8 de la Party. A partir de ahí entré en contacto con gente de WkT!. En esta época hice buenos amigos de faena donde coincidíamos en la Party: Uri (int3pids), Xezaw (48bits), Shotgan (Nocturns), Ripe (7a69 ezine), Dreg (fr33project), noukeys.
MrBlack hizo campaña de reclutamiento en una party, y finalmente fuimos tres miembros de TNT quienes adquirimos colores :) Si TNT era vértigo, WkT! era madurez. Ante todo se apreciaba lo que cada uno hacía, porque aportaba mucho al resto. Buenos tutoriales, buenas herramientas, nuevas líneas de investigación. Y todo en español. De WkT! guardo un gratísimo recuerdo, y eso que me tocó en la última época, justo cuando se apagó...
No sé a qué nivel hayamos podido contribuir entre todos a las actuales generaciones. Cuando Shaddy dijo en su entrevista que un tutorial mío había marcado un antes y un después en cómo hacer él los suyos, me sentí orgulloso de saber que el tiempo que invertí en hacer aquello había merecido la pena para otros.
  • Dinos que es lo primero que te viene a la cabeza si te pregunto por:
    • Ingeniería Inversa: hexadecimal, estructuras de datos
    • Hacker: admiración por lo que hacen...
    • amn3s1a: diversión a raudales, y buena gente... Como tú dijiste en cierta ocasión: me ha quitado 15 años de encima
    • Mr. Snow: un buen amigo, y una bestia parda. Cuando hacemos retos juntos nos complementamos muy bien. También me viene a la cabeza alguna noche loca por Bilbao (El Alicates, El Siete, y Jade ...)
    • Marcan: valium :) A gente como Marcan no se les debería permitir salir de este país. Debería poner por escrito y con lenguaje humano todo lo que hierve en esa cabeza.
    • Euskal Encounter: Añoranza... con menos participantes era más divertido. Actualmente es el punto de encuentro con otros grupos, y gente "de toda la vida".
    • DemoScene, Intro y 4 K.: Asombro, emoción, arte, cultura digital
    • Criptografía: "Tú verás lo que haces, pero yo a la carcel no voy a verte" (la frase de mi madre cuando ve determinadas herramientas en pantalla). Realmente es lo que ha dado sentido a las pocas matemáticas que sé.
    • Matemática: Qué pena que las he cogido cariño ahora... son el lenguaje del orden
    • Amistad: "Un amigo es aquel que conoce todo de ti, y aún así te sigue queriendo". De estos he tenido muy pocos. La informática me ha dado amigos que los aprecio como hermanos (eSn-mIn, Jade, noukeys)
    • CTF: ¿el fin de semana? ¡¡madre mía, a ver qué ratos me quedan libres para poder echar un cable al grupo!!
  • ¿Cual es el lenguaje de programación que más te gusta y por qué? 
Por herencia, el Basic (he dicho Basic, no VBasic :p). Actualmente me gusta mucho el
python, me parece un lenguaje de aprendizaje rápido, y versátil. A decir verdad apenas programo, y aunque me cuesta mucho escribir 5 líneas seguida en él, el C me ha parecido siempre la mejor opción para cosas grandes y serias. Para des-programar lo tengo claro, ensamblador (da igual de qué máquina sea :), y de hecho sigo haciendo algunas cosas directamente en ensamblador.
  • ¿Cómo percibes el 'mundo hacker' de hoy en día?, ¿Qué cambiarías de él? y ¿Qué no? 
Lo percibo monetizado, convertido en moneda de cambio, y todo lo que se monetiza se oxida. Ahora cualquiera que use Kali o haya hecho un curso de 30 horas sobre seguridad en sistemas, ya se considera hacker... :S Cambiaría muchas cosas, para empezar a quienes hacen las leyes en este país; y también todo ese lenguaje importado con títulos y palabrejas raras... ¿a quién se le ocurre autodenominarse "researcher"? ¿Dónde está la creatividad original y 'typical spanish' del Jamón y el Vino?. No cambiaría a las personas concretas que siguen dándole duro, con ganas de abrir nuevos caminos, y que siguen marcando nuevas fronteras...
  • ¿Qué consejos le darías a los que empiezan o están comenzando? 
Leer, preguntar, probar. Volver a leer, volver a preguntar, volver a probar. Aunque digan que el tiempo es oro, prefiero la paciencia, que es una virtud. Cuanto más aprendas, más te darás cuenta de lo que aún te queda por aprender.
  • ¿Cómo ves tu futuro? 
No lo veo :) No soy adivino ni clarividente, pero espero no perder nunca la curiosidad de conocer, saber, y cambiar en mí lo que sea un obstáculo para los demás.
  • ¿A quién admiras? y ¿a quién no?
Admiro a las personas que se entregan desinteresadamente, especialmente en favor de otros. No admiro a quienes quieren sacar tajada...
  • ¿Nos recomiendas algún libro en especial?
Pues si digo el Evangelio de Marcos quizás no lo toméis en serio, pero os lo recomiendo. El manual de Spectrum +2, ahi está mi base...
  • ¿Qué tipo de música te gusta?, ¿Podrías recomendarnos alguna canción?
Me gusta prácticamente todo, el pop rock en español, la música de los 80; pero me motiva bastante la música electrónica y el hardstyle. Por lo experimental en el momento en que se publicó y que siempre me ha parecido una genialidad: Un mundo separado por un mismo Dios, de Nacho Cano. Algo más actual, y que me ha parecido motivadora para los CTF : Kronos & Drone, "Level 2" 
  • ¿Qué opinas de CrackSLatinos y de su creador (Sr. Ricardo Narvaja)?
Me parece que ha hecho una labor de continuidad bastante positiva, y ha conseguido mantener una comunidad internacional unida por el mismo idioma. Del modo en que se hizo inicialmente prefiero no opinar. A Ricardo no lo conozco personalmente, ni tampoco he coincidido chateando con él como para tener una idea. Como persona no puedo opinar, pero por el hecho de haber estado ahí haciendo lo que ha hecho de modo altruista ya merece mi más sincero respeto.
  • ¿A quién te gustaría que hiciésemos la próxima entrevista?
A Uri o Xezaw.
  • ¿Hay algo que no te hayamos preguntado y que te gustaría decir?
crAck & prAy </mentiras>


Aquí termina la entrevista y no quiero finalizar sin dejaros algunos de los fabulosos trabajos con los que nos ha obsequiado Sergio:


Quiero dar las gracias a todos aquellos que han colaborado en la realización de esta interview, especialmente a C1b3r Pr13st! (@ciberpriest)

Nos vemos en la próxima!



jueves, 18 de diciembre de 2014

Leviathan Level 6 → Level 7


Vamos a por el último nivel de este WarGame y para ello hacemos una conexión SSH a:

- Host: leviathan.labs.overthewire.org 
- User: leviathan6
- Pass: UgaoFee4li


En este último nivel seguimos teniendo la misma información que la del nivel anterior, nada de nada.

Para empezar, vamos a ver como se comporta el ejecutable:



Está claro que el objetivo es buscar el 'digit code' que piden y para ello usaremos gdb para hacerle ingeniería inversa al binario e intentar obtener el código:



Básicamente se puede apreciar como lo que se hace es pasar a entero el código argumentado para después compararlo con el contenido de pila [ESP+0x1C] que es en donde está el código buscado y que en este caso es 7123.

Vamos a comprobar si estamos en lo cierto:










Perfecto! La password es: ahy7MaeBo9

Aunque ya no es necesario, voy a poner aquí la captura de los diagramas de bloques de este nivel, sobre todo porque conceptualmente es infinitamente mejor que el desensamblado de gdb: 





¡Otro WarGame terminado! Muy sencillo pero ideal para ir adquiriendo buenas costumbres.

No obstante, antes de terminar la entrada, veamos si con esta nueva credencial podemos hacer una conexión a leviathan7:



Pues parece que sí, aunque lamentablemente ya es tarde para obedecer ;)

Ahora sí que sí ... ¡Hasta el próximo WarGame!


Leviathan Level 5 → Level 6


Definitivamente, el grueso de estos niveles está en el uso y abuso del bit suid.

Como de costumbre, los datos de conexión son:

- Host: leviathan.labs.overthewire.org 
- User: leviathan5
- Pass: Tith4cokei

Y la misma información que la del nivel anterior nada de nada.

En este caso, tenemos un binario llamado levithan5 con el bit suid activo para leviathan6. Lo que éste hace a groso modo, es leer el contenido de un fichero /tmp/file.log, imprimir su contenido por pantalla y borrarlo después.

En la siguiente captura, se puede apreciar su comportamiento:




Aquí está claro que lo que hay que hacer es que file.log sea un enlace simbólico a /etc/levithan_pass/leviathan6 puesto que el binario tiene los permisos necesarios para leer su contenido:



Esto todo por el momento. ¡Hasta el próximo nivel!




miércoles, 17 de diciembre de 2014

Bandit Level 16 → Level 17



Continuamos con un nuevo nivel, el cual promete y mucho.


Como siempre, los datos de conexión son:

- Host: bandit.labs.overthewire.org 
- User: bandit16
- Pass: cluFn7wTiGryunymYOu4RcffSxQluehd

Los objetivos son claros:


Según la información que nos dan, este nivel es muy similar al anterior con la diferencias de que ahora nos dan un rango de puertos [31000, 32000]. Además nos dictaminan los pasos a seguir.

Por tanto, comenzamos por escanear el rango de puertos para determinar cuales de ellos está activos haciendo uso del comando 'nmap':


Observamos que existen cinco puertos con servicios habilitados, así que el siguiente paso será determinar cual de ellos usa SSL:



Ya sabemos que los puertos 31518 y 31790 utilizan SSL, Por prueba y error (solo son dos) determinamos cual de ellos y le enviamos la password actual:



Es fácil darse cuenta que lo que nos han dado es la clave privada con la que hacer una conexión SSH a bandit17, por tanto, la guardamos en un fichero para darle persistencia y así poder usarla posteriormente:



Ahora establecemos la conexión SSH:



Y obtenemos un error más que evidente. Los permisos que le dimos al fichero que almacena la clave son demasiado poco restrictivos, por tanto, modificamos los permisos y repetimos:



Ahora sí. Ya solo nos queda obtener la password:



Parece que nivel a nivel se va aumentando la motivación de estos y se van utilizando nuevas herramientas muy usadas en entornos reales.

Esto es todos por ahora. ¡Hasta el próximo nivel!



Leviathan Level 4 → Level 5


Parece que este WarGame va de bits suid. Vamos a ver que nos tiene preparado este nivel.

Como ya viene siendo habitual, los datos de conexión SSH son:

- Host: leviathan.labs.overthewire.org 
- User: leviathan4
- Pass: vuH0coox6m

Y la misma información que la del nivel anterior nada de nada.

Esta vez tenemos esto:



Muy sencillo este nivel. A simple vista se ve que nos estan dado el valor ASCII de cada letra en binario. Por tanto, hacemos la conversión y obtenemos la password:

01010100 = 0x54 = T
01101001 = 0x69 = i 
01110100 = 0x74 = t
01101000 = 0x68 = h
00110100 = 0x34 = 4
01100011 = 0x63 = c
01101111 = 0x6F = o
01101011 = 0x6B = k
01100101 = 0x65 = e
01101001 = 0x69 = i

00001010 = 0x0A = \n

El último carácter no hay que tenerlo en cuenta pues es el de 'nueva línea'.

¡Nos vemos en la próxima entrada!



Leviathan Level 3 → Level 4

Parece que este WarGame va de bits suid. Vamos a ver que nos tiene preparado este nive.

Como ya viene siendo habitual, los datos de conexión SSH son:

- Host: leviathan.labs.overthewire.org 
- User: leviathan3
- Pass: Ahdiemoo1j

Y la misma información que la del nivel anterior nada de nada.

Esta vez el fichero es este:



Ahora le hacemos un ltrace a ver que se cuece:



No nos dice demasiado. Nos pide un password y como no ha sido correcto nos muestra un mensaje de error.

Analicemos más en profundidad su diagrama de bloques:


Nos pide el password, y después invoca a la función do_stuff, la cual es:


De ella podemos asegurar que si el password es correcto, nos dará un shell con permisos elevados a leviathan3, en caso contrario mostrará un error como se ha visto anteriormente.

La comprobación del password se hace a través de la instrucción repe cmpsb, es decir byte a byte sobre los registros ESI, EDI y vemos rápidamente que la cadena que contiene el registro EDI es 'snlprintf\n'. Pero si nos fiamos en la captura del ltrace, el carácter de control '\n' lo añade la función _fgets.

Vamos a comprobarlo:


et voilà!

Ahora vamos a repetir el proceso, debido a que en la conexión remota no disponemos de IDA Pro para verlo tan eficientemente, pero si podremos llegar al mismo sitio usando gdb.

Cargamos el binario en el depurador:



Nos informamos de sobre que funciones tiene:


Y por último, desensamblamos la función do_stuff y mostramos el contenido que tendrá el registro EDI:



Y ahora es cuando viene lo mejor. Con un simple comando ¡podríamos habernos evitado todo esto! Pero los que me conocen saben que me gusta ir a las hojas para ver el bosque:



Esto es todo por ahora. ¡Hasta pronto!



Leviathan Level 2 → Level 3


Tengo que reconocer que aunque estos niveles son beginners, este en concreto me ha costado lo suyo hasta que vi como resolverlo.

Comenzamos pues y para ello, los datos de conexión son:
- Host: leviathan.labs.overthewire.org 
- User: leviathan2
- Pass: ougahZi8Ta

Y la misma información que la del nivel anterior nada de nada.

Nos encontramos con otro nivel en donde nos ofrecen un binario con el bit suid activado con permisos de propietario leviathan3.



Si nos fijamos un poco, lo que este binario hace es recibir el nombre de un fichero y hacerle un cat de su contenido. La primera comprobación que se hace es que se tengan permisos de lectura sobre el fichero argumentado y la segunda se ejecuta un comando cat sobre es fichero pero aquí está lo interesante, con elevación de permisos, debido al bit suid.

Pasamos un comando ltrace al binario, argumentándolo con cualquier fichero que tengamos permisos de lectura, para comprobar las suposiciones anteriores:




Con todo ello, estaría bien poder pasar como argumento el fichero que contiene la password buscada en /etc/leviathan_pass/leviathan3, sin embargo esto no es posible puesto que no tenemos permiso de lectura. 

Lo primero que uno piensa es que se podría hacer un enlace simbólico al fichero, pero seguiríamos sin tener permisos, por tanto, toca darle un poco más a la cabeza y entender que el foco de este retos está en esta función:

snprintf("/bin/cat /etc/leviathan_pass/lev"..., 
         511, 
         "/bin/cat %s", 
         "/etc/leviathan_pass/leviathan2")


especialmente en la parte que está agrandada y resaltada en negrita.

Haciendo una búsqueda en Google de 'problemas que existan con el carácter de control %s' pronto descubriremos que los espacios no sientan demasiado bien. hagamos una prueba:




Como se puede observar se gestiona bien el texto hasta que se encuentra un espacio, por tanto, para poder resolver este nivel

necesitamos crear dos ficheros, uno que será el enlace simbólico mencionado anteriormente y otro con el mismo nombre que el enlace, pero añadiéndole algún espacio. De esta manera, se pasará la primera comprobación que se hace referente a tener permisos de lectura, pues la función _access no formatea el nombre del fichero, después la función _snprintf formateará el nombre del fichero al nombre del enlace, pues se quedará con el texto que hay justo antes del primer espacio. De esta manera, al llegar al cat, este nos mostrará la password.

Veamos este proceso en la próxima captura: 





Espero que se entienda bien la idea. ¡Hasta el próximo nivel!