lunes, 11 de junio de 2007

¡ Infomed !

Alien [blackhat4all@gmail.com]

Antes que nada quisiera pedir disculpas si ven algo de informalidad en este artículo, pero fue escrito en una de esas madrugadas en que mi cuerpo y mi mente, más que a mí, pertenecían a la nicotina y al café.

Sucede que estando yo en lo que considero “red de redes” de Cuba, se me ocurrió entrar a una página a la cual, por supuesto, no debería haber entrado. Era una página de esas de las que requiere una contraseña para poder tener acceso a la misma. Sin otra cosa que hacer que perder el tiempo, me dediqué a estudiar ese tipo de páginas, ver como era su funcionamiento por dentro, su estructura, etc. Desde ese momento me conecté a la página de Infomed que permite ver los correos que nos han enviado, ya que de ese servicio yo sí tengo autenticación y me sería más fácil hacer comparaciones. Una vez que estuve con los típicos letreros de Usuario y Contraseña delante, lo primero que hice fue guardar la página en mi Escritorio (donde pongo las cosas que borraré en menos de tres días) y luego procedí a editarla.

Gran parte del código estaba compuesto por simbologías propias de lenguajes script, pero, aun así, fui capaz de entender algunos fragmentos. Para sorpresa mía no había en ningún trozo de código (de los que logré descifrar), algo que hablara algo sobre password, o contraseña, o alguna palabra clave de esa de la que sabemos se usan. La única instrucción clave que logré entender fue una que decía algo como:

submit_login()

De esta frase, se puede concluir por los paréntesis que es una función, y después de buscar un poco más con los ojos, y menos con los buscadores que traen implementados los editores de texto, encontré dicha función:

function submit_login()
{
  if (document.implogin.imapuser.value == "")
  {
    alert('Provea su nombre de usuario y contraseña');
    document.implogin.imapuser.focus();
    return false;
  }
  else if (document.implogin.pass.value == "")
  {
    alert('Provea su nombre de usuario y contraseña');
    document.implogin.pass.focus();
    return false;
  }
  else
    {return true;}
  }
}

Repito que mi fuerte no son los lenguajes script, pero claramente se ve que lo único que se hace con ella, es retornar false en caso de que los campos de usuario o de contraseña estén vacíos y mostrar un mensaje.

El resto del código era para mí igual de desechable, así que toda la búsqueda había sido en vano. Sin embargo, no se por qué me dio en ese momento por revisar mi correo (siempre hay locos que me escriben de madrugada) y, como casualmente en ese momento estaba conectado, me limité a hacer doble clic en la página que había descargado, con la idea de luego, presionando sobre el botón que valida mis datos, obtener la lista de todos mis mensajes. Sorpresa fue la mía al ver que abriendo dicha página, había perdido todos los colores, el formato, y las palabras Usuario y Contraseña... difícilmente eran legibles para quien nunca había entrado a esta sección.

¿Qué sucedió?
¿Por qué veo las cosas de esta manera?

Fueron las primeras preguntas que me hice. Pude pensar que había modificado algo del código, pero realmente estaba seguro de que lo único que hice fue leer, ya que al cerrarla no me pidió ni siquiera si quería guardar los cambios.

¿Qué podría haber pasado?

En estos líos de edición de la revista he aprendido con ZorphDark algo sobre programación script y cosas por el estilo. Él es una persona realmente "obsesiva" con la limpieza del código y las facilidades que nos brindan las hojas de estilo CSS, así que de forma casi obligatoria he tenido que aprender algo sobre ellas.

El problema de las hojas de estilo, es que para que la página se pueda visualizar correctamente, debe tener a la hoja CSS en su misma dirección o, de lo contrario, especificar desde dónde va a ser cargarda (casi todo el mundo la pone en la misma dirección de la página). Quizás el problema de la pérdida de belleza radicaba en ese aspecto, que el código hacía referencia a una hoja de estilo que estaba en el servidor y a la cual yo, desde mi condición de cliente, no tenía acceso.

¿Cómo hacer referencia a la hoja de estilo?

Al utilizar Firefox como navegador, éste me permite (no sé si Internet Explorer también), entre otras opciones, ver una información bastante detallada de la página en cuestión. Usando esta función pude tener acceso a la dirección en el servidor donde se guarda la hoja de estilo, a la dirección donde es enviado el nombre de usuario y la contraseña que se introduce, el puerto y dominio utilizado, etc. (¡y pensar que todavía hay quienes trabajan con Internet Explorer!). Una vez que tengo los datos necesarios, solo tengo que ir reemplazando por todo el documento las direcciones, y donde dice algo similar a:

<link href="/css.php?app=imp" rel="stylesheet" type="text/css">

Poner:
<link href="http://webmail.sld.cu/css.php?app=imp" rel="stylesheet" type="text/css">

Además de eso yo decidí completar de paso todas aquellas direcciones que iba encontrando entre el código.

Hasta aquí las cosas estaban bien, pero como ya era tan tarde -que podía confundirse con súper temprano- se me antojó seguir... quizás tenía la musa inspirada, y eso no se da todos los días. Quise seguir buscando por todo el código para ver en qué parte podría encontrar lo de la contraseña, pero esta vez busqué con más énfasis, y encontré algo como:

<tr>
  <td class="light" align="right"><b>Usuario</b></td>

  <!-- nótese que no se revela el campo que almacena el nombre del usuario -->
  <td align="left"><input tabindex="1" name="imapuser" value="USUARIO" type="text"></td>
</tr>
<tr>
  <td class="light" align="right"><b>Contraseña</b></td>
  <td align="left"><input tabindex="2" name="pass" type="password"></td>
</tr>

En estas líneas se puede apreciar fácilmente que, según el estilo que tiene la página del correo de Infomed, tiene dos cuadros de texto. Al primero se le pasa el nombre de usuario, y del segundo la única información que se nos da es el tabindex, el name y el type, pero en ningún momento se revela la contraseña (por supuesto), esto es algo que está almacenado en el servidor, pero sólo con reemplazar la línea:

<td align="left"><input tabindex="2" name="pass" type="password"></td>

Con:
<td align="left"><input tabindex="2" name="pass" value=”CONTRASEÑA” type="password"></td>

...al abrir la página sólo tendríamos que hacerle un clic al botón Enviar.

Nota: Ya este archivo no está en el escritorio, desde que vi esto lo pasé inmediatamente para mi otra partición.

Repito, yo no conozco mucho sobre lenguajes script, digamos que no es mi fuerte, pero me pregunto: ¿qué pasaría si una persona con algún diccionario amplio de palabras fuese capaz de generar de forma automática una página con todas estas condiciones y decirle que desde que se cargue envíe la información al servidor? Por supuesto, debería tener además una función que se encargue de verificar si la respuesta es verdadera y, en caso contrario, que cierre página y genere otra seleccionando una palabra distinta entre los posibles passwords. No se asegura que se pueda entrar a todas las cuentas, puesto que hay muchas personas que saben de estos aspectos de seguridad y tienen contraseñas combinadas con números, pero también los hay que siguen poniendo como password “qwerty” (por sólo citar un ejemplo).

Antes de terminar, quisiera dejar bien claro que “NO SÉ DE PROGRAMACIÓN SCRIPT”, lo que hace de este artículo un texto completamente inofensivo. Si existen otras mentes perversas que con los conocimientos adecuados son capaces de hacer cosas detestables luego de leerse esto, ése es su problema.

Para saber más...



Artículos relacionados


No hay comentarios: