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 include
la cual manda llamar otro archivo llamado conexión.php
dentro 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]
0 Comentarios