Validation
Última actualización
¿Te fue útil?
Última actualización
¿Te fue útil?
Validation
es una máquina que presenta una inyección SQL en su página web, la enumeración del usuario de la base de datos dispone de permisos FILE
. Mediante una webshell
se logra obtener acceso inicial al sistema. Para el usuarioroot
se aprovecha de la reutilización de contraseñas desde la base de datos.
Realizaremos un reconocimiento con nmap para ver los puertos que están expuestos en la máquina Validation. Este resultado lo almacenaremos en un archivo llamado allPorts
.
Lanzaremos scripts de reconocimiento sobre los puertos encontrados y lo exportaremos en formato oN y oX para posteriormente trabajar con ellos. En el resultado, comprobamos que se encuentran abiertas distintas páginas web de Nginx
.
Transformaremos el archivo generado targetedXML
para transformar el XML en un archivo HTML para posteriormente montar un servidor web y visualizarlo.
Realizaremos una comprobación de las tecnologías que utiliza el sitio web.
Realizamos una sencilla prueba de indicarle nuestro nombre gzzcoo
y darle a Join Now
.
En el resultado obtenido, verificamos que se nos muestra en la página web el nombre que le hemos indicado en el punto anterior. Esto nos llega a pensar de abrir la posibilidad de SSTI
, pero no logramos obtener el resultado esperado.
Capturamos la solicitud con BurpSuite
, para intentar realizar un Command Injection
. Probamos en ambas variables.
Pero la página nos devolvía el resultado como una cadena de texto, con lo cual no logramos en realizar el Command Injection
.
En el listado de países, se nos ocurrió que quizás la página web por detrás tenga una base de datos y opere a través de consultas SQL para proporcionarnos el nombre del país.
Probamos de realizar un SQLI
básico inyectando una comilla simple '
para verificar si en la respuesta del servidor web se nos mostraba algún tipo de información.
Al enviar la solicitud, en la respuesta del servidor se nos mostraba un error SQL
. Con lo cual, mediante esta información podemos finalmente determinar que por detrás operan consultas SQL. Este error no debería ser mostrado a los usuarios, ya que podrían proporcionar información extra a un atacante, como en este caso.
El primer paso será lograr determinar el número total de columnas de la base de datos, realizando la siguiente inyección SQL, finalmente comprobamos que se nos mostraba el valor 1
en la respuesta.
Revisaremos el usuario que disponemos actualmente a través de la siguiente consulta.
Revisamos el nombre de la base de datos que está utilizando la aplicación web.
Revisaremos la versión de base de datos que utiliza la aplicación web mediante la siguiente consulta.
Revisaremos si el usuario uhc
dispone de los permisos necesarios para leer archivos del sistema mediante la función LOAD_FILE
. Al realizar la prueba, logramos visualizar el contenido de /etc/passwd
.
En este punto, tenemos permisos para leer archivos arbitrarios. El siguiente paso será determinar si podemos llegar a escribir archivos mediante la función de INTO OUTFILE
. En este caso, intentamos crear un nuevo archivo gzzcoo.php
que contiene una webshell en la ruta /var/www/html/
para posteriormente tener acceso desde la misma página web.
Al ejecutar el siguiente SQLI, en la respuesta del servidor se nos indicaba un mensaje de error...
Igualmente trataremos de verificar si se ha llegado a subir correctamente la webshell. Logramos poder ejecutar el comando whoami
a través del archivo subido en la página web mediante SQLI.
El siguiente paso, será lograr obtener acceso al sistema remoto. Para ello, nos pondremos en escucha con nc
.
Ejecutaremos el siguiente comando a través de la webshell
subida para proporcionarnos la Reverse Shell.
Verificamos que hemos logrado el acceso al sistema y podemos visualizar la flag de user.txt.
Revisaremos si el usuario www-data
dispone de algún grupo interesante o de algún permiso de sudoers
, pero no logramos obtener el resultado esperado.
Realizando una enumeración del directorio/var/www/html
, logramos obtener el contenido del archivo config.php
el cual contenía de credenciales de la base de datos.
Probamos de verificar si estas credenciales se reutilizaban para el usuario root
y verificamos del acceso correctamente. Para finalizar, comprobamos la flag de root.txt.
A través de la herramienta de , la utilizaremos para extraer los puertos del archivo que nos generó el primer escaneo a través de Nmap
. Esta herramienta nos copiará en la clipboard los puertos encontrados.
Accederemos a y verificaremos el resultado en un formato más cómodo para su análisis.
Al acceder a comprobamos la siguiente página web, en la cual se nos proporciona un input username
, un listado de diferentes opciones de países y un botón de Join Now
.