comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

HTML injection (Ataque y Defensa) [Practico]

  • 0 Respuestas
  • 1665 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado 2Fac3R

  • *
  • Underc0der
  • Mensajes: 235
  • Actividad:
    5%
  • Reputación 0
  • Why be a king, when you can be a god
    • Ver Perfil
    • Escuela de Hackers & Programación
  • Skype: rockeg_18
  • Twitter: @2Fac3R
« en: Noviembre 03, 2011, 07:43:21 pm »
Bienvenidos a este nuevo tutorial, soy 2Fac3R y en este tutorial se mostrara informacion sobre el bug HTML injection.

CONOCIMIENTOS BASICOS:

- Saber montar un servidor local de pruebas
- Conocer lo basico de HTML, PHP y MySQL


¿En que consiste el HTMLi?

El fallo consiste en la inyecciòn de codigo HTML en una web, el fallo se da cuando un webmaster pide al usuario que ingrese
algun valor, y el usuario (atacante) inyecta codigo malicioso (HTML injection) lo cual hace que ese codigo sea mostrado en
el website del webmaster.


Vamos a crear un ejemplo de codigo que se ejecuta pidiendole al usuario:

Código: PHP
  1. <html>
  2. <head>
  3. <title> HTMLi Tester By 2Fac3R </title>
  4. <body bgcolor="black" text="green" link="white">
  5. <?php
  6. //Se recibe la llamada por $_GET
  7. $inj = $_GET['inj'];
  8. //Sí la variable contiene algo, muestra el contenido
  9. if(You are not allowed to view links. Register or Login($inj))
  10. {
  11. echo $inj;
  12. }else{
  13. //Sino Nos da un link que nos direcciona a donde ponemos la inyeccion (el sitio de el GET por URL)
  14. echo '<a href="http://127.0.0.1/htmli.php?inj=">Inyectar!</a>';
  15. }
  16. ?>
  17. </body>
  18. </html>
  19.  
Como vemos, si inyectamos codigo cualquiera el navegador lo ejecutara y mostrara nuestro mensaje, vamos a la pagina, en mi
caso lo hago desde localhost asi que queda asi:

You are not allowed to view links. Register or Login

Al ejecutarlo nos aparece la imagen con el link de "inyectar!" que hemos puesto en el "else".

Vamos y nos da un :

You are not allowed to view links. Register or Login


INYECTANDO CODIGO:


¿Como sabemos si la web es vulnerable?, lo que hay que hacer es probar codigo HTML para ver si se ejecuta, por lo tanto si
ponemos:

You are not allowed to view links. Register or Login<h1>2Fac3R

Nos saltaria "2Fac3R" en un encabezado (<h1>), con esto nos damos cuenta que lo que pongamos en la variable "inj" en la URL
($_GET) no lo ejecutaria el navegador...


JUGANDO CON LAS INYECCIONES:

Como sabemos, para jugar con las inyecciones y entretenernos un rato, podemos hacer uso de diferentes tipos de etiquetas
dependiendo el dominio que tengamos sobre HTML, por ejemplo:


You are not allowed to view links. Register or Login<b>0wn3dD By 2Fac3R<p>Este es un defacement<br>por HTMLi

You are not allowed to view links. Register or Login<s>0wn3dD</s> By <h1>2Fac3R</h1>Este es un defacement<br><font color="RED">por HTMLi</font>

You are not allowed to view links. Register or Login<font size ="10" color="red"><marquee>0wn3DD By 2Fac3R</marquee></font>

Y asi dependiendo de la imaginación de cada quien ;)

Pero en este caso hay algo que no nos gusta, los codigos solo los veremos nosotros en nuestro navegador, ya que no se esta
ejecutando del lado del servidor, asi que no seria muy util para hacer algo serio, a menos que usaramos ing. Social para
que alguien mas (web-admin) lo ejecute (por lo regular seria un XSS, para robar cookies) y asi hacernos de algo o
simplemente que vea nuestra hermosa inyeccion xDD.


GUESTBOOK´S, Y APLICACIONES VULNERABLES:

En muchos sitios encontramos con los famosos "libros de visitas" el cual tiene la finalidad de que el usuario comente sobre
la web, ponga sus experiencias, criticas, opiniones, etc. Es aqui donde se utiliza mas el HTMLi, el usuario puede agregar
lo que quiera y por lo tanto ese mensaje quedara guardado en la base de datos del website para despues mostrarse, y asi es
como tendriamos oportunidad de injectar codigo y que se ejecute en el navegador de los usuarios cuando visiten esa
aplicación

Nota: No solo con libros de visitas podemos injectar codigo, sino con cualquier aplicación web que no filtre esos datos y
que los muestre despues.


En el ejemplo que hemos visto, mostramos la forma por $_GET ya que es mas comodo inyectar mediante la URL, ahora veamos un
codigo de ejemplo por POST, el cual funciona por un Formulario:

Código: PHP
  1. <html>
  2. <head>
  3. <title> HTMLi Tester ($_POST)</title>
  4. <body bgcolor="black" text="green">
  5. <?php
  6. $snd = $_POST['send'];
  7. $it = $_POST['inj'];
  8. if(You are not allowed to view links. Register or Login($snd))
  9. {
  10.  //Mostramos en pantalla el contenido que viene del Formulario
  11.  echo $it;
  12. }else{
  13. echo '
  14. <form action="" method="POST">
  15. <input type="text" name="inj">
  16. <input type="submit" name="send" value="Inyectar!">
  17. </form>
  18. ';
  19. }
  20. ?>
  21. </body>
  22. </html>

Nos damos cuenta que realmente es lo mismo, solo que inyectamos el codigo mediante un formulario y por $_POST, asi que para
que sea realmente vulnerable y util, ya que este tutorial pretende ser muy practico y con muchos ejemplos, veamos un codigo
de un Guestbook codeado por mi usando HTML, PHP y MySQL, logicamente no contiene la seguridad que deberia:

guestbook.php

Código: PHP
  1. <?php
  2. $serv = "localhost";
  3. $user = "root";
  4. $pass = "root";
  5. $db = "prueba";
  6. if(You are not allowed to view links. Register or Login($_POST['send']))
  7. {
  8.  $conexion=You are not allowed to view links. Register or Login($serv,$user,$pass);
  9.  You are not allowed to view links. Register or Login($db,$conexion) or You are not allowed to view links. Register or Login ("Error en la seleccion de la bd".You are not allowed to view links. Register or Login());
  10.  You are not allowed to view links. Register or Login("INSERT INTO comentarios(Autor,Titulo,Mensaje)
  11.              VALUES ('".$_REQUEST['Autor']."','".$_REQUEST['Titulo']."','".$_REQUEST['Mensaje']."')", $conexion)
  12.                            or You are not allowed to view links. Register or Login ("Error en la query".You are not allowed to view links. Register or Login());
  13.  You are not allowed to view links. Register or Login($conexion);
  14.  echo "Se ha publicado correctamente";
  15.    }else{
  16.         echo '
  17. <form action="" method="POST">
  18. <b> Autor: <input type="text" name="Autor"> <br>
  19. Titulo: <input type="text" name="Titulo"> <br> <br>
  20. Mensaje: </b><br><TEXTAREA name="Mensaje" cols="100" rows="10"> </TEXTAREA> <br>
  21. <input type="submit" name="send" value="Publicar!">
  22. </form>
  23. ';
  24. }
  25.  
  26. ?>

Logicamente no se explicara el codigo (se supone que ya lo entiendes xD), veamos el codigo que ha creado el webmaster del
sitio para ver el contenido de lo que se publica, logicamente lo puede ver desde la bd pero por X razon existe el code:

Código: PHP
  1. <?php
  2. # Reemplazar por tus datos:
  3. $serv = "localhost";
  4. $user = "root";
  5. $pass = "root";
  6. $db = "prueba";
  7. #...............................
  8. $conexion=You are not allowed to view links. Register or Login($serv, $user, $pass) or You are not allowed to view links. Register or Login("Problemas en la conexion");
  9. # Se selecciona la bd
  10. You are not allowed to view links. Register or Login($db,$conexion) or You are not allowed to view links. Register or Login("Problemas en la selección de la base de datos");
  11. # Se seleccionan las columnas a trabajar
  12. $comments=You are not allowed to view links. Register or Login("SELECT * FROM comentarios",$conexion) or You are not allowed to view links. Register or Login("Problemas en el select:".You are not allowed to view links. Register or Login());
  13. # Se mete en la variable la llamada a la sql anterior  
  14. # Se crea un bucle a trabajar en cada vuelta de datos que encuentre                                
  15. while ($dat=You are not allowed to view links. Register or Login($comments))
  16. {
  17.   echo "<b> Autor :</b>".$dat['Autor']."<br>";
  18.   echo "<b> Titulo : </b>".$dat['Titulo']."<br>";
  19.   echo "<b> Mensaje : </b>".$dat['Mensaje']."<br>";
  20.   echo "---------------------------------------------<br>";
  21. }
  22. # Cerramos la conexion...
  23. You are not allowed to view links. Register or Login($conexion);
  24. ?>
  25.  


Ahi comente el codigo (por si no se entiende del todo), con esto vemos que imprime directamente el contenido de la bd, por
lo tanto si nosotros metieramos codigo malicioso, nos lo mostraria en pantalla sin ningun filtro, con esto podriamos hacer
un HTMLi o incluso un XSS.


SECURIZANDO NUESTRO WEBSITE:

Todo esto puede ser muy lindo, el estar dandole dolores de cabeza al webmaster, pero que pasaria si nos lo hacen a nosotros
no seria muy bonito ahora. Veamos como hacer que nuestro sitio no nos hagan estas inyecciones de codigo (HTML, XSS...)

Opciones:

strip_tags() = Elimina las etiquetas
ejemplo:

<h1>0wnN3D</h1> Nos daria: 0wnN3D (simplemente)

Código: PHP
  1. <html>
  2. <head>
  3. <title> HTMLi Tester By 2Fac3R (parcheado) </title>
  4. <body bgcolor="black" text="green" link="white">
  5. <?php
  6. $inj = $_GET['inj'];
  7. if(You are not allowed to view links. Register or Login($inj))
  8. {
  9. echo You are not allowed to view links. Register or Login($inj);
  10. }else{
  11. echo '<a href="http://127.0.0.1/htmli.php?inj=">Inyectar!</a>';
  12. }
  13. ?>
  14. </body>
  15. </html>
  16.  

htmlentities() = Obtiene las etiquetas de la inyeccion pero no las ejecuta
ejemplo:
<h1>0wnN3D</h1> Nos daria: <h1>0wnN3D</h1> (pero no ejecutaria el codigo)

Código: PHP
  1. <html>
  2. <head>
  3. <title> HTMLi Tester By 2Fac3R (parcheado) </title>
  4. <body bgcolor="black" text="green" link="white">
  5. <?php
  6. $inj = $_GET['inj'];
  7. if(You are not allowed to view links. Register or Login($inj))
  8. {
  9. echo You are not allowed to view links. Register or Login($inj)
  10. }else{
  11. echo '<a href="http://127.0.0.1/htmli.php?inj=">Inyectar!</a>';
  12. }
  13. ?>
  14. </body>
  15. </html>
  16.  
La opcion que ustedes eligan pues ya depende del caso.
Creo que el contenido del manual se ha explicado correctamente, por lo tanto creo que aqui termina.
Recuerda que esto es para practicar en casa y APRENDER, no para dañar a cada website que te encuentres vulnerable.

COPYRIGHT:

It has Written By 2Fac3R FOR You are not allowed to view links. Register or Login IN elhacker.net

#####################################
##                                                                          ##
# Destribución libre, respetando el autor y dedicatoria.  #
##                                                                           ##
######################################
Escuela de Hackers & Programación.
You are not allowed to view links. Register or Login

 

¿Te gustó el post? COMPARTILO!



vBulletin 5.0.0 Beta 11 - 5.0.0 Beta 28 - SQL Injection

Iniciado por morodog

Respuestas: 1
Vistas: 1714
Último mensaje Junio 09, 2013, 12:05:31 pm
por ANTRAX
SQL Injection - Joomla módulo "com_fireboard"

Iniciado por M5f3r0

Respuestas: 0
Vistas: 1569
Último mensaje Agosto 16, 2013, 01:43:18 am
por M5f3r0
[Curso] SQL Injection desde 0 - Union based y Blind Boolean Based.

Iniciado por M5f3r0

Respuestas: 8
Vistas: 8217
Último mensaje Abril 21, 2017, 04:36:34 am
por M5f3r0
Mysql injection avanzada: "doble query/error based"

Iniciado por q3rv0

Respuestas: 2
Vistas: 2281
Último mensaje Agosto 30, 2012, 04:26:01 am
por andrewtwo
Ataque de diccionario cracking CMS Wordpress/Joomla Backtrack5r2 (Hacking/Deface

Iniciado por andrewtwo

Respuestas: 0
Vistas: 1779
Último mensaje Septiembre 02, 2012, 02:12:40 am
por andrewtwo