Me lo contaron y lo olvidé, lo leí y lo entendí, lo hice y lo aprendí.





domingo, 8 de enero de 2012

Inyección HTML

HTML Injection

La inyección de HTML es una de las técnicas de Defacing, consiste en inyectar, mediante un formulario, código html con el fin de que se ejecute y se produsca un efecto "anormal" en la página.

Debe quedar claro que cualquier técnica de Defacing es una falta de ética, ningún webmaster merece que su sitio web sea modificado; además de que en varios países se considera un acto ilegal.

Existen un par de formas para lograr inyectar código html en una página, la que mejor manejo y conosco consiste en insertar un texto, en un campo de formulario, que modifique el código fuente de la página.
Para ello, el texto que se inserta en el campo (como puede ser un text) debe mostrarse tal cual en cualquier parte de la página. Esto ocurre en comentarios de blogs, tagboards, libros de visitas y demás, sitios en donde el texto que introduces se guarda en una Base de Datos y de ésta se extrae y muestra en la página para todos los usuarios que visiten el sitio.
Los programadores Web suelen desactivar el html en sus formularios, poner filtros, limpiar el código y cualquier cosa para evitar que sean defaceados; aún así se puede comprobar si la página es vulnerable; un método es introducir esto <> en todos los campos y se envían, en un caso normal estos símbolos no se visualizarán en pantalla pero si buscamos en el código fuente los campos que introducimos tendríamos que ver los "<>" en los valores vulnerables.
Un método más infalible es la simple práctica, enviar la inyección y ver si funciona o no.

Les pondré un ejemplo de un blog que, para el ejemplo, se hiso vulnerable. A mi me gusta usar el navegador Chrome por que permite inspeccionar el código HTML de cada objeto de la página. Podemos observar que el blog tiene un sistema de registro (simple) de usuarios y que el nick del usuario logeado se muestra normalmente:


En la imagen en nick "legender" se encuentra entre las etiquetas <font>y</font>. Entonces para hacer una inyección efectiva se realiza cerrando las etiquetas en las cuales se encuentra este valor.
Como los nicks se guardan en la Base de Datos, necesitamos registrar un nick tal que cierre la etiqueta e introdusca el código html que queramos, por ejemplo:



Aquí nuestro "nick" sería "fuckencio" y cerramos la etiqueta </font>, después hacemos una simple inyección de <h1>Hacked</h1> que insertará un titular cuando nos logeemos con éste nick.
Entonces registramos en nuevo usuario:



El usuario se registró ya en la B.D. Si notamos, el formulario nos arroja un warning debido a la sintaxis, ésto no obligatoriamente ocurre solo en ciertos casos.
Nos logeamos con el nuevo usuario, utilizando obviamente el nick completo con el código a insertar, recordemos que todo éste código llegó tal cual a la BD por lo que ese es nuestro nick completo:



Y como ven la página nos muestra como si nuestro nick fuera "fuckencio", pero debido a la inyección html nos muestra el titular "Hacked", lo cual no provoca realmente nada dañino pero muestra la efectividad de la inyección.


Ahora, poniéndonos en el lado del Webmaster, se debe saber el método para evitar éstas inyecciones; los métodos son muy sencillos debido a que existen ya funciones para éste tema. La primera es strip_tags("código a filtrar") ; lo que hace la función es eliminar las etiquetas html introducidas, o sea que si se introduce "<h1>hola</h1>" al pasar por esa función resultaría "hola".
La segunda función es htmlentities("código a filtrar") que lo que hace es mostrar el html como texto plano y el navegador no lo ejecutará; o sea que si se introduce "<h1>hola</h1>" se mostraría tal cual en el navegador "<h1>hola</h1>".

Esto es todo.
Me despido y recuerden: Ante todo la ¡ÉTICA!

2 comentarios: