ATAQUES DE INYECCION DE ARCHIVOS | SEGURIDAD OFENSIVA - WEB
Los ataques de inyección de archivos, consisten en poder cargar o subir un archivo a una aplicación web, de forma desautorizada, el cual pueda comprometer en su totalidad la aplicación web. Este tipo de ataques tienen diferentes finalidades o consecuencias, como el defacement el cual consiste en modificar el aspecto de una aplicación web, o re-direccionar al usuario a otro sitio, con el mismo fin.
Tenemos también la carga de WebShell´s para poder tener total control de la aplicación.
Los ataques más comunes o presentes de estas Ãndoles son:
- Remote File Inclusion
- Local File Inclusion
- WebTrojans
REMOTE FILE INCLUSION (RFI)
Este tipo de vulnerabilidades consiste en poder ejecutar código remoto dentro de la aplicación, por medio de un archivo el cual, nosotros cargamos remotamente. Esto se debe gracias a los lenguajes interpretados, donde podemos incluir un archivo a la ejecución del código, entonces cuando se esté ejecutante el código, se ejecutara el código malicioso cargado en un archivo remoto.
Por ejemplo, tenemos este ejemplo, de una página programada con PHP:
www.sitio.com/ejecutar.php?id=malicioso.php
Como podemos ver en el ejemplo anterior el archivo ejecutar.php hará uso de alguna función que permita la inclusión dinámica de otros archivos, que en este caso es malicioso.php el cual contiene código malicioso. PHP hace uso de funciones las cuales permiten hacer uso de archivos externos o remotos para generar páginas más complejas, nosotros nos podemos aprovechar de estas funciones para poder cargar un archivo con código malicioso.
Estas funciones pueden ser:
- Include
- Require
- Include_once
- Requiere_once
Estas funciones hacen uso de un parámetro, el cual indica la ruta del archivo, con el cual trabajar. Si este parámetro no está bien “configurado” o controlado, podemos aprovecharnos de el para incluir un archivo externo que se puede ejecutar en el lado del servidor, incluso descargarse.
Por ejemplo tenemos el siguiente código PHP
<?php
include'conexion.php';
$password=$_GET['password'];
$matricula=$_GET['matricula'];
$modificar = "UPDATE asistentes SET pass='$password' WHERE Matricula='$matricula'";
$resultado=mysqli_query($conexion, $modificar);
if(!$resultado){
echo 'ERROR AL REGISTRAR';
echo $resultado;
}else{
echo "REGISTRO EXITOSO";
}
mysqli_close($conexion);
?>
Como podemos ver, al inicio del código tenemos la función includela cual manda llamar otro archivo llamado conexión.phpdentro del archivo tenemos este código:
<?php
//archivo de conexion a la base de datos.
$conexion=mysqli_connect("localhost","root","passchidaAdmin23",
"ponencias_taller");
/*if(!$conexion){
echo 'Error al conectar con las Base de Datos';
}else{
echo 'Conexion exitosa con la Base de Datos';
}*/
?>
Un archivo tiene la función de actualizar, pero para eso requiere una conexión a la base de datos, para eso manda llamar al archivo conexión.php el cual contiene el código necesario para poder acceder al servidor.
Ahora, que pasarÃa si tenemos esto:
En este ejemplo, la página sitio.com solicita a sitiomalo.com el archivo c99.txt el cual contiene código php, que descargara y ejecutara en el lado del servidor y c99 es una webshell, es decir, cargamos una webshell al servidor.
Esta vulnerabilidad se da por dos motivos, el primero es que tenemos código PHP con funciones las cuales nos permiten mandar llamar archivos externos o remotos y la segunda es por una mala configuración del servidor PHP, el cual permite la inclusión de archivos externos. Lo correcto serÃa configurar el servidor para que este prohÃba este tipo de acciones.
Para realizar esta configuración, lo que podemos hacer es ir al intérprete de PHP y buscar el archivo php.ini y establecer la clave de configuración allow_url_include a false.
LOCAL FILE INCLUSION (LFI)
Este tipo de vulnerabilidad afecta a los lenguajes compilados como interpretados, consiste en incluir dentro de la página un archivo local del usuario, con el que se ejecuta el servidor de aplicaciones web que tenga permisos de lectura. Este tipo de vulnerabilidad afecta a cualquier parte de la aplicación web, sin embargo existen dos sitios donde está más presente:
- · Páginas de Plantillas
- · Páginas de Descargas
RFI y LFI son dos vulnerabilidades muy similares, es decir el concepto tras ambos fallos es el mismo. Para explotar la vulnerabilidad LFI deberÃamos ser capaces de consultar archivos fuera de la ruta orginal, para esto tratarÃamos de incluir archivos de un directorio superior (también inferior) usando caracteres especiales ya sea para sistemas Windows o Linux.
Estos caracteres especiales son:
- ../ (Linux)
- ..\ (Windows)
Estos caracteres especiales más el nombre de un archivo que creamos exista en el servidor, puede ser por ejemplo un index ya sea en html o php
Ejemplo:
www.sito.com/banco/reportes.php?id_reporte=666&tipo=enero.php
Tenemos un sitio, o banco, el cual tiene una seccion llamda banco, al cual le hicieron una consulta, al archivo reportes.php el cual aparte de traer la información de una DB utiliza el archivo enero.php el cual puede ser una plantilla.
Para realizar la prueba y verificar si el sitio es vulnerable a LFI debemos hacer lo siguiente:
www.sito.com/banco/reportes.php?id_reporte=666&tipo=../index.php
Este tipo de vulnerabilidad nos da mucha información sobre el servidor, algo que podemos agregar extra, es que podemos aprovecharnos de un fallo de Path Disclosure, para obtener la ruta donde se ubican los archivos o probamos con rutas directas.
Existen una gran cantidad de archivos con información muy interesante, desde la configuración del servidor, hasta listas de usuarios con credenciales de acceso al sistema, sin embargo algo a tener en cuenta, es que las rutas de los archivos varÃan dependiendo del sistema operativo, por ejemplo en sistemas Linux tenemos la ruta /etc/passwd/ donde se almacena información de los usuarios mientras que en Windows tenemos C:\Windows\repair\SAM donde SAM es el archivo donde se almacena información de los usuarios.
Ruta | Sistema Operativo | Contenido |
C:\Windows\repair\SAM | Windows | Archivo SAM, que almacena información de los usuarios |
/etc/passwd/ | Linux | Información de los usuarios |
Para evitar este tipo de vulnerabilidad es muy importante que el servidor tenga tenga el minimo de privilegios, con el fin de evitar que atacantes tengan acceso a los archivos del servidor dentro de su propia carpeta, es decir denegar el acceso a los archivos del sistema, sin embargo se tendrá aun acceso a archivos de la aplicación web.
Algunos WebMasters y pentesters a quienes consulte, sobre el tema, me dijeron que se puede evitar la vulnerabilidad configurando el servidor o una protección mediante programación, para esto se tiene en cuenta las dos formas con las que se pueden acceder a los archivos; la forma directa que todos conocemos usando los caracteres \ o / y la forma relativa para subir o escalar directorios ..\ o ../. basta con configurar
WEBTROJANS
Un fallo el cual esta presenta en casi todas las aplicaciones web que nos permiten subir archivos al servidor, pues una gran cantidad de sitios tienen como función principal cargar archivos como imágenes(jpg, png, gif) documentos(pdf, doc, txt) videos(mp4) entre otros archivos.
Este fallo de seguridad aprovecha esta carga de archivos, donde no se comprueba en su totalidad que tipo de archivos se esta subiendo, es decir, si vamos a esperar una imagen, comprobar que la extensión sea jpg y no php, por poner un ejemplo.
Los archivos conocidos como Webtrojan son archivos maliciosos del tipo troyano, un archivo que en apariencia parece una imagen, pero que realmente esta escondiendo condigo que al ser subido se ejecutara comprometiendo todo el servidor.
Si no se tiene en cuenta este aspecto, un usuario podria cargar un archivo que simula ser una imagen, incluso con extensión jpg, pero al momento de ser almacenada en el servidor termina siendo una webshell. Estas Shell son detectadas por los antivirus, sin embargo como ya lo he mencionado se pueden ser camufladas, con el fin de burlar los antivirus.
Una de las tantas formas de hacer esto, es incluirlo tras una cabecera de una imagen, donde algunos servidores son capaces de ejecutar el código.
En la imagen superior podemos observar código PHP oculto en una imagen GIF, este código PHP permite crear una backdoor o puerta trasera para posteriormente subir archivos, esto es un ejemplo de un webtrojan.
Post:[byt3 - redbirdTEAM]
No hay comentarios.:
Publicar un comentario