lunes, 2 de mayo de 2016

WifiPineapple Casero - TL-MR3020 (wifi Hack)

Que es WifiPineapple?

Es un "gadget" creado por Hak5, bastante caro, algo asi como $100 dolares o mas, tambien conocido como Jasager, que funciona como un Rogue AP que acepta todas las conexiones wifi, un cliente busca conectarse a una red, sin importar el SSID, este aparato responde "si soy yo, conectate" a todos.
Nosotros vamos a crearlo por un costo mucho menor, y relativamente facil (digo relativamente, porque para quienes esten acostumbrados a manejar linux les va a resultar muy facil, yo soy literalmente nuevo, asique por ahi se me complicaba)

Lista de materiales:

Hardware:
(1) TP-Link TL-MR3020 ver. 1.x (segun algunas fuentes, no funciona si no es 1.7, pero toda la info que lei nunca mencionaron esto)
(2) SanDisk Cruzer Fit USB Flash Drive (8GB) (en algunos manuales dice cualquier pendrive de 8gb, yo por las dudas compre esta que la especificaban en un tutorial)

En este tutorial sera creado por un costo mucho menor, y relativamente facil (digo relativamente, porque para quienes esten acostumbrados a manejar linux les va a resultar muy facil, yo soy literalmente nuevo, asique por ahi se me complicaba)

Lista de materiales:

Hardware:
(1) TP-Link TL-MR3020 ver. 1.x (segun algunas fuentes, no funciona si no es 1.7, pero toda la info que lei nunca mencionaron esto)
(2) SanDisk Cruzer Fit USB Flash Drive (8GB) (en algunos manuales dice cualquier pendrive de 8gb, yo por las dudas compre esta que la especificaban en un tutorial)
Software:
(1) OpenWrt
(2) Wifi Pineapple firmware (con esto hay un temita que vamos a ver mas adelante)
(3) Kali Linux (mi caso) y por momentos Windows.

Paso 1 :
Descargamos OpenWRT (particularmente descargue la ver. 12.09 pero pueden probar una mas reciente) :
12.09/ar71xx/generic/openwrt-ar71xx-generic-tl-mr3020-v1-squashfs-factory.binwget http://downloads.openwrt.org/attitude_adjustment/
Configuramos nuestra IP como estatica y nuestro gateway asi:
IP : 192.168.0.10
Gateway : 192.168.0.1

Conectamos el TL-MR3020 a la computadora mediante el cable ethernet. Por default la IP para acceder al modem es 192.168.0.254. Asi que navegamos a esa direccion.
El usuario y contraseña por default es "admin".
Vamos a "System Tools" -- "Firmware Upgrade" y elegimos el archivo .bin con el firmware que acabamos de descargar.

Paso 2 : Una vez que instalamos OpenWRT, la IP de nuestro mr3020 (el aparatito) cambia a 192.168.1.1.
Configuramos nuevamente nuestra IP como estatica y el gateway a :
IP : 192.168.1.10
Gateway : 192.168.1.1
En nuestro navegador vamos a 192.168.1.1, nos vamos a encontrar con el administrador web LuCi, ahi tenemos que configurar nuestra contraseña, que la vamos a utilizar para accerder via SSH, para eso vamos a la pestaña "System" -- "Administration".
Despues vamos a "System" -- "System" para setear el horario.
ahora tenemos que habilitar el wireless, vamos a la pestaña "Network" -- "Wifi" y le damos a enable.

Ahora tenemos que habilitar el DHCP, vamos a la pestaña "Network" - "Interfaces" - nos deberia aparecer una sola Interfaz, le damos a "Edit" - seleccionamos "DHCP Client" y despues "OpenWrt" clickeando en "Switch Protocol". (Si compro otro MR3020 subo imagenes de esta parte del proceso) Puede que tarde mucho tiempo en actualizarse el sitio, eso es normal. Es porque no puede asignarse una IP. Si tarda mucho continuamos.
Conectamos nuestro TL-MR3020 con el cable ethernet a nuestro modem de internet. y via wifi nos conectamos al TL-MR3020, el SSID es "OpenWrt". Asegurense de tener conexion a internet.
Una vez que tenga la IP, en mi caso 192.168.1.113, nos vamos a poder conectar al TL-MR3020 via ssh.
ssh 192.168.1.113 -lroot
Ingresamos el password que habiamos colocado anteriormente cuando configuramos todo en LuCi
Instalamos los siguientes paquetes :
opkg update
opkg install kmod-usb-storage
opkg install kmod-fs-ext4
opkg install block-mount
Paso 3 : Formateamos nuestro pendrive (8GB) haciendo una particion ext4 y otra swap, por ejemplo 2GB para swap (hacemos primero esta particion - sda1) y 6GB para ext4 (este formato lo hacemos despues para que sea sda2) yo lo hice con Gparted.
Insertamos el pendrive en el TL-MR3020. Y ejecutamos en la consola donde estabamos conectados via ssh los siguientes comandos (linea por linea, cualquier error puede brickear (dejar como ladrillo) nuestro aparato. Yo aca tuve algunos problemas por tener la particion ext4 como sda1.
mkdir -p /mnt/sda2
mount /dev/sda2 /mnt/sda2
mkdir -p /tmp/cproot
mount --bind / /tmp/cproot
tar -C /tmp/cproot -cvf - . | tar -C /mnt/sda2 -xf -
umount /tmp/cproot
umount /mnt/sda2
 Paso 4 :En la consola
/etc/init.d/fstab enable
/etc/init.d/fstab start
Editamos el contenido con vi: vi /etc/config/fstab
 Cambiandolo por esto :
config mount
        option target /
        option device /dev/sda2
        option fstype ext4
        option options rw,sync
        option enabled 1
        option enabled_fsck 0

config swap
        option device /dev/sda1
        option enabled 1
Comandos para vi si no estan familiarizados :
i - modo insertar editar
Esc - salimos del modo editar
:w - escribe y guarda los cambios
:q - salir de vi
y luego reiniciamos con:
reboot

Paso 5 : Apagamos el TL-MR3020 retiramos el Pendrive y lo colocamos en nuestra computadora.
Hacemos un backup del pendrive, haganlo asi porque despues vamos a necesitar las carpetas.
mkdir mr3020
sudo cp -R /media/NOMBREDELPENDRIVE/* ~/mr3020/
sudo cp -R ~/mr3020/lib ~/mr3020/lib-original
***Aclaracion /media/NOMBREDELPENDRIVE/ donde dice NOMBREDELPENDRIVE va a ser una serie alfanumerica aleatoria.
Hagan tambien un backup del directorio /lib.
No retiren el pendrive porque lo vamos a seguir usando.

Paso 6 : IMPORTANTE - Aca hay un temita como mencionaba mas arriba, yo instale la ultima version del firmware del Pineaple (2.3.0), el cual se descarga de la web oficial como todos los demas, pero me di cuenta una vez que tenia todo instalado, que tiene una verificacion cuando hacemos el setup, que todavia no pudimos bypassear con d0t, por lo tanto si tienen ganas de tener su gadget funcionando YA! descarguen la version 2.0.4 o la 2.2.0 (segun un manual mas reciente, desconozco si tiene la misma verificacion) y no la 2.3.0 que es la ultima y que es la que estamos intentando bypassear/crackear.

Descargamos entonces el firmware del Pineapple que queremos, en este caso el 2.0.4 para los ansiosos:
wget -O upgrade-2.0.4.bin https://wifipineapple.com/index.php?downloads&download_mk5_upgrade=2.0.4
 Instalamos el firmware-mod-kit, esto tambien me trajo problemas, hay que agregar repositorios que dejo la lista al final del post, e instalar unas librerias previas para que funcione, por lo tanto primero :
apt-get install git build-essential zlib1g-dev liblzma-dev python-magic
la libreria liblzma-dev me trajo problemas, https://code.google.com/p/firmware-mod-kit/wiki/Documentation?tm=6 https://code.google.com/p/firmware-mod-kit/wiki/Documentation?tm=6 instalen squashfs-tools tambien por las dudas
apt-get install squashfs-tools
Una vez que tenemos todo instalado y los repositorios corregidos, instalamos el firmware-mod-kit (excelente software para hacer ingenieria inversa)
apt-get install firmware-mod-kit
Y extraemos todas las carpetas, librerias y archivos del firmware del Pineapple asi:
/opt/firmware-mod-kit/trunk/extract-firmware.sh upgrade-2.0.4.bin
cd fmk/rootfs
 Nos colocamos en la carpeta donde extrajimos los archivos y copiamos las siguientes a nuestro pendrive.
sudo cp -R bin/* /media/NOMBREDELPENDRIVE/bin/
sudo cp -R sbin/* /media/NOMBREDELPENDRIVE/sbin/
sudo cp -R usr/* /media/NOMBREDELPENDRIVE/usr/
sudo cp -R etc/* /media/NOMBREDELPENDRIVE/etc/
sudo cp -R www/* /media/NOMBREDELPENDRIVE/www/
sudo cp -R pineapple /media/NOMBREDELPENDRIVE/
sudo cp -R lib/firmware/* /media/NOMBREDELPENDRIVE/lib/firmware/
sudo cp lib/* /media/NOMBREDELPENDRIVE/lib/
sudo cp lib/wifi/* /media/NOMBREDELPENDRIVE/lib/wifi/

sudo cp ~/mr3020/etc/config/fstab /media/NOMBREDELPENDRIVE/etc/config/
sudo cp ~/mr3020/etc/passwd /media/NOMBREDELPENDRIVE/etc/
sudo cp ~/mr3020/etc/shadow /media/NOMBREDELPENDRIVE/etc/
sudo cp -R ~/mr3020/lib-original /media/NOMBREDELPENDRIVE/
Paso 6a : Para que nuestra "victima" pueda navegar por internet mediante el Pineapple, necesitamos cambiar el DNS y el Gateway en /etc/config/network (dentro del pendrive) de 172.16.42.1 a 172.16.42.42. Y, el DNS a 8.8.8.8

Paso 7 : Colocamos el pendrive en el TL-MR3020.
Lo conectamos a nuestro router o modem de internet, prendemos el TL-MR3020 y esperamos a que se bootee (todos los leds verdes). Corremos el script "wp5.sh" (Vea el Paso 8) en nuestra computadora. Aca nos van apareciendo opciones que podemos modificar para setear el Pineapple, una vez que terminamos de darle Enter a todo, navegamos a la IP que nos muestra en pantalla. Nos pide la password que habiamos configurado anteriormente.

Paso 8 (Conectividad) : Esta es una de las maneras de conectar el Pineapple (TL-MR3020), via tethering :
Conectamos nuestra computadora a internet via wireless o 3G.
Y conectamos con un cable ethernet el Pineapple a nuestra computadora (todavia hasta donde lei, no se puede conectarle otra tarjeta wifi al mr3020).

Decargamos el script que mencionamos en el Paso 7 a nuestra computadora.
wget http://www.wifipineapple.com/wp5.sh
chmod +x wp5.sh
sudo ./wp5.sh
o armamos el archivo wp5.sh si no funciona la descarga:
#!/bin/bash
#define variables

echo "$(tput setaf 3)  _       ___ _______    ____  _                              __   "
echo " | |     / (_) ____(_)  / __ \\(_)___  ___  ____ _____  ____  / /__ "
echo " | | /| / / / /_  / /  / /_/ / / __ \/ _ \/ __ '/ __ \/ __ \/ / _ \\"
echo " | |/ |/ / / __/ / /  / ____/ / / / /  __/ /_/ / /_/ / /_/ / /  __/"
echo " |__/|__/_/_/   /_/  /_/   /_/_/ /_/\___/\__,_/ .___/ .___/_/\___/ "
echo " $(tput sgr0) OWN the Network                            $(tput setaf 3)/_/   /_/$(tput sgr0)       v2.2"
echo ""

echo -n "Pineapple Netmask [255.255.255.0]: "
read pineapplenetmask
if [[ $pineapplenetmask == '' ]]; then
pineapplenetmask=255.255.255.0 #Default netmask for /24 network
fi

echo -n "Pineapple Network [172.16.42.0/24]: "
read pineapplenet
if [[ $pineapplenet == '' ]]; then
pineapplenet=172.16.42.0/24 # Pineapple network. Default is 172.16.42.0/24
fi

echo -n "Interface between PC and Pineapple [eth0]: "
read pineapplelan
if [[ $pineapplelan == '' ]]; then
pineapplelan=eth0 # Interface of ethernet cable directly connected to Pineapple
fi

echo -n "Interface between PC and Internet [wlan0]: "
read pineapplewan
if [[ $pineapplewan == '' ]]; then
pineapplewan=wlan0 #i.e. wlan0 for wifi, ppp0 for 3g modem/dialup, eth0 for lan
fi

temppineapplegw=`netstat -nr | awk 'BEGIN {while ($3!="0.0.0.0") getline; print $2}'` #Usually correct by default
echo -n "Internet Gateway [$temppineapplegw]: "
read pineapplegw
if [[ $pineapplegw == '' ]]; then
pineapplegw=`netstat -nr | awk 'BEGIN {while ($3!="0.0.0.0") getline; print $2}'` #Usually correct by default
fi

echo -n "IP Address of Host PC [172.16.42.42]: "
read pineapplehostip
if [[ $pineapplehostip == '' ]]; then
pineapplehostip=172.16.42.42 #IP Address of host computer
fi

echo -n "IP Address of Pineapple [172.16.42.1]: "
read pineappleip
if [[ $pineappleip == '' ]]; then
pineappleip=172.16.42.1 #Thanks Douglas Adams
fi

#Display settings
#echo Pineapple connected to: $pineapplelan
#echo Internet connection from: $pineapplewan
#echo Internet connection gateway: $pineapplegw
#echo Host Computer IP: $pineapplehostip
#echo Pineapple IP: $pineappleip
#echo Network: $pineapplenet
#echo Netmask: $pineapplenetmask

echo ""
echo "$(tput setaf 6)     _ .   $(tput sgr0)        $(tput setaf 7)___$(tput sgr0)          $(tput setaf 3)\||/$(tput sgr0)   Internet: $pineapplegw - $pineapplewan"
echo "$(tput setaf 6)   (  _ )_ $(tput sgr0) $(tput setaf 2)<-->$(tput sgr0)  $(tput setaf 7)[___]$(tput sgr0)  $(tput setaf 2)<-->$(tput sgr0)  $(tput setaf 3),<><>,$(tput sgr0)  Computer: $pineapplehostip"
echo "$(tput setaf 6) (_  _(_ ,)$(tput sgr0)       $(tput setaf 7)\___\\$(tput sgr0)        $(tput setaf 3)'<><>'$(tput sgr0) Pineapple: $pineapplenet - $pineapplelan"


#Bring up Ethernet Interface directly connected to Pineapple
ifconfig $pineapplelan $pineapplehostip netmask $pineapplenetmask up

# Enable IP Forwarding
echo '1' > /proc/sys/net/ipv4/ip_forward
#echo -n "IP Forwarding enabled. /proc/sys/net/ipv4/ip_forward set to "
#cat /proc/sys/net/ipv4/ip_forward

#clear chains and rules
iptables -X
iptables -F
#echo iptables chains and rules cleared

#setup IP forwarding
iptables -A FORWARD -i $pineapplewan -o $pineapplelan -s $pineapplenet -m state --state NEW -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE
#echo IP Forwarding Enabled

#remove default route
route del default
#echo Default route removed

#add default gateway
route add default gw $pineapplegw $pineapplewan
#echo Pineapple Default Gateway Configured

#instructions
#echo All set. Now on the Pineapple issue: route add default gw $pineapplehostip br-lan

#ping -c1 $pineappleip
#if [ $? -eq 0 ]; then
#echo "ICS configuration successful."
#echo "Issuing on Pineapple: route add default gw $pineapplehostip br-lan"
#echo "  ssh root@$pineappleip 'route add default gw '$pineapplehostip' br-lan'"
#echo "Enter Pineapple password if prompted"
#ssh root@$pineappleip 'route add default gw '$pineapplehostip' br-lan'
#fi

echo ""
echo "Browse to http://$pineappleip:1471"
echo ""
Ahora si todo va bien, deberiamos poder navegar por internet y deberiamos poder conectarnos al Pineapple, ademas las "victimas" que se conecten al Pineapple deberian poder navegar sin problemas.

Una vez que queremos terminar con el "ataque", corremos el siguiente script creado por Samiux.
antes lo hacemos ejecutable y damos permisos.
chmod +x killwp5.sh
./killwp5.sh
Script killwp5.sh:
#!/bin/bash

# Blueberry - The Wifi Pineapple Mark V, created by Samiux
# killwp5.sh

echo "$(tput setaf 1)  _       ___ _______    ____  _                              __   "
echo " | |     / (_) ____(_)  / __ \\(_)___  ___  ____ _____  ____  / /__ "
echo " | | /| / / / /_  / /  / /_/ / / __ \/ _ \/ __ '/ __ \/ __ \/ / _ \\"
echo " | |/ |/ / / __/ / /  / ____/ / / / /  __/ /_/ / /_/ / /_/ / /  __/"
echo " |__/|__/_/_/   /_/  /_/   /_/_/ /_/\___/\__,_/ .___/ .___/_/\___/ "
echo " $(tput sgr0) OWN the Network                            $(tput setaf 1)/_/   /_/$(tput sgr0)       v2.2"
echo ""
echo ""
echo "Reset the setting of Blueberry - The WiFi Pineapple Mark V - PC Tethering ...."
echo ""
echo "Only for reset the previous setting,"
echo "if you did not run the wp5.sh before, do NOT run this script." 
echo "Otherwise, you cannot connect to the internet."
echo ""
echo "Your current iptables rules ....."
echo ""
iptables -L
echo ""
echo "It will DELETE all iptables rules (if any) ...."
echo ""
echo -n "Are you sure to run this script (Y/N) - [default - Y]? "
read doit
if [[ $doit == '' ]] || [[ $doit == 'Y' ]] || [[ $doit == 'y' ]]; then
        route del -net 172.16.42.0 netmask 255.255.255.0
        iptables -X
        iptables -F
        echo '0' > /proc/sys/net/ipv4/ip_forward
        route -n
        echo "Reset completed!"
        echo ""
        echo "If you do not see any default gateway, you need to reboot your PC."
        echo "Otherwise, you cannot access to the internet."
        echo "It is because you did not run wp5.sh before."
else
        echo ""
        echo "Nothing to do, quit!"
fi
Para tener acceso nuevamente, tenemos que correr ./wp5.sh

Algunos videos interesantes, que fueron tambien fuente:


Videos:
https://www.youtube.com/watch?v=GVmRsXGimag
https://www.youtube.com/watch?v=ttDQQqyVaIA
https://www.youtube.com/watch?v=BiPUryMLn2g

 Notas: no todos los ataques (infusiones) van a funcionar, pero es un lindo proyecto para armar, es importante seguir paso a paso todo, para no "brickear" nuestro mr3020.

Fuentes:
http://samiux.blogspot.com.ar/2014/11/blueberry-wifi-pineapple-mark-v.html LA MAS IMPORTANTE
https://forums.hak5.org/index.php
http://wiki.khairulazam.net/index.php?title=Wifi_Pineapple_Mark_V_on_TP-Link_MR3020
https://code.google.com/p/firmware-mod-kit/
http://semaraks.blogspot.com.ar/
http://wiki.wifipineapple.com/index.php/Main_Page
http://www.symbyote.info/?page_id=291
https://penturalabs.wordpress.com/2013/04/25/blue-for-the-pineapple/

 Repositorios:
deb http://http.kali.org/ /kali main contrib non-free
deb http://http.kali.org/ /wheezy main contrib non-free
deb http://http.kali.org/kali kali-dev main contrib non-free
deb http://http.kali.org/kali kali-dev main/debian-installer
deb-src http://http.kali.org/kali kali-dev main contrib non-free
deb http://http.kali.org/kali kali main contrib non-free
deb http://http.kali.org/kali kali main/debian-installer
deb-src http://http.kali.org/kali kali main contrib non-free
deb http://security.kali.org/kali-security kali/updates main contrib non-free
deb-src http://security.kali.org/kali-security kali/updates main contrib non-free
deb http://repo.kali.org/kali kali-bleeding-edge main
Aca esta lo que mencionaba en el paso 6 con el nuevo firmware:
Como metodo de seguridad para evitar robos (y lo mas seguro, tambien falsificaciones), hak5 añadio un metodo fisico de seguridad. El tl-mr3020 no tiene los 4 leds de colores que trae el WifiPineapple original, por lo tanto no sabemos que leds estan prendidos, ni cuales parpadean, ni cuales estan apagados, por lo tanto no podemos ingresar el patron que nos solicita para continuar. Se supone que en las versiones anteriores de firmware no lo pide. Por eso con d0t estamos mirando como hacer una ingenieria inversa para bypassear este patron, para hacerlo hay que revisar todos los archivos del firmware luego de que los extraemos con el Firmware-mod-toolkit. Si alguno sabe como hacerlo bienvenido sea.
- https://github.com/PenturaLabs/web-interface (No probe aun)
- https://github.com/PenturaLabs/Pineapple-Confs (Tampoco probe esto)