Sybaris

redis Shared Object Binary so

  • Nom machine : Sybaris

  • Difficulté : Intermédiaire

  • OS : Linux

Enumération

NMAP

Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-07-24 05:20 EDT
Nmap scan report for 192.168.212.93
Host is up (0.035s latency).
Not shown: 65519 filtered tcp ports (no-response)
PORT      STATE  SERVICE   VERSION
20/tcp    closed ftp-data
21/tcp    open   ftp       vsftpd 3.0.2
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to 192.168.45.217
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 5
|      vsFTPd 3.0.2 - secure, fast, stable
|_End of status
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_drwxrwxrwx    2 0        0              25 Jul 24 09:23 pub [NSE: writeable]
22/tcp    open   ssh       OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey: 
|   2048 21:94:de:d3:69:64:a8:4d:a8:f0:b5:0a:ea:bd:02:ad (RSA)
|   256 67:42:45:19:8b:f5:f9:a5:a4:cf:fb:87:48:a2:66:d0 (ECDSA)
|_  256 f3:e2:29:a3:41:1e:76:1e:b1:b7:46:dc:0b:b9:91:77 (ED25519)
53/tcp    closed domain
80/tcp    open   http      Apache httpd 2.4.6 ((CentOS) PHP/7.3.22)
|_http-title: Sybaris - Just another HTMLy blog
|_http-server-header: Apache/2.4.6 (CentOS) PHP/7.3.22
|_http-generator: HTMLy v2.7.5
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
| http-robots.txt: 11 disallowed entries 
| /config/ /system/ /themes/ /vendor/ /cache/ 
| /changelog.txt /composer.json /composer.lock /composer.phar /search/ 
|_/admin/
6379/tcp  open   redis     Redis key-value store 5.0.9
10091/tcp closed unknown
10092/tcp closed unknown
10093/tcp closed unknown
10094/tcp closed unknown
10095/tcp closed unknown
10096/tcp closed unknown
10097/tcp closed unknown
10098/tcp closed unknown
10099/tcp closed unknown
10100/tcp closed itap-ddtp

FTP

Comme vu sur le scan nmap, nous pouvons nous connecter en anonyme. Il y a un directoire et nous pouvons uploader des fichiers. Cela peut être intéressant pour plus tard. Si par exemple nous pouvons accéder au fichier uploader via un site web ou bien un autre service.

HTTP (80) : Apache httpd 2.4.6

HTTPy

Nous avons lancé un scan gobuster

Le fichier robots.txt nous fourni pas mal d'informations

Redis (6379) : Redis key-value store 5.0.9

Une recherche Hacktricks nous fourni plus amples informations et nous explique comment l'exploiter manuellement.

Accès initial

Redis

Cloner le repository GitHub :

Transférer le fichier par FTP

Au même moment :

Elévation des privilèges

Bibliothèque partagée

Nous allons débuter par une énumération manuelle. Le fichier /etc/crontab est intéressant :

/usr/bin/log-sweeper s'exécute toutes les minutes en tant que root.

Il ne parvient pas à trouver la bibliothèque partagée utils.so : pourrions-nous la compromettre ?

Nous pouvons trouver utils.so également grâce à la commande strings.

Ainsi que :

Revenons à notre fichier crontab, le binaire recherche le fichier .so à partir du chemin :

Il s'agit ici de regarder les droits de chaque dossier pour savoir si nous avons les droits en écritures. C'est le cas de /usr/local/lib/dev. L'exécution de linpeas.sh permet également de le mettre en avant.

Nous nous aidons d'HackTricks pour comprendre comment l'exploiter

Et également :

Nous créeons sur notre machine le fichier utils.c :

Sans la ligne : static void inject() __attribute__((constructor)); le code ne fonctionne pas.

D'après chatgpt : "Attribut constructor : L'attribut constructor permet à la fonction inject de s'exécuter automatiquement lors du chargement du programme ou de la bibliothèque. "

Nous le compilons puis lancons un serveur python au port 80:

Nous le téléchargeons sur la cible dans le dossier /usr/local/lib/dev :

Nous sommes root !

Mis à jour