Archive for enero, 2010

TPlus v3.15 disponible

Lunes, enero 4th, 2010

Tuenti Plus

Ya está disponible la versión 3.15 en la que se solucionan algunos errores:

  • solucionado el problema al buscar un usuario por nombre sin introducir una provincia
  • solucionado problema al enviar mensajes
  • solucionado problema al ver amigos de tus amigos

Además he añadido la opción de cambiar el estado automáticamente al abrir TPlus. Para ello he añadido un nuevo formulario donde podeis meter las frases que luego se escogerán de forma aleatoria al abrir TPlus.

Seguridad en webs con mod_rewrite

Lunes, enero 4th, 2010

Para el que no lo sepa, mod_rewrite es un módulo del servidor web Apache que nos permite, a través de un .htaccess, reescribir urls. Con esto, a parte de ganar puntos en Google, para mejorar el posicionamiento de nuestra página, también permite ‘ocultar’ los parámetros que se envían de una página a otra, dificultando una posible inyección de SQL. Por ejemplo, una llamada que antes era:

http://miweb.com/noticia.php?id=30

pasa a ser, por ejemplo:

http://miweb.com/listado_de_noticias/30

Todo esto conseguido gracias a un pequeño fichero .htaccess similar a este:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^listado_de_noticias/([0-9]+) noticia.php?id=$1 [L,NC]
</IfModule>

Como vemos, por un lado oculta la url original y por otro restringe mediante el .htaccess la entrada de parámetros, en este caso, el id sólo puede ser un número entre 0 y 9, por lo que no podremos escribir nada del estilo:

http://miweb.com/listado_de_noticias/30+and+1=1

Otro caso diferente sería cuando la inyección no se realiza en un valor numérico, por ejemplo:

RewriteRule ^listado_de_noticias/([a-zA-Z0-9]+) noticia.php?id=$1 [L,NC]

En este caso, nos permite introdudir números y letras, pero tampoco podríamos inyectar código SQL ya que ni el espacio ni las comillas están permitidos:

http://miweb.com/listado_de_noticias/titulo’+and+’1′=’1

En resumen, todo varía en función de cómo esté configurado el .htaccess, al que por supuesto no tenemos acceso. Pero eso no es todo. Muchos administradores piensan que con esto la web ya está protegida a ataques de inyección SQL pero realmente el mod_rewrite es sólo una máscara ya que si el fichero PHP final (noticia.php en este caso) tenía problemas de inyección, los seguirá teniendo. Y si alguien llega a averiguar el nombre del fichero original, podrá acceder directamente sin necesidad de pasar por el mod_rewrite.

Sólo hay que echarle un poco de imaginación. Por ejemplo, buscar nombres similares a ver si hay suerte. Si la url es  http://miweb.com/listado_de_noticias/30 se pueden realizar búsquedas a ver si hallamos la página original:

http://miweb.com/listado_de_noticias.php?id=30

http://miweb.com/noticias.php?id=30

http://miweb.com/noticias.php?idnoticia=30

…..

Aunque parezca un trabajo de chinos, muchas veces da resultado.

Y si el mod_rewrite se ha aplicado sólo por mantener la seguridad (o mejorar el posicionamiento) y no viene unido a un cambio de estética o remodelación de la web, lo más probable es que podamos encontrar el nombre de algún fichero original mediante otras técnicas, por ejemplo:

  • Buscando en Google y demás buscadores un listado de las páginas indexadas de esa web, con la búsqueda:  ‘site:miweb.com inurl:.php’. Esto nos puede mostrar páginas antiguas que aún sigan indexadas.
  • Buscando con un spider el contenido de cada página de la web. Muchas veces se olvida cambiar una URL para que apunte a la nueva dirección en lugar de al fichero PHP
  • Buscando en Google enlaces hacia esa web, donde es posible que un link antiguo apunte a una noticia o cualquier otra sección de la web, con la búsqueda: ‘link:miweb.com’ o bien: site:.com “miweb.com” -site:miweb.com
  • Buscando en WayBack Machine, que guarda un histórico de muchísimas webs (150 billones … casi nada jeje) y además suele guardar una captura de toda la web cada mes, por lo que muy probablemante escontremos la estructura antigua.

eNYe Spider v1.2

Domingo, enero 3rd, 2010

Tras un año sin tocar este programa, he subido una nueva actualización en la que se solucionan varios problemas internos. Básicamente problemas de navegabilidad en ciertas webs. Hice estos cambios porque en Squipy he incorporado también un Spider … bueno, he integrado este Spider :)

Y como llevaba tiempo haciendo arreglos cada vez que me topaba con alguna web especial o que provocaba algún error, pues los he agrupado todos en el nuevo release.

El motivo por el que subí de la 1.0 a la 1.2 es porque tras crear la 1.1 arreglé un error jejeje .. pero la 1.1 nunca vio la luz.

Concursos CrackSLatinoS

Domingo, enero 3rd, 2010

Para el que no conozca CrackSLatinoS, es una comunidad de crackers en la que se todan todos los temas de ingeniería inversa (cracking, reverses, exploits, malwares, etc). De la mano del gran maestro Ricardo Narvaja, hay toda una lista de expertos en la materia que puedes encontrar en el grupo: http://groups.google.com/group/crackslatinos?hl=es.

Si te gusta la ingeriería inversa, en la web de Ricardo tienes manuales para aburrir, de todo tipo. Es más, cada mes hay concursos con diversas secciones en los que vengo colaborando desde hace unos meses. Entre los concursos y la cantidad de manuales (miles) que hay en su web (y todos en la lengua de cervantes) he podido aprender muchisimo. Gracias a la ayuda de todos los miembros de CrackSLatinoS que son una gente fantástica y siempre hacen lo posible por ayudar con tus dudas.

Como ya he comentado, llevo unos meses haciendo los concursos, en los que a final de mes enviamos un tutorial con nuestras soluciones. Luego Ricardo los sube todos a su web y se convierten en nuevos manuales de obligada lectura. De esta forma la información nunca está obsoleta ya que, muchas veces buscamos información en Internet sobre algo y vemos manuales muy antiguos que ya no sirven en estos tiempos.

Dejo un link al último tutorial que mandé para el concurso (correcpondiente a la sección de Exploitme) en el que había que hacer un exploit para el programa NaviCOPA, que es un servidor web para Windows. Podeis descargar el tutorial aquí: exploit NaviCOPA

El exploit lo resuelvo de dos formas:

  • Buscando con un pequeño script y con la ayuda del OllyDbg el tamaño donde se desborda el buffer
  • Comparando con Turbodiff las diferencias entre esta versión y la siguien en la que está parcheado el error

Aprovecho para dar las gracias al maestro Ricardo Narvaja por el tuto de Turbodiff y por resolver siempre mis dudas.

HttpWebRequest y los problemas con las redirecciones y las cookies

Viernes, enero 1st, 2010

¿Quién dijo que programar en .NET era coser y cantar? Hay muchas librerías que nos facilitan la vida pero a veces no funcionan del todo bien haciendo cosas raras o simplemente se les olvido incluir el control de ciertas situaciones.

Programando Squipy me he topado con un gran problema y es que cuando llego a una web que me hace una redirección (por ejemplo un 302) para que el HttpWebRequest la siga y obtenga luego la página a donde se redirige, he de poner AllowAutoRedirect = true

Pero si configuramos AllowAutoRedirect = true entonces no podremos capturar las cookies y, por tanto, no entrar a ciertas webs en las que necesitamos validación.

Si ponemos AllowAutoRedirect = false podremos capturar la cookie sin problemas usando GetResponseHeader(“Set-Cookie“) pero no se hará la redirección y no llegaremos a la página a la que se redirige.

Así que la solución final pasa por poner la redirección a false, capturar la cookie con Set-Cookie y luego comprobar el StatusCode para ver si la página devuelve una redirección, en cuyo caso, incluiremos nuestra cookie con Headers.Add(“Cookie“, nuestraCookie) y capturaremos la página a donde nos redirige con GetResponseHeader(“Location“). Tras esto crearemos manualmente otro HttpWebRequest para llamar a la nueva página.

Os dejo un código de ejemplo:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlDestino);
request.AllowAutoRedirect = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

while (response.StatusCode == HttpStatusCode.Found)  {

String nuevaUrl = “http://” + response.ResponseUri.Host + response.GetResponseHeader(“Location“);
request = (HttpWebRequest) WebRequest.Create(nuevaUrl);
request.AllowAutoRedirect = false;
response = (HttpWebResponse) request.GetResponse();

}

A falta de comprobar con Set-Cookie si tenemos alguna cookie y guardarla en un contenedor de Cookies para luego usarla en el nuevo envío.

Feliz Año nuevo a todos!