
Python-Exploit für CVE-2019-6340, das die Drupal 8 RESTful API anvisiert, um durch manipulierte HTTP-Anfragen eine Remotecodeausführung zu erreichen. Enthält Docker-Setup und Befehlsinjektions-Payload.
CVE 2019-6340
Die Website als Drupal 8 Core RESTful API Services Modul wird aktiviert und erlaubt dem Benutzer, GET-, PATCH- oder POST-Anfragen an den Server zu senden.
(Eine GET-Anfrage reicht aus, um die Codeausführung-Schwachstelle auszulösen, auch wenn die PATCH-Methode deaktiviert ist.)
Die Website hat ein weiteres Webservice-Modul aktiviert wie JSON-API in Drupal 8 oder REST Services in Drupal 7.
ANFORDERUNGEN FÜR POC
DOCKER.IO
DRUPAL 8.6.9
SQL 5.7
docker run -d --name mysqldb -e MYSQL_ROOT_PASSWORD=password mysql:5.7
docker run -d --name drupal --link mysqldb -p 8090:80 -e MY_SQL_USER:root -e MY_SQL_PASSWORD:password drupal:8.6.9
exp run Befehl
python3 exp.py http://Ip_of_drupal_container:port_assigned(if)// "command_to_execuite"
Beispiel:- python3 exp.py http://127.0.0.1:8090/ "hostname -I"
EXP ANALYSE
Guzzle ist ein PHP HTTP-Client, der das Senden von HTTP-Anfragen erleichtert und die Integration mit Webservices trivial macht. Er wird als Exploit verwendet, um böswillige Anfragen an Drupal-basierte Websites zu senden. Wenn wir das Guzzle-Skript im Exploit-Code (exp.py) analysieren, stellen wir fest, dass eine "command"-Zeichenkette durch den Befehl ersetzt wird, den wir zur Laufzeit übergeben (z.B. hostname -I).

Wenn wir den exp-Befehl ausführen, sucht er zuerst nach einem vorhandenen Knoten, also müssen wir einige Knoten auf unserer Website erstellen – im Grunde müssen Sie etwas Inhalt auf der Website hinzufügen.

Es wird keinen Knoten zweimal zugreifen. Angenommen, Sie haben 5 Knoten hinzugefügt, dann müssen Sie nach fünfmaligem Ausführen Ihres Exploits Ihre Knoten aktualisieren. Gehen Sie einfach zu Inhalt und wenden Sie eine beliebige Aktion auf die Knoten an.
ANFRAGE UND ANTWORT

