BadCorp

énumération reverse hydra suid command injection

  • Nom machine : BadCorp

  • Difficulté : Difficile

  • OS : Linux

Enumération

NMAP

Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-19 05:48 EDT
Nmap scan report for 192.168.210.133
Host is up (0.033s latency).
Not shown: 65532 closed tcp ports (conn-refused)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     Pure-FTPd
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey: 
|   2048 74:ba:20:23:89:92:62:02:9f:e7:3d:3b:83:d4:d9:6c (RSA)
|   256 54:8f:79:55:5a:b0:3a:69:5a:d5:72:39:64:fd:07:4e (ECDSA)
|_  256 7f:5d:10:27:62:ba:75:e9:bc:c8:4f:e2:72:87:d4:e2 (ED25519)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: BadCorp| Html5 Agency template
|_http-server-header: Apache/2.4.38 (Debian)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

HTTP (80)

Nous visitons la page et trouvons rien de véritablement intéressant. Nous avons trouvé une adresse mail, ce qui nous conduit à un nom de domaine : badcorp.lo. Nous l'avons ajouté au fichier /etc/hosts puis avons mené une énumération de sous-domaine et de répertoires. Sans résultats.

La seule page nous fournissant quelques informations est la page about.html, nous avons des noms et des numéros de téléphones...

On va récupérer ces noms afin d'en créer une liste d'username puis essayer de buteforce avec hydra.

Même principe avec les autres utilisateurs

Bingo !

Accès initial

Nous avons besoin d'une passphrase.

Elévation des privilèges

Nous allons chercher le mot de passe. Avec la commande strings nous ne trouvons rien d'intéressant, nous allons donc télécharger le fichier sur notre machine.

Reverse

Nous avons chargé le programme, ajouté un argument, et deassemblé deux fonctions : main et check. Ici check nous intéresse, nous devons savoir quelles sont les valeurs contenu dans les registres avant l'appel de la fonction strcmp.

Nous allons mettre un breakpoint à l'adresse 0x000055555555554d (call 0x555555555090 strcmp@pltenvelope)

Nous allons voir ce que contient le registre rsi (présent deux lignes au dessus avec comme nom de variables "pw")

Le password semble encodé. Une ligne nous intéresse dans le code précédement déassemblé : xor $0xc,%eax. La clé XOR est 0xc.

Nous pouvons décoder le mot de passe.

Revenons à notre binaire sur notre victime

Grâce à la commande string nous pouvons voir ce que fait le programme.

Le binaire copie les fichier présents dans le dossier FTP puis copier dans /var/logs/hoswald/, nous allons voir si nous pouvons injecter des commandes en uploadant des fichier par ftp.

root !

Nous n'avons plus qu'à upload: "1;bash;1"

Nous pouvons aussi uploader par exemple : $(whoami)

Mis à jour