Como hackear páginas web ( en serio )

Las webs hoy en día son cada día mas seguras. ¿O no? Como intento demostrar frecuentemente en twitter, tal vez no sea asi.

Hay muchas herramientas hoy en día para encontrar vulnerabilidades en una web. Si una web utiliza una versión vieja de un CMS, cosa que podemos determinar utilizando una herramienta como Wappalizer o WhatWeb, la cuestión es mas sencilla. Es muy importante hoy en día mantener actualizado nuestro software. En caso contrario, un atacante podría buscar en el changelog de nuestro CMS todo lo referente a correcciones de vulnerabilidades en versiones posteriores a la que nosotros tenemos actualmente.

También hay otras herramientas para hackeear webs, pero yo hoy voy a optar por explicar que tipo de vulnerabilidades se pueden encontrar una web de una manera mas “artesanal”. Este artículo no plantea demostrar un tipo de vulnerabilidad nueva, ni pretende ser la demostración de un conocimiento muy avanzado. Simplemente es una explicación básica de algunos tipos de vulnerabilidades que pueden encontrarse en una web y como un atacante explotaría de ellas. Básicamente, se trata de:

  • Inyecciones SQL
  • Cross Site Scripting ( Javascript injection )
  • Local file inclusion / Remote file inclusion

Para todos los ejemplos, usaremos código de Damn Vulnerable Web App. Te podés descargar esta aplicación para practicar los ejemplos que planteo acá. Todos los ejemplos estan hechos con la seguridad en low. Una vez instalado el app, andá a DVWA Security y elegí “low”.

Leer el resto de esta entrada »

Compilado de enlaces

¡Hola gente!

Muy buenas tardes.

Traigo para ustedes un compilado de enlaces mas, un poco breve, pero mas intenso. Un excelente tutorial para crackear captchas, y una historia sobre localización.

Un saludo,

Pedro

Sitios web multi-idioma/región y indexación ( Google )

Hola amigos,

El otro día me encontré, navegando por ahi, un artículo del blog oficial de google que trata sobre la visión oficial de google frente a sitios web en múltiples idiomas, y otro que trata sobre la visión de google frente a sitios que apuntan a audiencias en múltiples regiones.

Google apoya ambos tipos de web y los considera perfectamente legales, mas tiene un cierto número de sugerencias para darnos.

Sitios multi-idioma

Un sitio multiidioma es cualquier sitio que provea a sus usuarios contenido en dos o mas idiomas. A lo largo de el artículo, google declara las siguientes recomendaciones:

  • Deberias hacer que cada página, individualmente, sea de un solo idioma: Google automáticamente determina el idioma de tu página web, y es capaz de detectar si la página tiene, por ejemplo, el menú en griego y el contenido en inglés. Es, sin embargo, recomendable mantener cada página en un solo idioma (solo inglés, solo francés, etc). Nótese que google ignora completamente toda la información proveida a nivel código sobre el idioma de la web (etiquetas lang, DTD, etc.)
  • Las URLs deberían de estar escapadas: si quisieramos utilizar en nuestra URL caracteres especiales, tales como áéíóú, deberíamos de crear enlaces a esas urls de manera que esten codificadas (es decir, si tenemos una página ‘averías-web’, debería codificarse a ‘aver%C3%ADas-web’).  Esta función de PHP puede ser de interés.
  • Las traducciones automáticas no deberían ser indexadas automaticamente: Las traducciones automáticas no siempre tienen sentido y podrían potencialmente considerarse como spam.
  • Utilizar UTF-8: Se r ecomienda utilizar utf-8 siempre que fuese posible.

Sitios multi-regionales

Esto se refiere a sitios que disponen a hacer llegar sus contenidos a varias regiones del mundo. De acuerdo a google, la mayoría de los usuarios encuestados consideró que era mas importante el tener la información en su idioma que un buen precio… lo que nos indica que, si queremos ganarnos a los usuarios, tendremos que hacerlo en su idioma.

Google diferencia entre dos tipos de dominos:

  • ccTLDs (country-code top level domain names): Estos son los dominios que estan ligados a un pais en particular ( por ejemplo .com.ar, .pe, .pt, etc.). Los usuarios y navegadores consideran este un importante punto al considerar si el sitio web es de determinado país o no.
  • gTLDs (generic top level domain names): Estos no tienen un vínculo en particular con ningún idioma. Unos buenos ejemplos de estos idiomas serían .com, .net,.org. Hay que tener en cuenta que hay dominios que también, a pesar de incialmente ser ccTLDs, ahora son considerados gTLDs (.asia, .tv, .me)

Para ser reconocidos como un dominio de determinado país, google se basa en los siguientes factores:

  • Utilización de un ccTLDs. Esta es generalmente una señal muy fuerte que el dominio está apuntado a usuarios de determinado país. O, alternativamente, asignar un país manualmente utilizando google webmaster tools. Mas información sobre esto último puede encontrarse en este enlace. Los usuarios que utilizaron este método reportan un aumento en las visitas causadas por su SEO natural y también por su inversión en adwords.
  • La ubicación del servidor (a través de la ubicación del servidor) tiene que estar cerca tus usuarios. Google indica que este no es un factor determinante a la hora de decidir por una región.
  • Otras señales podrían determinar tu ubicación. Esto podría ser, por ejemplo, los teléfonos que se muestran en tu sitio, o la moneda que utilizas. También enlaces de otros sitios locales, y el uso de “Google local Business Center”.
  • Estructuras de URL

    Google nos deja en su sitio una comparación de estructuras de urls que podemos utilizar para dividir nuestro sitio en idiomas.

    ccTLDs

    (sitio.com.ar)

    Pros(+):
    - Clara geolocalización
    - La ubicación del servidor es irrelevante
    - Fácil separación de sitios
    - Requerimientos legales ( en ocasiones )

    Contras(-):
    - Mas caro
    - Mas infraestructura
    - Requerimientos de los ccTLDs ( en ocasiones )

    Subdominios con gTLDs

    (en.sitio.com)

    Pros(+):
    - Facil
    - Puede utilizar las herramientas de Webmaster para geolocalización
    - Permite utilizar distintos servidores
    - Conveniente separación de sitios

    Contras(-):
    - Los usuarios pueden no reconocer tu sitio como de su país ( el subdominio e refiere al país o al idioma?)

    Subdirectorios con gTLDs

    (sitio.com/ar/)

    Pros(+):
    - Fácil de armar
    - Puede usar las Google Webmaster Tools
    - Poco mantenimiento ( el mismo host)

    Contras(-):
    - Los usuarios pueden no reconocer su país
    - Una sola Ubicación de server
    - Separación de sitios mas dificil

    Basado en parámetros GET

    sitio.com?pais=ar

    No recomendada

    Contenido duplicado

    Sitios que provéen el mismo servicio en varios paises pueden generar contenido que es similar o idéntico para varios sitios. Aunque google fuertemente recomienda que esto no sea asi, comprende que en ocasiones esto es imposible. Se indica que no hay necesidad de hacer que el contenido no sea indexable ( utilizando un archivo robots.txt, por ejemplo ), pero, por otro lado, si el mismo contenido se muestra en dos urls sería conveniente hacer un redirect.

    ¡Espero que esto sea de utilidad!

    ¡Saludos!
    Pedro

Seamonkey configuraciones varias

Hola, muy buenos dias/tardes/noches:

Escribo a ustedes hoy también con un pequeño tutorial que nos permite hacer algo muy interesante para los usuarios de Seamonkey 2 que no estan acostumbrados a las opciones que trae este por defecto. Usuarios de linux, particularmente, nos daremos cuenta de que al hacer click del medio sobre cualquier sector de la página, en lugar de scrollear nos lleva a cualquer sea la dirección que tengamos copiada en el portapapeles o nos muestra un error de “Dirección inválida”.

Esto puede solucionarse de manera sencilla, poniendo en la barra de direcciones lo siguiente:

about:config

Una vez ahi, con un doble click, cambien las opciones que traen por defecto las siguientes configuraciones:

general.autoScroll // activa el scroll
genera.smoothScroll // lo mejora)

Y listo. También, usuarios que estan acostumbrados a firefox, quizás quisieran cambiar los siguientes valores, para hacer que las tabs se abran y cierren con el boton del medio del mouse:

middlemouse.contentLoadURL //deshabilita el hecho de que se carge la URL al clickear con el botón del medio
middlemouse.openNewWindow // deshabilita el hecho que el click medio abra una nueva ventana
browser.tabs.opentabfor.middleclick // hace que el click medio abra un TAB.

Después, solamente queda por customizar el hecho que, al abrirse una nueva pestaña, seamonkey se enfoca sobre esta al instante. Esto no se como configurarlo desde about:config, pero puede cambiarse desde Edit > Preferences > Tabbed Browsing y deshabilitando la opción “Switch to new tabs opened from links”.

Muy probablemente se preguntarán porque prefiero hacerlo todo desde about:config, y la verdad es que no tiene una explicación lógica, mas que el hecho que el saber como funciona la raiz de el asunto nos da cierta ventaja sobre aquella gente que no sabe, sobretodo al momento en que la interfáz que nos permite tan sencillamente cambiar esa opción falla.

Update: En la mayoría de los sitemas operativos el F5 no funciona por defecto en el seamonkey. Para aquellos interesados en corregir esto, pueden descargar keyconfig y en Tools/Herramientas -> key config, buscar Reload. Ahi donde dice control + r, ponemos el mouse y apretamos f5. :)

¡Espero sea de utilidad!

Un saludo,
Pedro

Correr emesene como root

Hoy estuve luchando con mi computadora en varias áreas. El msn dejó de funcionar, la ide se congelaba, y, finalmente mi usuario se rompió.

Nada grave, por suerte. Como solución se me ocurrió averigiuar como correr ubuntu como root, que también me serviría para evitar que se me desgasten las teclas “s” “u” “d” y “o” de mi teclado.

Una vez que logré eso, y conseguí que gdm (el manejador de sesiones de ubuntu) me dejara usar mi PC como root, me encontré con un problema también, poco grave:

Emesene – el mejor cliente de msn que hay – no me dejaba ejecutarlo como root. Me tiraba la opción de ejecutarlo como “emesene –i-know-running-as-root-is-bad”, pero no me gustó esa idea. Ya había visto un poco del código de emesene unos minutos antes, y supe que deshabilitar ese control era cuestión de cambiar una línea de el archivo Controller.py. El archivo Controller.py se encuentra en la misma carpeta que el ejecutable emesene. En caso de que no sepas donde se encuentra, podés saberlo tipeando .

which emesene

El cambio se realiza en la línea 963 (versión 1.6.1 “mate” de emesene)

return (username, minimized, leakdebug, iconified, badroot)
a
return (username, minimized, leakdebug, iconified, True)

Recuperar GRUB después de instalar Windows

¡Hola!

A todos los usuarios de windows y linux nos ha pasado, seguramente, que al instalar un Windows después de instalar un linux nos hemos dado cuenta que el desconsiderado nos borró el grub y lo reemplazó sin siquiera consultarnos.

Para cuando eso pase, dejo el link con la solución, cortesía de CRySOL.

http://crysol.org/es/node/118

Saludos,
Pedro

Los principios perdidos de el diseño

Estimados lectores:

Escribo para ofrecer un link a un sitio web que nos explica los principios que hemos de seguir para lograr que nuestro diseño web sea agradable a los ojos de nuestros visitantes.

Se listan y ofrecen ejemplos visuales de los siguientes fundamentos básicos:

  • Balance (simetrico, asimetrico, radial)
  • Contraste (grande y pequeño, suave y áspero, grueso y fino, claro y oscuro, orgánico y geométrico)
  • Énfasis y subordinación
  • Fuerzas direccionales
  • Proporción
  • Escala
  • Repetición y ritmo
  • Unidad en la variedad

¡Espero que sea de utilidad! aquí está el enlace.

Saludos,
Droope

Explotar vulnerabilidades dificiles en SQL

Encontré un artículo que es de mi interés, y para no perderlo para siempre, lo voy a envíar a mi blog, que vendría a ser mi biblioteca personal :)

Link

Edit: Mas

La biblia de Javascript

En la página que linkeo mas abajo, nos encontraremos con el sitio web de un Gurú de la programación en Javascript. Encontraremos cosas de interés para nosotros los desarrolladores, como las siguientes:

Normalmente, la mayoría de los artículos nos muestran que la única forma de crear un array en Javascript es la siguiente:

var myArray = new Array(10);

Esto funciona correctamente, pero la realidad es que prácticamente nunca tenemos en mente el tamaño de un array al crearlo.

Por eso recomienda crearla de la siguiente manera:

var myArray = [];

De esta forma, declaramos el elemento como array, sin limitarla en ningún aspecto.

Esta info fue encontrada en este blog (inglés), en donde hay mucha mas información interesante sobre las arrays en Javascript.

Otra curiosidad:

El valor de las arrays se pasa por referencia

Es decir:

var myArray = [ 'zero', 'one', 'two', 'three', 'four', 'five' ];

document.writeln(myArray[1]); // Va a mostrar: one

function passedByReference(refArray) {
   refArray[1] = 'changed';
}

passedByReference(myArray);

document.writeln(myArray[1]); // Va a mostrar: changed

Para evitarlo, vamos a tener que llamar la funcion passedByReference de la siguiente manera:

 
passedByReference(myArray.slice());

Javascript es un lenguaje al que realmente le tengo miedo :\ cosas misteriosas pasan por ahi. No se olviden de visitar el sitio de donde saqué la información. Realmente tiene mucha información respecto a arrays en Javascript. También respecto a objetos, funciones y strings.

Una joya.

¡Saludos!
Pedro

Traducir una instalación de drupal ya creada

Hola Amigos:

Como ya sabrán, drupal ya viene con un sistema que nos permite utilizarlo en otros idiomas. Pero, a veces, por un sinnúmero de razones, no hacemos esto al instalarlo, y luego resulta imposible.

¿Imposible? no. Es posible, aunque altamente impráctico, por decir algo.

En este enlace, encontraremos un tutorial que nos explica como, con Curl podemos unirlos todos en un solo .po con un solo comando.

¡Espero sea de utilidad!

Saludos,
Pedro

Seguir

Get every new post delivered to your Inbox.

Únete a otros 345 seguidores