Archivo de la categoría: Personal

Security Fest #CTF – Zion write up

Para este reto nos daban un archivo comprimido zion.tar.gz, procedemos a descomprimirlo y obtenemos otro archivo llamado YouKnow.

El archivo no tiene extension pero utilizamos el comando file para ver que tipo de archivo es.

Parece un archivo de Microsoft Word Office y sabemos que los archivos docx en realidad son archivos en formato zip.

Procedemos a descomprimir YouKnow

Obtenemos varios archivos y carpetas, comenzamos a analizarlos de uno por uno, sin embargo no encontramos nada que haga referencia a la bandera del reto. (analice la imagen del conejo con un par de herramientas de esteganografía pero no había nada)

Damos un paso atrás y abrimos el archivo YouKnow en un editor hexadecimal de su elección, you utilice Sublime

Observamos la cabecera estándar PK del formato ZIP

Al ir analizando el archivo, hacia el final, algo salta inmediatamente a la vista.

Parece que hay otro archivo Zip concatenado al primero pero los bytes están en orden inverso (observen como el archivo termina en KP, y vemos algunos strings como lmx que seria xml).

Podemos utilizar python para invertir los bytes del archivo fácilmente.

open('YouKnow_reversed','wb').write(open('YouKnow','rb').read()[::-1])

Obtenemos el archivo con los bytes invertidos y procedemos a descomprimirlo.

Obtenemos nuevamente varios archivos y carpetas.

Y en donde estaba la imagen anterior del conejo rojo ahora encontramos otra imagen, esta vez de un conejo azul que nos muestra la bandera del reto 🙂

La bandera del reto es sctf{m41nfr4m3_4cc3ss_c0d3_1337_4lw4s}

Bonus

Programe una pequeña herramienta en python llamada reverse bytes para invertir los bytes de un archivo utilizando una cli mas amigable.

usage: rbytes.py [-h] [-o OUTFILE] infile

A simple python script for reverse the bytes of a file.

Author: Lenin Alevski Huerta Arias
Year: 2018

positional arguments:
  infile                Input file

optional arguments:
  -h, --help            show this help message and exit
  -o OUTFILE, --outfile OUTFILE
                        Output file

Happy hacking 🙂

Security Fest #CTF – Excess write up (XSS)

Este año 2018, uno de mis principales propósitos fue tratar de participar en la mayor cantidad de CTFs posibles, son como pequeños acertijos que mantienen mi mente ágil en cuanto a la seguridad informática y siempre aprendo algo nuevo cada vez que los juego.

Existen muchos recursos en Internet pero uno de los mejores, y que he estado usando los últimos meses, es CTFtime. CTFtime es un portal que recopila información acerca de varios eventos Capture The Flag que ocurren alrededor del mundo, tanto eventos presenciales como online (puedes participar remotamente), ademas de eso es una gran fuente de aprendizaje ya que siempre puedes revisar las soluciones de los retos anteriores. Si desean ver los próximos eventos tienen una lista que pueden revisar en el siguiente link

Por mi parte estoy listo para participar en Viettel Mates CTF 2018 este fin de semana 🙂 y el 23 de junio en Google Capture The Flag 2018 (Quals)

Regresando a la idea principal de este articulo, el 31 de mayo participe en el Security Fest #CTF, no resolví tantos retos como me hubiera gustado pero si aprendi un par de cosas nuevas que les voy a compartir a continuación.

El CTF tenia tematica de The Matrix, kudos por eso!

Security Fest CTF Excess – Web Challenge

Excess fue uno de los primeros retos de la categoría web, en las instrucciones se nos daba un link a una pagina web y al entrar veíamos la siguiente pantalla.

Las instrucciones son bastante claras, tenemos que encontrar un XSS en el sitio y hacer que muestre un alert, después mandar la URL con nuestro payload y reclamar la bandera.

Vemos que la pagina tiene un parámetro llamado xss, inspeccionamos el código fuente del sitio web y vemos lo siguiente.

Observamos que el valor del parámetro xss es utilizado directamente por unas variables en Javascript y eso es bueno para nosotros, pues podemos inyectar código directamente sin preocuparnos por crear nuestras propias script tags.

Viendo el código anterior es claro que el sitio web es vulnerable y podemos mandar un payload como el siguiente para mostrar nuestro alert en Javascript.

En el parámetro xss enviamos:

/?xss=<strong>hello';alert(1);//</strong>

Y el código se va a inyectar de la siguiente forma:

...
..
<div class="container">
  <script>var x ='hello';alert(1);//; var y = `hello';alert(1);//; var z = "hello';alert(1);//;</script>
  <div class="row main">
       <div class="form-header header">
...
..

Nuestro payload se inyecta 3 veces, pero no importa puesto que después del primer // todo el resto del código quedara comentado. En el sitio web vemos la siguiente alerta.

¿Qué?, ¿Cómo?, ¿Cuándo? xd nosotros inyectamos un alert no un prompt, inspeccionando el código fuente del sitio mas a detalle y observamos que hay un script que se esta llamando antes de que inyectemos nuestro código.

<script src="/static/no_alert_for_you.js"></script><section class="login-info">

Al ver su contenido nos damos cuenta de que es el responsable de nuestros dolores de cabeza.

/*

        If there is no alert,
        	how can there be XSS?
                      /
                     /
            )            (
           /(   (\___/)  )\
          ( #)  \ ('')| ( #
           ||___c\  > '__||
           ||**** ),_/ **'|
     .__   |'* ___| |___*'|
      \_\  |' (    ~   ,)'|
       ((  |' /(.  '  .)\ |
        \\_|_/ <_ _____> \______________
         /   '-, \   / ,-'      ______  \
b'ger   /      (//   \\)     __/     /   \
                            './_____/

*/
window.alert = (x=>prompt("He confirm. He alert. But most of all he prompt."));

Este pequeño código esta sobrescribiendo la función nativa alert del objeto Window en nuestro contexto actual.

Es claro lo que debemos hacer, de alguna forma tenemos que devolver a Window.alert la función nativa original, existen muchas formas de resolver este reto pero mi razonamiento fue el siguiente.

Después de investigar un buen rato encontré varios artículos que describen esta técnica (override de funciones nativas) para mitigar ataques de XSS, sin embargo esto no soluciona el problema debido a la misma naturaleza del lenguaje Javascript, a continuación muestro como creando un elemento iframe, que tiene una instancia nueva y sin modificar del objeto Window, es posible ejecutar las funciones nativas originales.

var iframe = document.createElement('iframe'); // creamos un nuevo iframe
iframe.src = '';
iframe.style.display = 'none';
document.body.appendChild(iframe); // Es necesario agregarlo al documento para que su atributo contentWindow este definido
window.alert = iframe.contentWindow.alert; // Sobrescribimos la función alert de nuestro objeto Window actual con la función nativa original
alert(1); // Ejecutamos el alert original

Armamos nuestro payload y lo inyectamos en el parámetro xss.

/?xss=hello%27;var%20iframe=document.createElement(%27iframe%27);iframe.src=%27%27;iframe.style.display=%27none%27;document.body.appendChild(iframe);window.alert=iframe.contentWindow.alert;alert(1);//

Y veremos el alert original en la pantalla, enviamos la URL con nuestro payload y obtenemos la bandera de este reto.

Happy hacking 🙂

CTF OverTheWire: Natas5

Continuamos con la serie de tutoriales del CTF Natas, ahora toca el turno de natas5.

Natas Level 4 → Level 5
Username: natas5
URL:      http://natas5.natas.labs.overthewire.org

Utilizamos la bandera obtenida en el reto anterior y accedemos a la URL indicada en las instrucciones del reto, veremos una pantalla como la siguiente.

Acceso deshabilitado. No estas autenticado

Generalmente cuando te autenticas en un sitio web el servidor crea una sesión en memoria/base de datos/archivos/etc… y genera una cookie de sesión que es retornada al usuario, esta cookie puede ser incluida en las siguientes peticiones y de esta forma el servidor nos puede identificar mas rápido (HTTP stateless protocol).

Procedemos a revisar las cookies de la pagina web, si utilizas chrome lo puedes hacer desde la google developer toolbar en la pestaña de aplicación

Inmediatamente vemos que hay una cookie llamada loggedin con un valor de cero, lo cambiamos a uno (1) y refrescamos la pagina.

La bandera para acceder a natas6 es aGoY4q2Dc6MgDq4oL4YtoKtyAg9PeHa1

Al igual que en el reto anterior, esta pagina tiene una vulnerabilidad de broken access control puesto que es posible engañar al servidor con tan solo modificar el valor de la cookie loggedin

Happy hacking 🙂

CTF OverTheWire: Natas3

Continuamos con la serie de tutoriales del CTF Natas, ahora toca el turno de natas3.

Natas Level 2 → Level 3
Username: natas3
URL:      http://natas3.natas.labs.overthewire.org

Utilizamos la bandera obtenida en el reto anterior y accedemos a la URL indicada en las instrucciones del reto, veremos una pantalla como la siguiente.

Inspeccionamos el código fuente de la pagina.

Parece que se nos acabaron las pistas :S, revisamos el código fuente de la pagina pero no encontramos nada que sugiera cual es la bandera de este reto, también revisamos cada uno de los archivos js y css en busca de la solución pero no hay resultados. Cada detalle cuenta en este tipo de retos.

Recordando el reto anterior, la bandera se encontraba en un archivo llamado users.txt en http://natas2.natas.labs.overthewire.org/files/users.txt. La bandera de este reto podria estar en un archivo similar sin embargo no hay ningún directorio files, pero no descartamos la idea por completo, vamos a utilizar una herramienta llamada dirbuster para buscar otros archivos y directorios.

Dirbuster es un scanner de contenido web, la herramienta puede ser utilizada para encontrar archivos y directorios de forma automática utilizando diccionarios y fuerza bruta.

Dirbuster nos muestra un archivo interesante, http://natas3.natas.labs.overthewire.org/robots.txt vamos a esa URL y veremos lo siguiente

User-agent: *
Disallow: /s3cr3t/

Un archivo robots.txt es un archivo que se encuentra en la raíz de un sitio e indica a qué partes no quieres que accedan los rastreadores de los motores de búsqueda. El archivo utiliza el Estándar de exclusión de robots, que es un protocolo con un pequeño conjunto de comandos que se puede utilizar para indicar el acceso al sitio web por sección y por tipos específicos de rastreadores web (como los rastreadores móviles o los rastreadores de ordenador).

Claramente alguien no quiere que los buscadores indexen el directorio http://natas3.natas.labs.overthewire.org/s3cr3t/ :), vamos a esa URL a ver que encontramos.

Genial, otro archivo users.txt, revisamos su contenido.

natas4:Z9tkRkWmpt9Qr7XrR5jWRkgOU901swEZ

La bandera para acceder a natas4 es Z9tkRkWmpt9Qr7XrR5jWRkgOU901swEZ

Happy hacking 🙂

CTF OverTheWire: Natas2

Continuamos con la serie de tutoriales del CTF Natas, ahora toca el turno de natas2.

Natas Level 1 → Level 2
Username: natas2
URL:      http://natas2.natas.labs.overthewire.org

Al igual que en los artículos anteriores, utilizamos la bandera obtenida en el reto anterior y accedemos a la URL indicada en las instrucciones del reto, veremos una pantalla como la siguiente.

Repetimos lo que nos ha funcionado hasta ahora e inspeccionamos el código fuente de la pagina.

Efectivamente no vemos nada que haga referencia al password / bandera para acceder a natas3, sin embargo algo nos llama la atención, hay una imagen png de un pixel en el documento, eso es algo nuevo.

La imagen por si misma no es nada especial, http://natas2.natas.labs.overthewire.org/files/pixel.png, pero la ruta donde esta alojada si 🙂 así que visitamos la URL http://natas2.natas.labs.overthewire.org/files/ y voilà.

Debido a una mala configuración del servidor es posible listar los archivos de directorios que no contengan un index o pagina principal: index.html, index.php, index.jsp, etc. Esta es una vulnerabilidad de revelación de información llamada Directory Listing.

Dentro de users.txt encontraremos una lista de usuarios y contraseñas, entre ellos la bandera para acceder al siguiente reto

# username:password
alice:BYNdCesZqW
bob:jw2ueICLvT
charlie:G5vCxkVV3m
natas3:sJIJNW6ucpu6HPZ1ZAchaDtwd7oGrD14
eve:zo4mJWyNj2
mallory:9urtcpzBmH

La bandera para acceder a natas3 es sJIJNW6ucpu6HPZ1ZAchaDtwd7oGrD14

Happy hacking 🙂