google translator

miércoles, 15 de junio de 2011

Post Dominguero: Si es que van provocando...

Vamos con otro post de tarde dominguera...

Hoy vamos a hacer algo rapidito y para toda la familia. Seguro que todos hemos oído aquello de que hay que cambiar las claves por defecto y tal. Bueno, pues hoy vamos a ver por qué...

Ante la dura imagen de otro lunes que se acerca, a uno le entran unas ganas locas de darse al noble arte de la cata de licores variados, o de, directamente, putear a alguien. Lanzamos nuestro dado de 20 caras para buscar un objetivo aleatorio y, ¡zas!, aparece el término "webcam"...

Y es que no sólo de bases de datos vive el cracker (si no que se lo digan a los de Inteco), sino que cualquier dispositivo conectado a una red es susceptible de estar expuesto a miradas indiscretas...

Sí amiguitos, hoy día casi todo está conectado a la red (he visto hasta cafeteras que twittean los cafés que sirven), por lo que no está demás tener un poco de cuidado. Una sencilla búsqueda en Google nos puede proporcionar numerosos modelos de webcams que incorporan un simple servidor web para mostrar al mundo su particular visión del ídem. Cogeremos un modelo al azar, por ejemplo, el modelo "Wit-Eye" de Softwell Technology. ¿Por qué no? Buscando una imagen de la cámara, encontramos que este modelo en concreto no se trata de una webcam como tal, sino de una controladora con varias entradas de señal que se usa para administrar varias cámaras a la vez.

Ahora buscaremos lo que los que saben de esto llaman "vector de ataque", que básicamente viene a ser por dónde le vamos a meter mano al tema. ¿Buscaremos un exploit conocido para el servidor web? ¿Buscaremos datos para un ataque de ingeniería social? ¿Intentaremos romper la clave de acceso por fuerza bruta, diccionario,etc? ¿O por el contrario utilizaremos una complicada pero brillante inyección SQL?

Bueno, no sé si he dicho que es domingo, estoy vago y en Ferrari la han vuelto a liar... Pues no, nada de complicaciones. Lo primero es probar lo más fácil, que en este caso es usar las credenciales por defecto de este dispositivo (ah... pensamiento lateral, lo llaman). Otra búsqueda en Google y, vaya..., debería haberlo supuesto, admin:admin... ¡glorioso!

¿Qué nos queda? Pues un conejillo de indias con el que comprobar el nivel de seguridad medio de un usuario de este tipo de cámaras. ¿Cómo lo encontramos? Bueno, pues creo que este tema lo iba a tratar uno de los compañeros del blog, pero ya que estamos, este post os puede servir de introducción de lo que se llama "Google Hacking" (mola el término, eh?). Todos los buscadores permiten afinar sus búsquedas mediante el uso de ciertas palabras clave. ¿Nunca habéis visto en el cine cómo desde el navegador sacan hasta las multas de tráfico de alguien? Pues no es tan complicado, creedme... En este ejemplo voy a usar la siguiente búsqueda en Google:

allintitle:"dvr login"

¿Qué creéis que me devolverá? Exacto, todas las páginas que tengan en su título la cadena exacta "DVR Login", que viene a ser el panel de acceso. Ahora simplemente iremos cogiendo los resultados y meteremos las credenciales por defecto... A mí me ha costado exactamente cuatro intentos (no es coña) encontrar un resultado en el que no las haya cambiado, lo que significa, según este riguroso estudio, que al 25% de los usuarios de estas webcams les importa bastante poco su privacidad.


Una vez dentro, ¡¡¡ que empiece la fiesta !!! A ver qué tenemos...


Este es el panel de control del dispositivo. Desde él podemos controlar hasta 16 cámaras al mismo tiempo (ideal para negocios, empresas, bancos, jeje)... Una de las primeras cosas que se me ocurren es cambiar el pass del dispositivo, pero como eso está muy mal visto hoy en día, podría crearme una nueva cuenta de administrador, por ejemplo.

Como podéis ver, tengo acceso a todo el sistema, puedo ver todo lo que las cámaras muestran, podría activarlas y desactivarlas a mi antojo, etc... Vamos, una maravilla...

Hay un apartado muy interesante que es "Alarm Log". En él se guarda un registro de ciertos eventos que han sucedido, como cambios de configuración, determinados fallos, etc... Como podemos observar, parece ser que la configuración ha sido modificada el pasado 01/06/2011, tras varios fallos de disco.


Cómo no, el apartado "Login Logs" nos mostrará todos los accesos al sistema e incluso podremos exportar estos datos. Esto es interesante si quisiéramos continuar realizando otro tipo de ataques. Por ejemplo, aparecen numerosos accesos como admin desde las mismas IPs, lo cual significa que esas son las IPs desde las que se administra este sistema (¿y quizás otros?). La opción de "Exportar" es especialmente útil en este caso, jeje... Además, desde aquí podremos borrar nuestras huellas eliminando aquellas entradas en las que aparecemos. No nos gustaría recibir la visita del cartero con un sobre certificado...

Por último, y por mera curiosidad, vamos a ver a dónde nos estamos conectando. Una visita a GeoIP, metemos la IP del sitio y ...

Bueno, por lo visto se trata de una empresa de comunicaciones de EE.UU, con sede en Virginia... Con todos estos datos casi podríamos meternos hasta la cocina, pero creo que ya es suficiente por hoy, ¿no?. La moraleja de todo esto es que SIEMPRE debemos cambiar las contraseñas que vienen por defecto.

Como dije en el título de la entrada, es que hay algunos que van provocando...

lunes, 6 de junio de 2011

Post Dominguero: Haciéndonos un crawler básico

Desde NoSecNoFun inauguramos una nueva sección llamada "Post Dominguero", donde recogeremos esas cosillas que puedes hacer una tarde de domingo sin partidos de liga, después de ver ganar a Nadal (otra vez) Rolland Garros...

Uno de los primeros pasos que se dan a la hora de meterle mano a una web es revisar el código de la página en busca de datos que nos permitan hacernos una idea de la composición del sitio, de la tecnología que utiliza, etc. Buscar direcciones de correo en el código, revisar los comentarios, buscar campos ocultos, la estructura de carpetas, etc, puede ser algo bastante aburrido y, sobre todo, tedioso si el sitio es un poco grande. Para ello existen los crawlers, que son programitas que se encargan de hacer este trabajo por nosotros y ahorrarnos un montón de tiempo. También son muy utilizados por los motores de búsqueda para indexar las webs y mostrarlas en los resultados de las búsquedas, pero lo que buscan estos últimos es muy diferente de lo que vamos a buscar nosotros.

El camino fácil es coger un crawler conocido como BlackWidow, Sam Spade o Teleport y dejarle que haga el trabajo sucio pero, como lo que nos mola es aprender cómo funcionan las cosas, vamos a hacernos uno sencillito, con un simple script para la consola. En este caso he elegido hacerlo para Linux, pero si se quiere hacer para Windows simplemente cambiaremos grep por findstr (o similares).

Lo primero que necesitamos es hacernos una copia local del sitio en nuestra máquina (por aquello de la velocidad y tal...). Podemos currarnos un programita que recorra todas las páginas de un sitio y las copie en el disco duro pero, es domingo, tengo resaca y conozco un programa que ya lo hace: WGET. Además hay versión tanto para Windows como para Linux, así que, p'alante!

Supogo que sabemos cómo funciona wget (y si no, nos leemos la ayuda, que es muy fácil, jeje), así que el comando que necesitaríamos para descargarnos una web sería el siguiente:

wget -r -m -nv http://www.unawebcualquiera.com

Este comando nos va a generar una carpeta con el nombre de la web y nos va a dejar dentro todos los ficheros de la misma respetando la estructura de carpetas (esto es importante, ya que así podremos hacernos una idea de cómo se estructura el sitio, qué tipo de aplicaciones alberga y qué tecnologías utiliza).

Una vez que ha acabado de copiar (puede tardar bastante si el sitio es un poco grande), necesitamos filtrar cada uno de los ficheros y buscar lo que queremos. ¿Qué usaremos para filtrar? a mí me mola grep para linux y findstr para windows, pero es una cuestión de gustos. Ahora viene lo importante: ¿Qué queremos buscar? Bueno, en este ejemplo sencillo, buscaremos lo más básico, que viene a ser:
  1. Comentarios: Os sorprendería ver lo que nos podemos encontrar comentado en cualquier código, desde credenciales de acceso, hasta referencias a ficheros de configuración, logs, etc, que nos pueden ayudar muchísimo a la hora de buscarle las cosquillas al asunto. Los comentarios en html empiezan con la misma cadena, <!-- , así que ya sabemos cómo sacarlos...
  2. Enlaces: Por supuesto, cualquier link que venga en el código. Podemos encontrar referencias a scripts, ficheros, carpetas, etc. Yo buscaré cadenas HREF (podemos buscar también por ACTION, pero estoy vago...).
  3. Direcciones de correo: Fundamental. Tanto para hacer ingeniería social como para su posible uso como usuario, ¿Cuántas webs conoces en las que el usuario es una dirección de correo? Pues eso, a buscar @...
  4. Campos ocultos: ¿Por qué se oculta un campo en una web? Porque seguro que es importante. Así que, al saco todo aquello que ponga type=hidden
  5. Meta Tags: Estas etiquetas que se añaden al código pueden contener direcciones, teléfonos, nombres, etc. Son una buena fuente de información para ataques de ingeniería social, así que, si pone meta...
  6. Scripts: Por supuesto, si hay algún script, lo quiero ver.
Podríamos seguir añadiendo cosas para buscar, pero para el ejemplo, creo que es más que suficiente.

¿Cómo sería el comando para aplicar una de estas búsquedas? Por ejemplo, para sacar los enlaces sería muy sencillo:
cat ./www.unawebcualquiera.com/index.html | grep -i -F 'href'
Nos sacaría por pantalla todas las líneas que contuvieran la cadena indicada. Lo que tendríamos que hacer es ir cambiando el patrón de búsqueda según el tipo, y sacarlo todo a un fichero de texto. Para ello, me he hecho un script en bash al que le paso dos parámetros: la carpeta con la web descargada y el fichero con los resultados.
#!/bin/bash

#para cada fichero de la carpeta de entrada, lo parseamos...
for i in $(find $1/)
do
echo "Parseando " $i
if [ -f $i ];
then
echo "[" $i "]" >> $2
#Buscamos comentarios "<!--"
echo "Comments" >> $2
echo "" >> $2
cat $i | grep -i -F '<!--' >> $2
echo "-----------------------------------------------------------------" >> $2
#Buscamos correos "@"
echo "Emails" >> $2
echo "" >> $2
cat $i | grep -i -F '@' >> $2
echo "-----------------------------------------------------------------" >> $2
#Buscamos campos ocultos "hidden"
echo "Hidden Fields" >> $2
echo "" >> $2
cat $i | grep -i -F 'type=hidden' >> $2
echo "-----------------------------------------------------------------" >> $2
#Buscamos Links "href"
echo "Links" >> $2
echo "" >> crawl
cat $i | grep -i -F 'href=' >> $2
echo "-----------------------------------------------------------------" >> $2
#Buscamos Meta "Meta"
echo "Meta Tags" >> $2
echo "" >> $2
cat $i | grep -i -F 'meta' >> $2
echo "-----------------------------------------------------------------" >> $2
echo "" >> $2
echo "-----------------------------------------------------------------" >> $2
#Buscamos scripts "script"
echo "SCRIPTS" >> $2
echo "" >> $2
cat $i | grep -i -F 'script'>>; $2
echo "-----------------------------------------------------------------" >> $2
echo "" >> $2
echo "********************************************************" >> $2
echo "********************************************************" >> $2
echo "" >> $2
fi
done
echo "FIN!"
En este ejemplo, el fichero de resultado podría salir algo tosco si la web en cuestión no sigue una indentación correcta, pero como ejemplo nos sirve más que de sobra. Una forma de mejorar esto sería mediante el uso de expresiones regulares. Como no me quiero meter con ello en este post, simplemente os dejo un ejemplo de cómo se filtrarían las direcciones de correo mediante el uso de expresiones regulares:
grep -o -e "[A-Za-z0-9\._-]*@[A-Za-z0-9\._-]*\.[a-zA-Z]\{2,4\}" $i >> $2
En este comando le estamos diciendo que sólo nos saque la cadena que coincida con el patrón que le indicamos (parámetro -o) y le indicamos el susodicho patrón (-e): una cadena de caracteres entre los que se pueden encontrar letras de la A a la Z (mayúsculas y minúsculas), números del 0 al 9 y los caracteres ".", "_","-", seguidos del carácter "@", y después otra cadena con el mismo patrón, seguida de un "." y otra cadena que sólo contenga las letras de la A a la Z mayúsculas o minúsculas, de un mínimo de dos caracteres y un máximo de cuatro... Un poco farragoso de leer, ¿no?, pero sin duda más amigable a la hora de presentar los resultados...

Como ya he dicho antes, si lo queremos hacer para Windows, simplemente cambiaríamos el cat por el type (comando para ver el contenido de un fichero en Windows), y el grep por findstr o similares.

Espero que os resulte útil.
CIAO!

P.D.: Sí, sí, ya sé que con grep, si ponemos el parámetro -r, nos recorre recursivamente un directorio y aplica el filtro a todos los ficheros, pero me molaba más así...