miércoles, 29 de julio de 2015

SOLUCIONADO SIOCSIFFLAGS: El nombre no es único en la red

Cuando utilizamos airmon-ng para poner nuestra tarjeta en modo monitor y la salida nos muestra un “SIOCSIFFLAGS: El nombre no es único en la red”, lo que nos está indicando es que nuestra tarjeta tiene algún parámetro que no está bien configurado (con normalidad, si estamos lanzándolo desde un sistema virtualizado, será que la MAC está duplicada en el SO anfitrión y en el virtualizado). A continuación voy a explicar como solucionar el problema configurando la wifi desde 0 en linux asumiendo que los drivers de la tarjeta wifi están correctamente instalados. Para comprobar que los drivers de nuestra tarjeta están correctamente instalados lanzaremos el comando dmesg | grep firmware y no tiene que aparecer ningún error, en caso de tenerlo deberemos instalar el driver correcto. En mi caso la salida es:
rencinar@debian8:~$ dmesg | grep firmware


Una vez comprobado que los drivers son correctos miramos el nombre de nuestro dispositivo wifi con el comando ifconfig. A partir de este momento todos los comandos que lancemos deberán ser con un usuario con permisos de root. En mi caso el nombre de la interfaz wifi es wlan0:


Le asignamos una ip y una mascara de red. Como la estamos utilizando para auditoría de redes inalámbricas no es necesario que sea de nuestro rango:

root@debian8:~#  ifconfig wlan0 down
root@debian8:~# ifconfig wlan0 192.168.99.1 netmask 255.255.255.0 up

Apagamos el dispositivo, le asignamos cualquier MAC y lo volvemos a levantar. Para cambiar la MAC usaremos el comando macchanger (en caso de no tenerlo instalado lo podremos instalar mediante el comando apt-get install macchanger).

root@debian8:~# ifconfig wlan0 down
root@debian8:~# macchanger -m 00:48:54:68:07:dc wlan0
Current MAC: 00:1f:1f:31:3f:f2 (Edimax Technology Co. Ltd.)

Permanent MAC: 00:1f:1f:31:3f:f2 (Edimax Technology Co. Ltd.)

New MAC: 00:48:54:68:07:dc (unknown)
root@debian8:~# ifconfig wlan0 up


Comprobamos que la ip, la máscara y la MAC están correctamente asignadas:

root@debian8:~# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 08:00:27:f3:76:cb brd ff:ff:ff:ff:ff:ff

inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0

valid_lft 85827sec preferred_lft 85827sec

inet6 fe80::a00:27ff:fef3:76cb/64 scope link

valid_lft forever preferred_lft forever

3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000

link/ether 00:48:54:68:07:dc brd ff:ff:ff:ff:ff:ff

inet 192.168.99.1/24 brd 192.168.99.255 scope global wlan0

valid_lft forever preferred_lft forever


Ponemos nuestra tarjeta en modo monitor con el comando airmon-ng (en mi caso wlan0)

root@debian8:~# airmon-ng start wlan0
Found 5 processes that could cause trouble.
If airodump-ng, aireplay-ng or airtun-ng stops working after
a short period of time, you may want to kill (some of) them!
PID     Name
425     NetworkManager
434     avahi-daemon
492     avahi-daemon
798     dhclient
853     wpa_supplicant
Interface       Chipset         Driver
wlan0           Ralink 2573 USB rt73usb - [phy0]
                                (monitor mode enabled on mon0)




En el caso de que nos indique "SIOCSIFFLAGS: Dispositivo o recurso ocupado"
o “ioctl(SIOCSIFFLAGS) failed: Device or resource busy” es que se ha quedado pillada la interfaz inalámbrica. Normalmente se soluciona parándola y volviéndola a arrancar.

root@debian8:~#  ifconfig wlan0 down
root@debian8:~#  ifconfig mon0 down
root@debian8:~#  ifconfig wlan0 up

Tras esto tendremos nuestra tarjeta correctamente arrancada en modo monitor. Lo podremos comprobar lanzando el comando airodump-ng (interfaz en modo monitor)
root@debian8:~# airodump-ng mon0


viernes, 24 de julio de 2015

Crear diccionario para ataques por fuerza bruta con Crunch

No se si la generación de diccionarios para ataques por fuerza bruta es la primera cuestión que debería abordar alguien que quiere dedicarse a la auditoría de seguridad informática pero seguro que estaría dentro de las primeras. Hoy en día se pueden realizar ataques altamente sofisticados para conseguir burlar la seguridad de algún software o instalación aprovechando errores en la validación de usuarios, ejecutando código en lugares no controlados por las aplicaciones,...etc pero ¿Y si podemos entrar por la puerta principal gracias a un estudio previo mediante ingeniería social?.

¿Que es un ataque por fuerza bruta?

Un ataque por fuerza bruta no es más que, previa selección de un conjunto finito de posibles claves/usuarios, irlas probando mediante algún automatismo. Centrándonos en las contraseñas, el problema es que si el conjunto de posibilidades que generamos es muy amplio, el tiempo de computación puede ser inasumible y por lo tanto no servirá para nada. Por esto, el arte de estos ataques radican en la correcta selección del diccionario no generando todas las combinaciones posibles sin antes realizar un estudio previo con las palabras clave que sepamos que el usuario puede utilizar (su nombre o apellidos, fechas de nacimiento, matrícula del coche,...etc) y descartar aquellas contraseñas absurdas tales como “aaeeeiii” con las que perdemos tiempo de computación y es improbable que el usuario las use como password. Como nota adicional, si un usuario genera una contraseña muy fuerte deberemos contemplar el uso de otros mecanismos para obtenerla tales como un ataque por phishing porque será muy complicado genera un diccionario que podamos procesar en un tiempo razonable. Si queremos comprobar la fortaleza de una contraseña podemos hacerlo aquí.

Como generar un diccionario

Podemos generar un diccionario de múltiples maneras (script shell,programas en python, creándolo a mano,...etc) pero una de las mejores utilities que conozco es Crunch gracias a bofh28. Es versátil, admite patrones, segmentación de resultados, partición de ficheros de salida por tamaño,...etc. A continuación explicaré tanto su instalación en linux como un conjunto de casuísticas que por si solas o combinadas podrán resolver casi todas las necesidades que tengamos para crear diccionarios complejos.

Instalar Crunch en linux

Para ello lo primero que tenemos que hacer es descargarnos Crunch con el comando wget:

rencinar@debian8:~/Descargas$ wget http://sourceforge.net/projects/crunch-wordlist/files/crunch-wordlist/crunch-3.6.tgz



Esto nos descargará el archivo crunch-3.6.tgz, en mi caso la descarga la ha realizado en /home/rencinar/Descargas/. Una vez descargado lo descomprimimos con el comando tar -xzvf:

rencinar@debian8:~/Descargas$ tar -xzvf crunch-3.6.tgz
crunch-3.6/
crunch-3.6/crunch.1
crunch-3.6/charset.lst
crunch-3.6/unicode_test.lst
crunch-3.6/Makefile
crunch-3.6/crunch.c
crunch-3.6/COPYING

Una vez descomprimido entraremos en el directorio crunch-3.6 y realizaremos un make y un make install con permisos de root:

rencinar@debian8:~/Descargas$ su -
Contraseña:
root@debian8:~# cd /home/rencinar/Descargas/crunch-3.6/
root@debian8:~#  make
Building binary...
/usr/bin/gcc -pthread -Wall -pedantic -std=c99 -m32 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 crunch.c -lm -o crunch
root@debian8:/home/rencinar/Descargas/crunch-3.6# make install
Creating directories...
sudo /usr/bin/install -d -g root -o root \
/usr/bin \
/usr/share/man/man1 \
/usr/share/crunch \
/usr/share/doc/crunch
Copying binary...
sudo /usr/bin/install crunch /usr/bin
Copying charset.lst...
sudo /usr/bin/install charset.lst /usr/share/crunch
Copying COPYING...
sudo /usr/bin/install COPYING /usr/share/doc/crunch
Installing man page...
sudo /usr/bin/install crunch.1 /usr/share/man/man1

Ejemplos de uso

Una vez tengamos instalado Crunch tendremos disponible el comando crunch en las shell para poder usarlo. Para usarlo tendremos que lanzarlo con la nomenclatura crunch <min> <max> [options]. A continuación paso a explicar unos ejemplos que muestran gran parte de la potencia de este comando (en algunos ejemplos pongo entre "" las secuencias de caracteres para que el caracter ' ' quede reflejado):

Ejemplo crunch 1 3 -o pass.txt

El resultado es un fichero pass.txt con todas las posibles combinaciones de caracteres con longitud de 1 a 3 caracteres alfabéticos en minúsculas por lo tanto tendremos desde la "a" hasta la "zzz".

root@debian8:~# crunch 1 3 -o pass.txt
Crunch will now generate the following amount of data: 72384 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 18278
crunch: 100% completed generating output

Ejemplo crunch 1 3 abcdefg -o pass.txt

El resultado es un fichero pass.txt con todas las posibles combinaciones de caracteres con longitud de 1 a 3 caracteres con el conjunto limitado de datos que le hemos designado (abcdefg) por lo tanto tendremos desde la "a" hasta la "ggg" y nunca tendremos combinaciones como "zzz" o "haa" porque quedan fuera del rango de selección.

root@debian8:~# crunch 1 3 abcdefg -o pass.txt
Crunch will now generate the following amount of data: 1533 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 399
crunch: 100% completed generating output

Ejemplo crunch 1 6 "abcdefg " -o pass.txt

El resultado es un fichero pass.txt con todas las posibles combinaciones de caracteres con longitud de 1 a 6 caracteres con el conjunto limitado de datos que le hemos designado (abcdefg ). La gracia del entrecomillado es que nos incluye el espacio como carácter del conjunto por lo que tendremos desde la "a" hasta la "     g".

root@debian8:~# crunch 1 6 "abcdefg " -o pass.txt
Crunch will now generate the following amount of data: 2054352 bytes
1 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 299592
crunch: 100% completed generating output

Ejemplo crunch 1 3 -f /usr/share/crunch/charset.lst lapsusmentis -o pass.txt

En los ejemplos anteriores hemos tenido que definir el conjunto de valores posibles sobre los que generará las combinaciones de caracteres pero Crunch, para que no tengamos que poner permanentemente todo el listado de caracteres, tiene un fichero maestro con todos los conjuntos más habituales de caracteres (por supuesto podremos añadirle alguno adicional). El fichero lo tendremos ubicado en /usr/share/crunch/charset.lst y para añadir nuestra propia secuencia basta con añadir al fichero una línea con la siguiente estructura:
 
nombre_de_la_secuencia = [conjunto de valores]

Como por ejemplo:

lapsusmentis                   = [abcde1]

El resultado del comando "crunch 1 3 -f /usr/share/crunch/charset.lst lapsusmentis -o pass.txt" es un fichero pass.txt con todas las posibles combinaciones de caracteres con longitud de 1 a 3 caracteres con el conjunto limitado de datos que le hemos designado en el fichero charset.lst para la cadena lapsusmentis (abcde1) por lo tanto tendremos desde la "a" hasta "111". Esto equivaldría a lanzar el comando  crunch 1 3 abcde1 -o pass.txt .

root@debian8:~# crunch 1 3 -f /usr/share/crunch/charset.lst lapsusmentis -o pass.txt
Crunch will now generate the following amount of data: 984 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 258
crunch: 100% completed generating output

Ejemplo crunch 1 3 -f /usr/share/crunch/charset.lst mixalpha-numeric-all-space -o pass.txt

Si quisiéramos utilizar una lista predefinida como por ejemplo mixalpha-numeric-all-space, lo haríamos de la misma manera que en el ejemplo anterior (mixalpha-numeric-all-space = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|\:;"'<>,.?/ ]). Generará valores desde "a" hasta "   ".

root@debian8:~# crunch 1 3 -f /usr/share/crunch/charset.lst mixalpha-numeric-all-space -o pass.txt
Crunch will now generate the following amount of data: 3456765 bytes
3 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 866495
crunch: 100% completed generating output


Ejemplo crunch 6 6 -f /usr/share/crunch/charset.lst  mixalpha-numeric-all-space -o pass.txt -t @pio@@ -s cpiosj

Esta es para mi una de las mejores maneras de generar un diccionario. En el ejemplo que pongo indico que vamos a generar palabras de 6 caracteres, con la opción -t le indicamos el patrón a seguir (con la @ le indicamos a crunch que ese caracter es el que tiene que iterarse con el conjunto de valores de la lista mixalpha-numeric-all-space, quedando fija la parte "pio") y con el -s desde donde va a empezar (al indicarle que empiece por "cpiosj" nunca generará "apioaa" por ejemplo). El diccionario empezará en "cpiosj" y acabará en “ pio  ”.

root@debian8:~# crunch 6 6 -f /usr/share/crunch/charset.lst  mixalpha-numeric-all-space -o pass.txt -t @pio@@ -s cpiosj
Crunch will now generate the following amount of data: 5863242 bytes
5 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 837606
crunch: 100% completed generating output

Ejemplo crunch 2 3 -f /usr/share/crunch/charset.lst ualpha  -o pass.txt -s CC

El resultado es un fichero pass.txt con todas las posibles combinaciones de caracteres con longitud de 2 a 3 caracteres con el conjunto limitado de datos ualpha ([ABCDEFGHIJKLMNOPQRSTUVWXYZ]) empezando en "CC" y acabando en "ZZZ" por lo tanto nunca nos generará ni "AA" ni "BZ",...etc.

root@debian8:~# crunch 2 3 -f /usr/share/crunch/charset.lst  ualpha  -o pass.txt -s CC
Crunch will now generate the following amount of data: 72170 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 18198
crunch: 100% completed generating output

Ejemplo crunch 3 3 -p dog

Como podemos ver, el resultado es una permuta de todos los caracteres que componen la palabra dog. La opción -p nos permite realizar este tipo de acciones de permuta de caracteres de palabras.

root@debian8:~# crunch 3 3 -p dog
Crunch will now generate approximately the following amount of data: 24 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 6
dgo
dog
gdo
god
odg
ogd

Ejemplo crunch 4 5 -p la moto grande

En el ejemplo anterior realizábamos permutas entre caracteres de una palabra pero con la opción -p también podemos realizar permutas entre palabras.

root@debian8:~#  crunch 4 5 -p la moto grande
Crunch will now generate approximately the following amount of data: 78 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 6
grandelamoto
grandemotola
lagrandemoto
lamotogrande
motograndela
motolagrande

Ejemplo crunch 1 3 -o START -c 6000 -z bzip2

Con la opción -c 6000 le indicamos el número de palabras máximas por fichero (en este caso rotará el fichero al llegar a 6000 palabras), con el -o  START le indicamos que el nombre del fichero generado tendrá la estructura [la primera palabra del fichero-ultima palabra del fichero] (en el ejemplo los nombres de los ficheros son a-hvt.txt, hvu-qsn.txt, qso-zph.txt, zpi-zzz.txt) y con el -z bzip2 le indicamos que lo comprima con bunzip2.


root@debian8:~#  crunch 1 3 -o START -c 6000 -z bzip2
Crunch will now generate the following amount of data: 26080 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 6702

crunch:  89% completed generating output
Beginning bzip2 compression.  Please wait.
  a-hvt.txt:  5.738:1,  1.394 bits/byte, 82.57% saved, 23272 in, 4056 out.

crunch: 179% completed generating output
Beginning bzip2 compression.  Please wait.
  hvu-qsn.txt:  7.175:1,  1.115 bits/byte, 86.06% saved, 24000 in, 3345 out.

crunch: 268% completed generating output
Beginning bzip2 compression.  Please wait.
  qso-zph.txt:  7.249:1,  1.104 bits/byte, 86.20% saved, 24000 in, 3311 out.

crunch: 272% completed generating output
Beginning bzip2 compression.  Please wait.
  zpi-zzz.txt:  5.196:1,  1.540 bits/byte, 80.76% saved, 1112 in, 214 out.

Ejemplo crunch 4 5 -b 20mib -o START

Con la opción -b 20mib le indicamos que el tamaño máximo por fichero generado será de 20M por lo que rotará el fichero al alcanzar dicho tamaño. Además al indicarle la opción -o START  pondrá como nombre de cada uno de los ficheros siguiendo la estructura [la primera palabra del fichero-última palabra del fichero]. Al ver la salida del comando anterior podremos comprobar que mantiene el tamaño máximo que le hemos indicado.

root@debian8:~# crunch 4 5 -b 20mib -o START
Crunch will now generate the following amount of data: 73573136 bytes
70 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 12338352
crunch:  28% completed generating output
crunch:  57% completed generating output
crunch:  85% completed generating output
crunch: 100% completed generating output

Comprobamos el tamaño de los ficheros generados:

root@debian8:~# ls -ltrh
total 71M
-rw-r--r-- 1 root root  20M jul 23 00:16 aaaa-gvfed.txt
-rw-r--r-- 1 root root  20M jul 23 00:16 gvfee-ombqy.txt
-rw-r--r-- 1 root root  20M jul 23 00:16 ombqz-wcydt.txt
-rw-r--r-- 1 root root  11M jul 23 00:16 wcydu-zzzzz.txt

Ejemplo crunch 3 3 abc + 123 =@# -t @%^

El resultado serán palabras de longitud 3 siguiendo el patrón @%^ utilizando el conjunto de datos abc para la @, 123 para el % y =@# para ^.

root@debian8:~# crunch 3 3 abc + 123 =@# -t @%^
Crunch will now generate the following amount of data: 108 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 27
a1=
a1@
a1#
a2=
a2@
a2#
a3=
a3@
a3#
b1=
b1@
b1#
b2=
b2@
b2#
b3=
b3@
b3#
c1=
c1@
c1#
c2=
c2@
c2#
c3=
c3@
c3#

Ejemplo crunch 3 3 abc + 123 =@# -t ^%@

La misma generación que antes pero cambiando el orden del patrón. El resultado serán palabras de longitud 3 siguiendo el patrón @%^ utilizando el conjunto de datos abc para la @, 123 para el % y =@# para ^.

root@debian8:~# crunch 3 3 abc + 123 =@# -t ^%@
Crunch will now generate the following amount of data: 108 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 27
=1a
=1b
=1c
=2a
=2b
=2c
=3a
=3b
=3c
@1a
@1b
@1c
@2a
@2b
@2c
@3a
@3b
@3c
#1a
#1b
#1c
#2a
#2b
#2c
#3a
#3b
#3c

Ejemplo crunch 4 4 + + 123 + -t %%@^ -o pass.txt

En esta ocasión generaremos palabras siguiendo el patrón %%@^ por esto obtendremos desde "11a!" hasta la "33z " al haber definido el conjunto numérico 123 en las 2 primeras posiciones, una letra minúscula (@) en la tercera posición y un carácter en la cuarta(^).

root@debian8:~# crunch 4 4 + + 123 + -t %%@^ -o pass.txt

Ejemplo crunch 5 5 -t ddd@@ -p dog cat bird

Con el patrón ddd@@ le estamos indicando que las 3 primeras posiciones corresponden a las palabras de 3 letras a permutar y que las 2 últimas posiciones serán letras minúsculas. De esta manera comenzará por "birdcatdogaa" y finalizará en "dogcatbirdzz".

root@debian8:~# crunch 5 5 -t ddd@@ -p dog cat bird
Crunch will now generate approximately the following amount of data: 52728 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 4056
crunch: 100% completed generating output

Ejemplo crunch 4 4 cC -t @ddd -p dog

En esta ocasión utilizamos el patrón @ddd donde el conjunto designado para la @ será cC y con ddd designamos los caracteres a permutar de la palabra dog.

root@debian8:~# crunch 4 4 cC -t @ddd -p dog
Crunch will now generate approximately the following amount of data: 60 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 12
cdgo
Cdgo
cdog
Cdog
cgdo
Cgdo
cgod
Cgod
codg
Codg
cogd
Cogd

Ejemplo crunch 7 7 -t p@ss,%^ -l a@aaaaa

En este caso proponemos el patrón p@ss,%^ pero no queremos que la @ la sustituya por todo el conjunto de letras en minúscula. Para realizar esto usamos la opción -l donde le indicamos con la “a” los caracteres que cogerá del patrón y usamos la @ para iniciar que es fija, por lo tanto en este caso los únicos caracteres que cambiarán son los 3 últimos ("," iterará con todas las letras en mayúscula, % iterará con números y ^ con símbolos). Por esto irá desde "p@ssA0" hasta "p@ssZ9 ".

root@debian8:~# crunch 7 7 -t p@ss,%^ -l a@aaaaa

Ejemplo crunch 5 5 -s @4#S2 -t @%^,2 -e "@8 Q2" -l @dddd -b 10KB -o START

Con la opción -s le indicamos la palabra inicial desde la cual empieza a generar el diccionario y con la opción -e la última palabra que generará. Por esto la primera palabra generada es "@4#S2" y  la última es "@8 Q2".

root@debian8:~# crunch 5 5 -s @4#S2 -t @%^,2 -e "@8 Q2" -l @dddd -b 10KB -o START
Crunch will now generate the following amount of data: 25266 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 4211
crunch: 39% completed generating output
crunch: 79% completed generating output
crunch: 100% completed generating output

Ejemplo crunch 5 5 -d 2@ -t @@@%%

Con la opción -d limitamos el número máximo de caracteres iguales seguidos en la secuencia. En este caso al poner 2@ le indicamos que el número máximo de caracteres repetidos pueden ser 2 letras minúsculas (nunca nos vamos a encontrar "aaa11" ni "nnn45" por ejemplo) por esto empezaremos en la "aab00" y tendremos como palabra final "zzy99".

root@debian8:~# crunch 5 5 -d 2@ -t @@@%%

Ejemplo crunch 5 5 -d 1@ -t @@@%%

En este caso al poner -d 1@ le indicamos que el número máximo de caracteres repetidos pueden ser de 1 letra minúscula (nunca nos vamos a encontrar "aab11" ni "nnb45" por ejemplo) por esto empezaremos en la "aba00" y tendremos como palabra final "zyz99".

root@debian8:~# crunch 5 5 -d 1@ -t @@@%%

Ejemplo crunch 5 5 -t @@%%% -d 1@ -d 2%

En este caso indicamos que tendremos combinaciones de 5 cifras donde solo podrá haber una letra minúscula consecutiva igual y un máximo de 2 números consecutivos iguales (nunca podrá haber ni "aa001" ni "ab000" por ejemplo). La primera palabra será "ab001" y la última será "zy998".

root@debian8:~# crunch 5 5 -t @@%%% -d 1@ -d 2%

Ejemplo crunch 5 5 -d 2@

Crearemos combinaciones de palabras donde el máximo de caracteres vecinos iguales será de 2. La primera palabra será "aabaa" y la última será "zzyzz".

root@debian8:~# crunch 5 5 -d 2@

Ejemplo crunch 4 4 -f /home/rencinar/Descargas/crunch-3.6/unicode_test.lst japanese -t @@%% -l @xdd

Crunch también nos permite la generación de diccionarios con caracteres japoneses (japanese) o griegos (the-greeks) gracias a unicode_test.lst . En el siguiente ejemplo vamos a combinar los caracteres japoneses (japanese = [日本語]) con la @ y numéricos con el %, para ellos usaremos unicode_test.lst  con el conjunto de caracteres  japanese. El primer valor es "@日00" y el último es "@語99".

root@debian8:~# crunch 4 4 -f /home/rencinar/Descargas/crunch-3.6/unicode_test.lst japanese -t @@%% -l @xdd               
Notice: Detected unicode characters.  If you are piping crunch output
to another program such as john or aircrack please make sure that program
can handle unicode input.
Do you want to continue? [Y/n] Y
Crunch will now generate the following amount of data: 2100 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 300

viernes, 10 de julio de 2015

Instalar y usar MDK3 en linux

¿Qué es MDK3?

MDK3 es una herramienta para la auditoria de seguridad wireless desarrollada por aspj que, entre otros, explota vulnerabilidades del estándar 802.11, permitiendo además trabajar sobre la nueva pila mac80211. MDK3 usa la librería de inyección osdep del proyecto www.aircrack-ng.org pero es una herramienta absolutamente independiente, pudiendo instalarla sin instalar aircrack-ng.

Características


  • Detecta los SSID oculto por fuerza bruta, aunque lo combina con un diccionario para ganar eficacia.
  • Permite mandar sondas para ver si una red está escuchando.
  • WPA TKIP (hashing de clave WEP WPA) de denegación de servicio.
  • WDS Confusion.
  • FakeAP con inundaciones Beacon con salto de canal.
  • Autenticación-DoS inteligente para bloquear APs.
  • Fuerza bruta de filtros MAC
  • Aka AMOK-MODE para desconectar a todos los clientes y desasociar paquetes.

Instalación

Antes de instalarlo es recomendable tener instalados los paquetes aircrack-ng, curl, hostapd, isc-dhcp-server, lighttpd, macchanger, php5-cgi, pyrit, gcc, g++, y make. Una vez los tengamos instalados realizamos lo siguiente:
Descargamos el paquete desde la páguina oficial (hay otros repositorios alternativos):
root@debian8:~# wget http://aspj.aircrack-ng.org/mdk3-v6.tar.bz2
Descomprimimos el paquete
root@debian8:~# bunzip2 mdk3-v6.tar.bz2
Desempaquetamos el archivo
root@debian8:~# tar -xvf mdk3-v6.tar
Entramos en el directorio mdk3-v6
root@debian8:~# cd mdk3-v6/
Realizamos el make y make install
root@debian8:~/mdk3-v6# make;make install

Podemos comprobar que la instalación ha acabado correctamente porque veremos que no hay ningún error del estilo "make: *** [mdk3] Error 1" y tenemos como linea final "install -D -m 0755 mdk3 //usr/local/sbin/mdk3"


USO

Para usar MDK3 lo primero que tendremos que hacer es poner nuestra tarjeta wifi en modo monitor, para ello usaremos el paquete airmon-ng con la nomenclatura airmon-ng start <INTERFACE WIFI> (hay que lanzarlo con permisos de root y podemos ver las interfaces que tenemos con el comando iwconfig), en mi caso:

root@debian8:~# airmon-ng start wlan0

Found 5 processes that could cause trouble.
If airodump-ng, aireplay-ng or airtun-ng stops working after
a short period of time, you may want to kill (some of) them!

PID     Name
425     NetworkManager
438     avahi-daemon
490     avahi-daemon
792     dhclient
898     wpa_supplicant


Interface       Chipset         Driver

wlan0           Ralink 2573 USB rt73usb - [phy0]SIOCSIFFLAGS: El nombre no es único en la red

                                (monitor mode enabled on mon0)



Como podemos comprobar nos indica que la interfaz wifi que tenemos en modo monitor es la mon0, pero además si hacemos un iwconfig tras lanzar el airmon-ng podremos comprobar que nos aparece una nueva interface, que corresponde a la mon0 con la propiedad Mode:Monitor.


Un ejemplo de uso es el de descubrir las redes con SSID oculto. El siguiente comando se puede lanzar con ataque mediante diccionario o por fuerza bruta pero en mi opinión y dado el poco tiempo que tarda, por fuerza bruta es el método más recomendable además que el ataque por diccionario normalmente no te encuentra ni un 10% de las redes que realmente hay. El uso del comando es mdk3 INTERFACE_WIFI p -c 11 -t BSSID -b a

root@debian8:~# mdk3 mon0  p -c 11 -t F8:8E:85:FF:14:7F -b a

channel set to: 11                                                                                                                                                                                                             SSID Bruteforce Mode activated!                                                                                                                                                                                                


Waiting for beacon frame from target...
Sniffer thread started

Got response from D0:AE:EC:E7:97:B0, SSID: "WLAN_MTA"
Last try was:

Got response from F8:8E:85:FF:14:7F, SSID: "MOVISTAR_147E"
Last try was:

SSID does not seem to be hidden! Found: "MOVISTAR_147E"


Como podemos comprobar para el AP D0:AE:EC:E7:97:B0 el SSID oculto es WLAN_MTA sin embargo también nos indica a título informativo los que no están ocultos, por ejemplo MOVISTAR_147E.


Otro ejemplo de uso es si deseamos generar APs falsos. El fin es desconectar a todos los usuarios de los APs y que cuando se vuelvan a conectar lo realicen en los APs falsos, generando confusión en la red y pudiendo aprovechar el momento para obtener información valiosa (a rio revuelto, ganancia de pescadores). Para realizar esto lanzaremos el comando mdk3 <INTERFAZ_WIFI> b, en mi caso:

root@debian8:~# mdk3 mon0 b
Current MAC: CD:BA:AB:F2:FB:E3 on Channel  2 with SSID: a71i0Rk
Current MAC: 00:D0:01:E6:C4:03 on Channel  5 with SSID: eU6aP,&yxbP#3Mt3>%"EWe;J`]_NU-
Current MAC: 78:AE:CA:98:12:53 on Channel  2 with SSID: c7#w
Current MAC: C4:D8:29:85:75:68 on Channel 12 with SSID: A>R5VJ]\,V9h?rE#r):+"&
Current MAC: 87:02:57:AF:E9:76 on Channel  5 with SSID: O}P-.Q_9[
Current MAC: 0B:27:A0:4E:BB:13 on Channel  5 with SSID: hPK$k
Current MAC: F9:D3:76:FE:14:84 on Channel  4 with SSID: Ler+u|us./1d&
Current MAC: 01:03:75:B1:AB:C9 on Channel 13 with SSID: 7re\$|Ae<'(lY?4:aBp0Vr*R"(Fwu`m
Current MAC: 5E:28:C1:CE:5E:F2 on Channel  6 with SSID: BYpMm^w#j_\<9kp]>#_c^%
Current MAC: 15:C7:9D:0C:76:80 on Channel  9 with SSID: Aop3>^+b($ .hEC"]E
Current MAC: E0:45:FD:52:63:98 on Channel  4 with SSID: jy"}86Wu;hVj_v
Current MAC: BC:A2:82:39:D8:1B on Channel  6 with SSID: zE%dET,JHCLvw=Hj_b5%
Current MAC: 32:F3:EC:15:ED:77 on Channel  6 with SSID: )[x{ uRZnZnk6dJ@ik}vXW4LCy}khF^
Current MAC: A2:AD:14:16:38:87 on Channel 13 with SSID: Kn9L<t9LI]XMaTvvwfOiR8-+jLyK







martes, 7 de julio de 2015

Conocer el BSSID y la MAC de un AP en Linux

Para conocer el BSSID y la MAC de un AP (Access Point) en linux deberemos disponer de una tarjeta wifi. Para ver las tarjetas wifi que tenemos disponibles deberemos usar el comando iwconfig como root, para ello realizamos lo siguiente:

rencinar@debian8:~$ su -
Contraseña:
root@debian8:~# iwconfig


En mi caso, el resultado del iwconfig es que tengo una tarjeta wifi que se referencia con wlan0

Después solo tendremos que lanzar el comando iwlist wlan0  scan:

Como podemos comprobar en la imagen, el resultado es toda la información de los APs. Para conocer el BSSID solo tendremos que mirar el apartado de Address (en el ejemplo que pongo a continuación es "Cell 01 - Address: 00:1A:2B:B1:22:D9") pero además de lo anterior tendremos por ejemplo el ESSID, el canal, la encriptación,...etc.

root@debian8:~# iwlist wlan0  scan
wlan0     Scan completed :
          Cell 01 - Address: 00:1A:2B:B1:22:D9
                    Channel:11
                    Frequency:2.462 GHz (Channel 11)
                    Quality=44/70  Signal level=-66 dBm 
                    Encryption key:on
                    ESSID:"WLAN_84A4"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
                              24 Mb/s; 36 Mb/s; 54 Mb/s
                    Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 48 Mb/s
                    Mode:Master
                    Extra:tsf=000003b33bf79cdf
                    Extra: Last beacon: 820ms ago
                    IE: Unknown: 0009574C414E5F38344134
                    IE: Unknown: 010882848B962430486C
                    IE: Unknown: 03010B
                    IE: Unknown: 2A0100
                    IE: Unknown: 2F0100
                    IE: Unknown: 32040C121860
                    IE: Unknown: 2D1A6C181BFFFF000000000000000000000000000000000000000000
                    IE: Unknown: 3D160B080400000000000000000000000000000000000000
                    IE: Unknown: DD760050F204104A00011010440001021041000100103B00010310470010E2755346C1D53C4F61D32FF95639C3671021000842726F6164636F6D1023000842726F6164636F6D1024000631323334353610420004313233341054000800060050F20400011011000A42726F6164636F6D4150100800020088
                    IE: Unknown: DD090010180202F0050000
                    IE: WPA Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (2) : CCMP TKIP
                        Authentication Suites (1) : PSK
                    IE: Unknown: DD180050F2020101800003A4000027A4000042435E0062322F00
                    IE: Unknown: DD1E00904C336C181BFFFF000000000000000000000000000000000000000000
                    IE: Unknown: DD1A00904C340B080400000000000000000000000000000000000000

lunes, 6 de julio de 2015

Failed to load rt73.bin en Debian

Si disponemos de una tarjeta wifi Ralink RT2501USB tenemos que tener en cuenta que el firmware no está de manera nativa en Debian y lo tendremos que instalar desde los repositorios "non-free".
En un primer momento no me di cuenta de esto porque al verificar mis interfaces wifi con el comando iwconfig me aparecía como disponible:


Sin embargo al lanzar el comando ifconfig wlan0 up me daba un error de "SIOCSIFFLAGS: No se pudo asignar memoria":

root@debian8:~#  ifconfig wlan0 up
SIOCSIFFLAGS: No se pudo asignar memoria

Y cuando lanzaba el comando iwlist wlan0  para ver las redes cercanas me indicaba que la tarjeta estaba caída:

root@debian8:~# iwlist wlan0  scan
wlan0     Interface doesn't support scanning : Network is down

Después de ver estos errores que indicaban que la tarjeta no estaba funcionando verifiqué el estado del firmware con el comando dmesg | grep firmware, obteniendo la siguiente salida:

root@debian8:~# dmesg | grep firmware
[  503.897731] ieee80211 phy0: rt2x00lib_request_firmware: Info - Loading firmware file 'rt73.bin'
[  503.897741] rt73usb 1-2:1.0: firmware: failed to load rt73.bin (-2)
[  503.897745] rt73usb 1-2:1.0: Direct firmware load failed with error -2


Solución

Para solucionar este error deberemos modificar el archivo /etc/apt/sources.list añadiendo el repositorio "main contrib non-free" de nuestra versión (en mi caso era: deb http://http.debian.net/debian/ jessie main contrib non-free)


Después lanzamos el comando apt-get update && apt-get install firmware-ralink para instalar el paquete firmware-ralink

root@debian8:~# apt-get update && apt-get install firmware-ralink
Obj http://ftp.es.debian.org jessie InRelease                                                       
Obj http://ftp.es.debian.org jessie-updates InRelease                                                                                                
Obj http://security.debian.org jessie/updates InRelease                                                                                              
Obj http://ftp.es.debian.org jessie/main Sources                                                          
Obj http://ftp.es.debian.org jessie/main amd64 Packages                                                                   
Obj http://security.debian.org jessie/updates/main Sources                                                                
Obj http://ftp.es.debian.org jessie/main Translation-es                                                                   
Obj http://security.debian.org jessie/updates/main amd64 Packages                                                             
Obj http://ftp.es.debian.org jessie/main Translation-en                                                                       
Obj http://security.debian.org jessie/updates/main Translation-en                                                             
Obj http://ftp.es.debian.org jessie-updates/main Sources                                                                      
Des:1 http://ftp.es.debian.org jessie-updates/main amd64 Packages/DiffIndex [505 B]                 
Des:2 http://ftp.es.debian.org jessie-updates/main Translation-en/DiffIndex [229 B]                 
Des:3 http://http.debian.net jessie InRelease [134 kB]                                                                                                                                        
Des:4 http://http.debian.net jessie/main amd64 Packages [6.768 kB]                                                                                                                            
Des:5 http://http.debian.net jessie/contrib amd64 Packages [50,1 kB]                                                                                                                          
Des:6 http://http.debian.net jessie/non-free amd64 Packages [83,6 kB]                                                                                                                         
Des:7 http://http.debian.net jessie/contrib Translation-en [38,4 kB]                                                                                                                          
Des:8 http://http.debian.net jessie/main Translation-es [314 kB]                                                                                                                              
Des:9 http://http.debian.net jessie/main Translation-en [4.585 kB]                                                                                                                            
Des:10 http://http.debian.net jessie/non-free Translation-en [72,2 kB]                                                                                                                        
Descargados 12,0 MB en 1min 1s (195 kB/s)                                                                                                                                                     
Leyendo lista de paquetes... Hecho
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias      
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes NUEVOS:
  firmware-ralink
0 actualizados, 1 nuevos se instalarán, 0 para eliminar y 1 no actualizados.
Se necesita descargar 22,2 kB de archivos.
Se utilizarán 103 kB de espacio de disco adicional después de esta operación.
Des:1 http://http.debian.net/debian/ jessie/non-free firmware-ralink all 0.43 [22,2 kB]
Descargados 22,2 kB en 15s (1.461 B/s)    
Seleccionando el paquete firmware-ralink previamente no seleccionado.
(Leyendo la base de datos ... 121856 ficheros o directorios instalados actualmente.)
Preparando para desempaquetar .../firmware-ralink_0.43_all.deb ...
Desempaquetando firmware-ralink (0.43) ...
Configurando firmware-ralink (0.43) ...


Tras instalar el paquete firmware-ralink tendremos nuestra tarjeta 100% operativa.

jueves, 2 de julio de 2015

Conectar con sftp desde línea de comandos en linux

Para acceder a un servidor sftp desde línea de comandos usaremos el comando sftp, pudiendo usarlo con un login interactivo o mediante certificado. Este comando viene dentro del paquete openssh-client y para instalarlo por ejemplo en Debian lanzaremos lo siguiente, teniendo permisos de root (aunque en prácticamente todas las instalaciones viene por defecto):

[root@metempsicosis ~]# apt-get install openssh-client

El uso del comando es "sftp <opciones> <usuario@ip-servidor>", teniendo una cantidad mucho más amplia de opciones de las que vamos a tratar en este artículo. Para centrarnos en un caso práctico, si por ejemplo queremos conectarnos a un servidor cuya IP es 19.58.92.102 y el usuario de acceso es rencinar el comando que lanzaríamos sería el siguiente (es necesario estar logados con un usuario que tenga permisos de root):

[root@metempsicosis ~]# sftp  rencinar@19.58.92.102
Connecting to 19.58.92.102...
reverse mapping checking getaddrinfo for 19-58-92-102.rad.tsai.es [19.58.92.102] failed - POSSIBLE BREAK-IN ATTEMPT!
rencinar@19.58.92.102's password:

Como podemos ver nos pedirá una contraseña. Si quisiéramos conectarnos mediante un certificado por ejemplo RSA, lo realizaremos de la siguiente manera (asumiendo que el certificado está en el archivo /home/rencinar/rencinarCertificado.ssh):

[root@metempsicosis ~]# sftp -o "IdentityFile=/home/rencinar/rencinarCertificado.ssh" rencinar@19.58.92.102
Connecting to 19.58.92.102...
reverse mapping checking getaddrinfo for 19-58-92-102.rad.tsai.es [19.58.92.102] failed - POSSIBLE BREAK-IN ATTEMPT!
sftp>

Podemos comprobar que hemos accedido correctamente porque nos aparece el promt “sftp>”. En este momento podremos lanzar ciertos comandos para interaccionar con el servidor. Los más importantes son:
  • ls: Para listar directorios del sftp.
  • cd <directorio>: Para entrar en un directorio.
  • put <archivo/archivos>: Para subir archivos al sftp.
  • get <archivo/archivos>: Para descargar archivos del sftp.

Por ejemplo, si tenemos en el sftp la siguiente estructura /sftp/rencinar y dentro de rencinar queremos subir el archivo rencinarDescarga.doc que está en mi equipo local en la ruta  /home/rencinar/rencinarDescarga.doc, después de establecer la conexión con el sftp como hemos visto antes, realizaríamos lo siguiente:

Listamos los directorios:
sftp> ls
sftp

Entramos en el directorio sftp:
sftp> cd sftp

Volvemos a listar los directorios:
sftp> ls
rencinar

Entramos en renciar:
sftp> cd renciar

Listamos para ver los archivos que tiene:
sftp> ls

Procedemos a subir el archivo:
sftp> put /home/rencinar/rencinarDescarga.doc

Comprobamos que se ha subido correctamente:
sftp> ls
rencinarDescarga.doc

miércoles, 1 de julio de 2015

Sociedades inactivas

Cuando una sociedad no es rentable en este momento pero pensamos que en un momento más propicio lo será o si necesitamos realizar algunos ajustes que requieran parar nuestra actividad, lo recomendable sería ponerla como inactiva. Si por el contrario ya no pensamos en continuar con ninguna actividad mercantilista o si pensamos en posponer la actividad más de un año lo conveniente sería disolver la sociedad.
En España nos encontramos con empresas inactivas cuyo motivo no es otro que el alto coste que tiene disolver una sociedad pero debemos ser conscientes que esta inactividad perpetua es un riesgo para el administrador porque corre con todos los gastos derivados del incumplimiento de las obligaciones fiscales y mercantiles de la sociedad, asuntos que se suelen descuidar en estos casos, además de seguir soportando los costes directos de la inclusión de las cuentas y libros en el registro mercantil. A lo anterior también le sumamos que la legislación ha cambiado hace relativamente poco en este sentido, antes el periodo legal exigible para incurrir en causa de disolución era de 3 años de inactividad pero tras la entrada en vigor del Real Decreto Legislativo 1/2010, de 2 de julio (artículos 360 y siguientes) pasó a ser de 1 año de inactividad y la responsabilidad del incumplimiento de esta obligación también se traslada al administrador. De esta manera si tenemos una sociedad inactiva durante dos años y además tiene deudas, el administrador responderá de manera solidaria con todas las obligaciones de la empresa pudiendo un acreedor reclamarle a él directamente el pago de una deuda aunque en la práctica, si la sociedad no tiene deudas y cumple todas sus obligaciones, podemos estar tranquilos.
Con respecto a la facturación y al IVA una sociedad inactiva no podrá emitir facturas por haber cesado su actividad mercantilista y por tanto tampoco podrá realizar las declaraciones de IVA. Pero si podrá seguir pagando gastos tales como alquileres, leasing, gastos notariales,...etc teniendo que incluir todos estos movimientos en sus libros contables porque está inactiva pero no por ello deja de tener obligaciones contables aunque, como he dicho antes, no sean fiscalmente deducibles.

¿Como poner una empresa como inactiva?

Para indicar que una empresa está inactiva deberemos comunicárselo a la Agencia Tributaria rellenando el modelo 036/037.

¿Que obligaciones tiene?

  • Presentar el  Impuesto de Sociedades, aunque al estar inactiva no deberá consignar ninguna partida en la cuenta de pérdidas y ganancias.
  • Presentar los libros contables en el Registro Mercantil.
  • Depósito de las Cuentas Anuales en el Registro Mercantil.

Además de lo anterior tenemos que tener en cuenta que una empresa inactiva siempre necesita un administrador, pero no es necesario que el administrador esté dado de alta en el régimen de trabajadores autónomos.