GTFOBins
(gtfobins.org)- Eine Liste von Unix-Binärdateien ist nach Funktionen geordnet, und die möglichen Aktionen jeder Binärdatei sind direkt über Detailseiten und Anker-Links erreichbar
- Wiederkehrende Kategorien sind Shell, File read, File write, Command, Inherit, Upload, Download, Reverse shell, Library load und Privilege escalation; bei einigen Einträgen kommt zusätzlich Bind shell vor
- File read und Shell sind sehr breit vertreten, und Werkzeuge wie dd, sed oder sqlite3 beherrschen Lesen und Schreiben zugleich, wodurch die Grenze zu reinen Anzeige-Tools verschwimmt
- Werkzeuge wie apt, git, journalctl und systemctl enthalten häufig Command und Inherit; zudem erscheinen wiederholt multifunktionale Binärdateien wie bee, pipx, sqlmap und die vim-Familie, die Netzwerktransfer und Shell-Aktionen zugleich bieten
- Privilege escalation erscheint nur bei einigen Binärdateien mit eigenem Link; die breite Liste von 7z bis zypper macht die Unterschiede in den Aktionskombinationen gewöhnlicher Tools auf einen Blick sichtbar
Verteilung der wichtigsten Funktionen
- Einträge, die ausschließlich oder überwiegend Dateien lesen, sind sehr breit verteilt
- Es gibt auch sehr viele Einträge mit Shell-Ausführung
- Viele Einträge vereinen File write und Lesen, wodurch die Grenze zu reinen Anzeige-Tools unschärfer wird
- Command-Ausführung oder Rechtevererbung treten häufig bei Paketmanagern, Systemwerkzeugen und interaktiven Programmen auf
- apt, apt-get, git, journalctl, man, systemctl, timedatectl, zless sind typische Vertreter
Multifunktionale Binärdateien
- Multifunktionale Binärdateien, die mehrere Aktionen zugleich beherrschen, tauchen wiederholt auf
-
Multifunktionale Einträge auf Inherit-Basis
- apport-cli, batcat, cargo, crash, gcloud, git, journalctl, man, opencode, psql, run-mailcap, systemd-resolve bündeln zusammen mit Inherit Shell, Command, File read und File write
-
Einträge inklusive Netzwerk und Dateitransfer
-
Editoren- und Debugger-Familie
-
Paketmanager- und Laufzeit-Familie
Netzwerk, Shell und Library load
- Upload-/Download-Funktionen finden sich nicht nur bei Netzwerk-Tools, sondern auch bei Shells und Sprach-Laufzeiten
-
Werkzeuge mit Schwerpunkt auf Transfer
-
Reverse shell und Bind shell
-
Einträge mit Library load
1 Kommentare
Hacker-News-Kommentare
Da es in den Kommentaren etwas Verwirrung zu geben scheint, hier ein Beispiel dafür, wann so etwas im Security-/CTF-Kontext verwendet wird
In Umgebungen mit einer eingeschränkten Shell oder in denen nur bestimmte Befehle/Binaries ausgeführt werden dürfen, lassen sich Argumente meist recht frei übergeben.
Mit GTFOBins kann man dann Dateien lesen/schreiben oder sogar Befehle ausführen und so aus dem eingeschränkten Kontext ausbrechen, um eine Shell zu bekommen.
Wenn jemand sudo offen gelassen oder einem GTFOBin das SUID-Bit gegeben hat, kann man unter Umständen sensible Dateien auf eine Weise lesen oder schreiben und privilegierte Befehle ausführen, an die selbst die Person bei der Konfiguration nicht gedacht hat.
Die Rechteverwaltung ist stark auf Block-Lists und Allow-Lists fokussiert und damit ziemlich primitiv.
Ich habe Claude in einer Sitzung versehentlich powershell-Rechte gegeben, und als danach Tools wie git blockiert wurden, hat es stattdessen powershell-Skripte geschrieben, die dasselbe tun, und so die blockierten Rechte umgangen.
In einem vernünftig konfigurierten System würde man powershell natürlich nicht auf eine allgemeine Allow-List setzen, aber wenn es Lücken in den Freigaben einzelner Tools gibt, scheint man mit den Techniken auf dieser Seite sehr weit zu kommen.
Bei einem Unternehmen, das ich gesehen habe, war die Verteilung so umgesetzt, dass Programme auf einer vom Administrator gepflegten Allowlist ohne Passwort per
sudoausgeführt werden durften, und dort standen von Anfang an Allzweck-Tools wie vim und bash drin.Aus Sicht von jemandem im Homeoffice fühlte sich das fast wie ein Glücksfall an, weil die Software, die meinen Rechner angeblich „schützen“ sollte, es viel einfacher machte, dass jemand etwas ausführt, wenn ich kurz weg war und vergessen hatte, den Bildschirm zu sperren.
Vor ein paar Jahren musste ein Support-Team mit
tcpdumpNetzwerkmitschnitte erstellen, und damit es schnell geht, wurde eine sudo-Regel mit recht weit offenen Argumenten eingerichtet.Weil sich Port oder NIC ändern konnten, wirkte das damals ganz natürlich, aber tatsächlich lässt sich mit der Option
-zvontcpdumpein Kompressionsbefehl angeben, und wenn man dort einen „besonderen“ Befehl einträgt, kann man den Server direkt übernehmen.sudo tcpdump -i any -z '/home/despicable_me/evil_cmd.sh' -w /tmp/dontcare.pcap -G 1 -Z rootDas wirkt harmlos, wird aber wirklich leicht übersehen.
Heutzutage helfen Schichten wie apparmor zwar dabei, solche Risiken zu verringern, aber dafür entstehen andere Probleme, und Fehlkonfigurationen bleiben leicht möglich.
Das letzte Mal, dass ich etwas Ähnliches benutzt habe, war 1995 herum auf einem Windows-3.11-Rechner in der Mittelstufe.
Dort war gesperrt, dass nur einige freigegebene Apps ausgeführt werden durften, und eine davon war Word.
In Word konnte man Makros verwenden und über die Shell andere Apps starten.
Damit wurde aus einem scheinbar gesperrten Rechner mit nur wenigen sichtbaren Apps effektiv ein System, auf dem man alles starten konnte.
Damals war das ziemlich aufregend, und seitdem habe ich so etwas kaum noch gesehen.
Man liest gelegentlich, dass sich kiosk mode auf Touch-Infodisplays in Läden oder Einkaufszentren verlassen lässt; das scheint in dieselbe Kategorie zu fallen.
Als ich
restic - Shell, Command, Uploadgesehen habe, fühlte ich mich ein wenig darin bestätigt, das Backup nicht als root laufen zu lassen.Stattdessen läuft es als normaler Benutzer, bekommt aber nur die read-all-files capability, und eine Login-Shell gibt es nicht.
Auf einem Desktop ist das natürlich vielleicht übertrieben, und wenn ein Angreifer schon so weit gekommen ist, kann er ohnehin fast alle Dateien lesen und dem Backup eine Backdoor unterjubeln.
[0] https://man7.org/linux/man-pages/man7/capabilities.7.html
Gegen entfernte menschliche Angreifer, entfernte Bot-Angreifer und teilweise auch gegen lokale menschliche Angreifer gibt es Gegenmaßnahmen, aber lokale Bot-Angreifer, die selbstständig Code schreiben, sind heute ein viel wichtigeres Bedrohungsmodell als früher.
Das fällt auch nicht ganz in dieselbe Kategorie wie Malware.
Ich habe Container auch schon als Sicherheitsgrenze betrachtet und darin alle internen Prozesse als root laufen lassen, aber mit einem LLM im Spiel kann ich schwer einschätzen, ob Sicherheit auf OS-Ebene plötzlich wichtiger geworden ist oder im Gegenteil an Bedeutung verloren hat.
Ich bin etwas verwirrt: Bedeutet das, dass man, wenn
catnicht vorhanden ist, stattcat /path/to/input-fileeinfachbase64 /path/to/input-file | base64 --decodeverwenden soll?Oder bedeutet es, dass
base64 /path/to/input-file | base64 --decodedie Dateileseberechtigung selbst umgeht?Ein aufgerufener Prozess übernimmt normalerweise einfach die Rechte des Benutzers, der ihn ausführt; eine Ausnahme gibt es nur beim setuid-Bit.
Der Punkt ist, dass man in Umgebungen, die durch das Abschalten von Standard-Unix-Tools die lateral movement von Angreifern verhindern wollen, dieselbe Aufgabe mit anderen Tools erledigen kann.
Es geht nicht darum, die Rechte selbst zu brechen, sondern darum, in einer restricted shell, in der nur einige Befehle erlaubt sind, mit einem anderen Binary dasselbe Ergebnis zu erzielen.
So etwas ist in CTFs wirklich sehr häufig.
Dann kann man
base64mit root-Rechten ausführen, den Dateiinhalt Base64-kodieren und die Ausgabe mit einem anderen base64-Prozess wieder dekodieren; am Ende sieht man den Dateiinhalt.Effektiv ist das nur ein
catmit zusätzlichen Schritten.Ich war früher Maintainer eines dieser Tools, und es war ziemlich lustig zu sehen, wie jemand damit eine Shell bekommt.
Kreativ, unterhaltsam und als Referenzmaterial gut.
Bei
hackthebox.euhabe ich das sehr oft benutzt.GTFOBins gibt es schon ziemlich lange, und es war schon vor KI eine nützliche Ressource.
Der Nutzen von KI besteht am Ende eben auch darin, solche bereits existierenden Ressourcen hochzuholen.
Dass
base64in der Liste steht, verstehe ich nicht ganz.Meines Erachtens kann es doch nur Dateien lesen, auf die der Benutzer ohnehin schon Zugriff hat. Täusche ich mich da?
Oder bedeutet die Beschreibung Umgehung lokaler Sicherheitsbeschränkungen auf fehlkonfigurierten Systemen etwas anderes, als ich denke?
Ein einfaches Beispiel: Selbst wenn die Standard-Shell auf rbash umgestellt wurde, ist das wertlos, wenn der Benutzer einfach
bashstarten und so in eine normale Shell wechseln kann.sudoersso konfiguriert sein, dass base64 als root ausgeführt werden darf.Warum man das tun würde, weiß ich nicht, aber in so einer Situation könnte man damit die beabsichtigten Rechtebeschränkungen umgehen und jede Datei auf dem System lesen.
Oder wenn Claude Code die Ausführung von
base64ohne Prüfung erlaubt, öffnet das womöglich auch den Zugriff auf Geheimnisse wie.env-Dateien.Entweder ist das explizit über
sudo -lerlaubt, oder etwas anderes ruft das Tool als root auf.Es wäre gut, wenn auch Gegenmaßnahmen für solche Umgehungen gezeigt würden.
Wenn man zum Beispiel über
moreeine Shell bekommen kann, dann etwa so:Vor dem Start von
moreSHELLauf/bin/falsesetzen,auf
lessim secure mode wechselnoder beim Einsatz von
morepersudodas NOEXEC-Flag verwenden.Alles andere ist letztlich zu einem gewissen Teil Glückssache.
Ziemlich cool, und es gibt unerwartet kreative Ansätze.
Auf yt-dlp wäre ich zum Beispiel nie gekommen.
Ich sollte wohl nochmal darüber nachdenken, es einfach so installiert zu lassen.