You are on page 1of 24

Johan Camilo López Girón

Oscar David Alba Valencia

Vulnerabilidades en Wordpress y códigos de baja calidad

Seminario de seguridad de la información

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.

● Como podemos observar en que archivo robots.txt se encuentra un archivo con


extensión .dic, que cual es un archivo interesante ya que es un diccionario y además nos
puede servir para más adelante ya que generalmente nos sirve para realizar un ataque por
fuerza bruta y vimos que existe una página de logueo de wordpress.
● Entonces como ya tenemos que diccionario descargado y una aplicación de Wordpress
instalada, vamos a proseguir a utilizar la aplicación wpscan la cual la cual busca
vulnerabilidades dentro de un wordpress, entonces en esta caso lo vamos a utilizar para
enumerar los usuarios que existen dentro de la aplicación wordpress para después utilizar
ataque por fuerza bruta para lograr acceder a este wordpress. Después de realizar este
nombramiento de usuarios, esta aplicación nos arroja que existe un usuario llamado
Elliot.

● Ahora después de obtener que usuario registrado, proseguimos a realizar un ataque de


fuerza bruta a la página de logueo de wordpress con que diccionario que descargamos en
un paso anterior y además con que usuario queliot, al ejecutar correctamente este
comando, encontramos exitosamente la contraseña de acceso para este usuario.

● Entonces ya como logramos tener acceso al Wordpress de la máquina virtual,


procedemos a crear un shell reverse con la herramienta metasploit para poder acceder
remotamente a la máquina virtual explotando que exploit que se generará y se subirá al
wordpress.
● Entonces ya al haber generado que exploit y haberlo subido correctamente al wordpress
procedemos a explotarlo con msfvenom para poder obtener acceso remoto al terminal de
la máquina virtual Mr Robot.

● Ya al tener acceso al terminal de la máquina virtual Mr Robot, procedemos a buscar


dentro de los archivos que estan creados en la máquina virtual y logramos encontrar la
segunda bandera, la cual contiene una cadena codificada con md5, al desencriptarla es
una cadena con las letras de la a a la z la cual seria la contraseña de acceso a la máquina
virtual y que usuario seria que directorio donde se encuentra la llave que se llama robot.
● Logramos tener acceso y vemos que mensaje de bienvenida de la máquina virtual.

● Entonces ya como estamos dentro de la máquina virtual, procedemos a buscar los


archivos que tienen permisos de administrador, en los cuales en alguno de estos está
contenida la tercera bandera que necesitamos obtener, al buscar estos archivos,
encontramos uno que se llama llave 3 de 3 y contiene la tercera bandera.
Reto #2
Hack the covfefe challenge
En este reto la idea es encontrar 3 banderas las cuales se encuentran dispersas en diferentes
archivos de la máquina virtual, dos banderas se encuentran sin necesidad de tener permisos root
y la última bandera si es necesario tener permisos root. En éste reto es necesario que las dos
máquinas virtuales, en éste caso Kali y Covfefe tengan configuración de red Host-only y que las
dos máquinas estén montadas sobre virtual box. En éste reto no es necesario aplicar ningún tipo
de inyección para obtener acceso a los datos o shell inverso, solo fue necesario conexión
mediante ssh a la máquina Covfefe.

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.

● Luego de esto vamos a encontrar la IP de la máquina virtual covfefe, por lo tanto


ejecutamos que comando netdiscover para encontrar cada una de las direcciones IP que
están en la red.

● 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.

● Al correr varios archivos, encontramos que en que archivo read_message al correrlo


desde la consola nos aparece un mensaje con una entrada de texto, entonces escribimos
un nombre al azar y éste nos arroja un error, dándonos a entender que que usuario que
probablemente debemos ingresar es Simon.
● Entonces al ingresar que usuario Simon, que programa nos lanza un mensaje en que cual
no dice que en que directorio principal está una copia del código fuente del programa,
esto para saber cómo funciona éste, y al final del mensaje se encuentra la frase Charlie
Root, por lo que se puede deducir que el archivo fuente del programa se encuentra en que
directorio root, por lo tanto nos dirigimos a está directorio y efectivamente se encuentra
que código fuente que cual es que siguiente y que cual en éste caso sería la segunda
bandera.

● 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 ver que la página que encontramos no nos da ninguna información, procedemos a


buscar los archivos, directorios o aplicaciones que estén instalados o se encuentren bajo
esta dirección ip, y además que tengan algún tipo de vulnerabilidad. En este caso se
encontraron una pagina la cual contiene usuarios y un login de una aplicación MySQL.

● 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.

● Como ya tenemos que reverse shell subido, procedemos a explotarlo mediante


msfvenom, herramienta de metasploit.
● Al tener ya acceso como root a la máquina virtual procedemos a encontrar cada uno de
los archivos con permisos root, al haber hecho esto encontramos que existe un archivo
interesante con nombre flag.txt, entonces procedemos a abrirlo con que comando cat y
nos muestra que siguiente mensaje.
Vulnerabilidades y mitigación
● La enumeración de aplicaciones web con vulnerabilidades habilitada en este caso para la
página web está habilitada, existen herramientas y documentación en internet las cuales
muestran cómo mitigar este tipo de vulnerabilidades.
● La aplicación web permite subir solo archivos de tipo imagen, pero al subir una imagen
no tenia ningun tipo de filtro para analizar si tenía algún tipo de código inyectado o si
enrealidad era una imagen la que se subía. En internet también existe este tipo de
documentación y guías para implementar programas o bots que analizen que archivo que
será subido a la página.
● Los metodos de encriptacion que utilizaban en la base de datos para encriptar las
contraseñas de los usuarios es muy débil, existen métodos o algoritmos de encripción
mucho más fuertes los cuales permiten que la contraseña no sea descifrada tan
fácilmente.
● Para la contraseña de acceso a la máquina virtual covfefe que fue encontrada muy
fácilmente por john the ripper, aplicar un control de dificultad de contraseña, ya que está
además de ser una contraseña solo de caracteres normales y en letras minúsculas es una
contraseña común, entonces para que control dejar claro que la contraseña debe contener
como mínimo un carácter especial, un número, una letra en mayúscula y debe tener una
longitud mayor a 8, con éste control se podrá asegurar que john the ripper, así sea con un
buen diccionario y buenas reglas, le tomará bastante tiempo encontrar la contraseña de
acceso.
● La máquina covfefe tiene habilitado que acceso por ssh y además éste acceso puede ser
mediante un usuario con privilegios root, por lo que si un atacante logra acceder
remotamente a la máquina, puede hacer lo que quiera en quela por los privilegios con los
que cuenta, por lo tanto, se debe aplicar un control al acceso por ssh, que éste control
tenga como condición que solo se puede acceder remotamente con usuarios con
privilegios básicos, o aún más estricto, que que acceso remoto sea desactivado y que éste
solo activado cuando que dueño de la máquina lo requiera.
Conclusiones
El desarrollo de este tipo de retos en el caso de nosotros como estudiantes de ingeniería de
sistemas que no conocemos o tenemos conocimientos básicos sobre el tema, es muy gratificante
ver cómo podemos llegar a resolver este tipo de retos y además, saber de qué manera se puede
explotar, encontrar y mitigar vulnerabilidades que se encuentran dentro de un sistema. Además
de esto, resolver estos retos también nos da otra perspectiva de cómo la información y
prácticamente lo que usamos de tecnología, está de una u otra manera expuesta o vulnerable a
que otras personas malintencionadas la quieran manipular o robar, entonces con esto aprendemos
de una u otra forma la mejor manera de mitigar o controlar este tipo de vulnerabilidades.
Una de las ventajas de realizar este tipo de retos, además de realizarlos con un tutorial o con un
paso a paso el cual nos guia o nos da algún tipo de pautas para continuar con el CTF,
desarrollamos una habilidad o algún tipo de patrón con el cual aprendemos de una u otra forma
por donde comenzar al momento de querer realizar algún tipo de reto o en ambiente empresarial
mitigar o encontrar una vulnerabilidad existente, entonces, en este caso, realizar y terminar todos
estos retos nos dio un poco de habilidad y de conocimiento sobre cómo realizar estos retos.
Bibliografía
Chris Sullo, David Lodge (2001). Nikto2.
https://cirt.net/Nikto2 [Consulta 21 de Octubre 2018]
Rapid7 (2015). Metasploit Framework.
https://metasploit.help.rapid7.com/docs [Consulta 21 de Octubre 2018]
Google. Información sobre los archivos robots.txt.
https://support.google.com/webmasters/answer/6062608?hl=es [ Consulta 5 de Noviembre 2018]
The Darker Raver (2014). DIRB Package description .
https://tools.kali.org/web-applications/dirb [Consulta 3 de Noviembre 2018]
Detección de servicios y de versiones.
https://nmap.org/man/es/man-version-detection.html [Consulta 3 de Noviembre 2018]
Introduction to GNU Wget.
https://www.gnu.org/software/wget/ [Consulta 3 de Noviembre 2018]
neokrates (2010). Chmod permissions (flags) explained: 600, 0600, 700, 777, 100 etc..
http://www.thinkplexx.com/learn/article/unix/command/chmod-permissions-flags-explained-
600-0600-700-777-100-etc [Consulta 3 de Noviembre 2018]
John the Ripper FAQ.
https://www.openwall.com/john/doc/FAQ.shtml [Consulta 3 de Noviembre 2018]
What does this command do (find / -name gcc 2>/dev/null)?.
https://askubuntu.com/questions/839864/what-does-this-command-do-find-name-gcc-2-dev-null
[Consulta 3 de Noviembre 2018]

You might also like