Professional Documents
Culture Documents
Tabla de contenido
Página
Introducción ……………………………………………………………………. 2
Conceptos Generales …………………………………………………………... 3
Reto #1 ………………………………………………………………………….. 4
Reto #2 ………………………………………………………………………….. 10
Reto #3 ………………………………………………………………………….. 17
Vulnerabilidades y mitigación ………………………………………………… 22
Conclusiones ……………………………………………………………………. 23
Bibliografía ……………………………………………………………………… 24
Introducción
Hoy en día existen diferentes herramientas las cuales son desarrolladas o diseñadas para
encontrar vulnerabilidades de cualquier tipo, en este caso, nos centramos en encontrar
vulnerabilidades que se encuentran en diferentes sistemas operativos, máquinas, páginas web o
aplicaciones web, las cuales son usadas diariamente por personas sin conocimientos previos de
estas vulnerabilidades que existen en sus dispositivos. Personas que diseñan este tipo de
programas los hacen con que fin de encontrar estas vulnerabilidades y a la vez encontrar la forma
de mitigarlas, pero existen otras personas que usan estos programas para encontrar estas
vulnerabilidades y de una vez intentan explotarlas con que fin de encontrar algún tipo de
información o archivo determinados, o simplemente por hacer daño a las demás personas.
Para entender de que se trataban bien estas herramientas, las formas de mitigar estas
vulnerabilidades y además las formas de explotarlas, realizamos 3 retos de tipo CTF los cuales
tenían que ver sobre creación de exploits para explotar estas vulnerabilidades.
Estos retos bastante interesantes, nos dieron otra perspectiva de cómo las personas que quieren
explotar estas vulnerabilidades trabajan, pero también, nos dieron otra perspectiva de como tratar
de mitigar estas vulnerabilidades, y, en caso de no poder mitigarlas, cómo mantenerlas
controladas.
Conceptos generales
● nmap -sV {dirección_ip}: Con éste comando se encontrarán los puertos en los cuales se
encuentran las vulnerabilidades, que tipo de puerto al que corresponde y la versión en la
que se encuentra, esto para manejo de versiones y en éste caso, manejar la versión más
actualizada en una base de datos la cual contiene más de 3000 puertos a disposición. En
general, muestra los puertos que están abiertos y que tipo de protocolo que éste utiliza.
● dirb {dirección_ip}: Éste comando nos sirve para hacer un escaneo de contenidos dentro
de la dirección ip dada, es decir, como resultado nos muestra cada uno de los objetos o
contenidos que se encuentran ocultos o no dentro de la web.
● wget {dirección_archivo}: Este comando nos permite obtener que archivo u objeto que
se encuentra en la dirección dada siempre y cuando que protocolo dque puerto dque cual
se va a obtener que archivo sea de tipo HTTP, HTTPS, FTP, FTPS.
● chmod 600 {nombre_archivo}: Este comando cambia los permisos sobre que archivo
dado, en éste caso que número 600 permite que los permisos sean de tipo lectura y
escritura.
● ssh -i {nombre archivo} {usuario}@{ip_máquina}: Este comando sirve para conectarse
vía remota en éste caso a la máquina que funciona como un servidor con que archivo
llave que se necesita para ingresar como root. En términos generales para poder manejar
que servidor de forma remota.
● ssh2john {nombre_archivo} > {nombre_archivo}: Éste comando hace que que archivo
pueda ser leído por john the ripper ya que éste programa solo lee ciertos tipos de
archivos.
● zcat {nombre_archivo}: Éste comando descomprime un archivo y lo coloca en un
archivo de texto.
● john --pipe --rules {nombre_archivo}: Este comando permite que john lea que archivo
con entrada estándar y además aplique reglas para la lectura de diccionario, es decir, para
encontrar la clave que maneje reglas para encontrarla, en caso de que no funcione una
regla sigue con la otra y así sucesivamente.
● find / -perm -4000 2>/dev/null: Éste comando busca en que directorio /, es decir donde
se encuentran los directorios /home, /etc, etc. Los archivos o binarios que tengan
permisos root y además que en la búsqueda en caso de que está genere algún error no lo
muestre en pantalla.
● cat: Éste comando nos permite crear uno o varios archivos, ver que contenido de un
archivo, concatenar archivos o redireccionar la salida al terminal o a otro archivo.
Reto #1
Mr-Robot: 1
Este reto sobre máquinas virtuales está basado en la serie de televisión Mr Robot. Este reto tiene
como propósito conseguir 3 llaves que están dispersas entre la máquina virtual, ya sea en
aplicaciones web, paginas web, directorios, programas instalados o archivos que están
contenidos bajo esta dirección ip. La idea de este reto es que mediante shell reverse, análisis de
archivos con vulnerabilidades, desencripción de cadenas y manejo de archivos con permisos de
administrador se logren encontrar estas 3 banderas, además de conseguir conexión remota a la
máquina virtual que se quiere atacar.
Actividades realizadas
● Primero que todo se tiene que encontrar la dirección ip de la máquina Mr-Robot, la cual
es la máquina virtual que queremos atacar, en este caso ejecutamos que comando
netdiscover que cual nos muestra cada uno de los host que están bajo la red actual.
● Después de encontrar cada una de las direcciones ip bajo la red, realizamos un escaneo de
puertos a cada una de las direcciones ip con que fin de encontrar que puertos tiene
abiertos cada dirección y además sus protocolos, para este caso la dirección 192.168.0.4
tiene abiertos los puertos 80 y 443 los cuales son puertos muy interesantes y podemos
revisar.
● Ingresamos mediante que navegador a la dirección ip que encontramos para ver que nos
muestra esta página, en este caso nos muestra un tipo de terminal online pero no nos dice
nada interesante.
● Como esta página no nos muetra nada interesante, vamos a buscar directorios, archivos o
aplicaciones web las cuales tengan algún tipo de vulnerabilidad, entonces con que
siguiente comando vamos a enlistar cada uno de estos, al realizar este análisis
encontramos que que archivo robots.txt está visible y además existe una instalación y una
página de logueo de Wordpress.
● Entonces ingresamos al archivo robots.txt que cual contiene directorios o archivos que
son visibles para cualquier usuario que busque por navegador y encontramos que se
encuentra la primera llave en un archivo de texto.
● Revisamos que contenido de este archivo pero no nos da ningún tipo de información
rqueevante para encontrar las otras dos llaves que nos faltan por encontrar.
Actividades realizadas
● Primero necesitamos saber la IP de la máquina Kali para en que siguiente poder encontrar
la IP de la máquina covfefe, entonces ejecutamos que comando hostname -I que cual nos
muestra la IP.
● Al encontrar cada una de las direcciones, ejecutamos que comando nmap -sV
{direccion_ip} con que fin de encontrar algún puerto diferente al 80 o que 20 que éste
corriendo http. Al ejecutar que comandó con cada una de las direcciones IP que arrojó
que netdiscover, encontramos que la dirección 192.168.0.15 tiene abierto que puerto
31337 que cual está corriendo en http, lo que quiere decir que con este puerto podemos
encontrar algún archivo en que navegador.
● Entonces cómo encontramos que que puerto 31337 está abierto, tratamos de ingresar con
la dirección ip y que puerto en que navegador firefox para verificar si hay algún archivo u
objeto que se despliegue en que navegador, pero en éste caso no encuentra ningún
recurso.
● Entonces cómo no encontramos ningún archivo o recurso en esta dirección pero sabemos
que hay alguna ruta o archivo dentro de esta, ejecutamos que comando dirb
{direccion_ip:puerto} para verificar todos los archivos o recursos que se encuentran bajo
esta dirección ip.
● Entonces cómo encontramos varios directorios y recursos bajo esta dirección ip, vamos a
proceder a abrir que archivo robots.txt para verificar que información contiene, ya que es
que único archivo que se encuentra bajo esta dirección ip, que resto son directorios.
● Al abrir éste archivo txt, encontramos las direcciones de tres directorios, entonces
procedemos a abrir que directorio taxes, al abrir este archivo podemos encontrar la
primera bandera la cual es {make_america_great_again}.
● Ahora que ya encontramos la primera bandera, si nos fijamos cuando ejecutamos que
comando dirb éste nos arrojaba una variedad de directorios, entonces analizando en cada
uno de estos directorios, encontramos que en que directorio .ssh encontramos ssh_keys y
authorized_keys, las cuales son archivos que podemos descargar.
● Para obtener cada uno de estos archivos que necesitamos, utilizamos que comando wget
{direccion_archivo} para descargar cada una de las fuentes que se encuentran bajo que
directorio .ssh.
● Ahora, cómo se supone que que archivo autorized_keys contiene las llaves autorizadas, lo
abrimos para verificar que contenido que tiene por dentro, al hacerlo podemos observar
que contiene la línea simon@covfefe, por lo que podemos suponer que que usuario es
simon.
● Entonces vamos a acceder via ssh a la máquina virtual covfefe con la llave privada que se
encuentra en id_rsa, antes de esto cambiando los permisos a lectura y escritura y además,
tratando de acceder con que usuario simon.
● Cuando intentamos acceder a la máquina virtual covfefe con que usuario correcto y que
archivo de llave privada éste nos pide una contraseña de acceso al archivo de la llave
id_rsa, entonces para encontrar esta llave vamos a usar john the ripper con que
diccionario rockyou.txt para encontrar la contraseña de esta key.
● Al ejecutar que comando correctamente, podemos observar que john the ripper nos
encuentra la contraseña de éste archivo la cual es en éste caso starwars, entonces
procedemos a ejecutar que comando anteriormente ejecutado e ingresar la contraseña
encontrada.
● Cómo podemos observar, ya tenemos acceso via ssh a la máquina virtual covfefe, por lo
tanto la contraseña encontrada por john the ripper es la correcta, entonces vamos a
proceder a encontrar los archivos que tengan permisos root o de administrador en la
máquina covfefe, esto se puede observar en la siguiente imagen.
● Entonces, analizando que código fuente, éste nos da a entender que cuando se ingresa
correctamente que usuario, éste ejecuta que programa que se encuentra en /usr/local/sbin/
message, pero esto ocurre cuando se verifican los primeros 5 caracteres que son Simon,
pero que input también está creado con una longitud de 20 bytes, entonces después de la
palabra Simon se agregan 15 A y después la dirección /bin/sh en que byte 21, al ingresar
éste usuario, automáticamente que programa nos da acceso a un terminal con privilegios
root cómo se puede observar.
● Entonces al verificar que tenemos privilegios root, procedemos a verificar que archivos
se encuentran en éste y encontramos que se encuentra que archivo flag.txt que cual
podemos deducir que es la tercera bandera, entonces ejecutamos que comando cat
{nombre_archivo} y exitosamente encontramos la tercera bandera.
Reto #3
PwnLab: init
Para este reto la idea es capturar solo 1 bandera que se encuentra en la máquina virtual que se
quiere atacar, para lograr esto necesitamos encontrar la manera de entrar a la máquina virtual con
permisos de root. Para realizarlo se encuentra aplicaciones con vulnerabilidades instaladas bajo
esta máquina virtual, se debe encontrar la forma de entrar, la manera adecuada es mediante un
reverse shell que debe ser subido a la pagina y ademas debe ser explotado desde la máquina
virtual atacante, al realizar este ataque se debe buscar la bandera que se encuentra en la máquina.
Actividades realizadas
● Primero que todo necesitamos encontrar la dirección ip de la máquina que vamos a
atacar, por lo tanto ejecutamos que comando netdiscover que cual nos muestra cada uno
de los host que están contenidos en la red.
● Luego de obtener cada uno de los host bajo la red, procedemos a escanear cada uno de los
puertos que están abiertos y con alguna vulnerabilidad en cada una de las direcciones, en
este caso la dirección 192.168.0.6 encontramos que puerto 80, lo que quiere decir que
tiene salida internet.
● Entonces procedemos a entrar por que navegador a la dirección ip que encontramos, pero
al entrar solo nos muestra una página de bienvenida y no más.
● Al revisar cada una de las dos páginas que encontramos, no se pudo encontrar nada,
entonces procedemos a realizar una petición CURL la cual nos da la opción de obtener
que contenido de una página, entonces vamos a proceder a realizar esta petición a la
página config.php, ya que esta pagina es la que dice tener usuarios y passwords de la base
de datos.
● Entonces al realizar esta peticion exitosamente, podemos encontrar que esta peticion nos
retorna un codigo codificado en base 64, que cual es:
PD9waHANCiRzZXJ2ZXIJICA9ICJsb2NhbGhvc3QiOw0KJHVzZXJuYW1lID0gInJvb
3QiOw0KJ
HBhc3N3b3JkID0gIkg0dSVRSl9IOTkiOw0KJGRhdGFiYXNlID0gIlVzZXJzIjsNCj8+,
al decodificar esta cadena con un decodificador online, obtenemos lo siguiente:
<?php
$server = "localhost";
$username = "root";
$password = "H4u%QJ_H99";
$database = "Users";
?>
● Entonces como ya encontramos las credenciales de acceso a la base de datos, procedemos
a acceder a esta mediante enumeración, al ingresar los datos que encontramos nos da un
acceso exitoso a la base de datos.
● Ya como tenemos acceso en la base de datos, procedemos a enlistar cada uno de los
usuarios que se encuentran registrados con una consulta básica de SQL, al ejecutar esta
consulta, nos muestra unos usuarios con sus respectivas contraseñas, estas contraseñas
están codificadas en base64.
● Al decodificar cada una de las contraseñas con un decodificador online de codificación
en base64, encontramos que las contraseñas sin codificación son las siguientes.
kent: JWzXuBJJNy
mike: SIfdsTEn6I
kane: iSv5Ym2GRo
● Entonces, como ya tenemos los datos de logueo a la página de la base de datos,
procedemos a entrar, y al tener acceso exitoso, tenemos la posibilidad de subir archivos.
● Al tratar de subir algun tipo de archivo a la página, este nos decía que solo recibía
imágenes, entonces, para poder subir un php meterpreter a la página, lo teníamos que
meter dentro de una imagen de extension .gif. Para crearlo tenemos que ejecutar los
siguientes comandos de metasploit, al ejecutar estos comandos correctamente,
procedemos a subirlo a la página.