HTTP Methoden
HTTP Methoden (HTTP Methods)
HTTP stellt verschiedene Methoden zur Verfügung, mit denen der Client mit Ressourcen auf dem Webserver interagieren kann. Diese Methoden definieren die Art der gewünschten Aktion, wie etwa das Abrufen, Ändern oder Löschen von Daten.
GET
Fordert eine Ressource vom Server an. Die Daten (Parameter) werden in der URL übergeben.
POST
Sendet Daten an den Server, meist zur Erstellung oder Verarbeitung (z. B. Formularabsendungen). Die Daten werden im Body übertragen.
PUT
Erstellt oder ersetzt eine Ressource vollständig.
PATCH
Teilweise Aktualisierung einer bestehenden Ressource. Wird verwendet, wenn nur einzelne Felder geändert werden sollen.
DELETE
Löscht eine Ressource.
HEAD
Wie GET, aber ohne Response-Body. Wird z. B. zur Prüfung verwendet, ob eine Ressource existiert.
OPTIONS
Zeigt an, welche Methoden für eine bestimmte Ressource unterstützt werden. Wichtig für CORS und API-Analysen.
HTTP Basic Authentication
Basic Auth ist ein einfacher Authentifizierungsmechanismus, bei dem der Client Benutzername und Passwort in Base64 kodiert im Authorization
-Header mitsendet.
Beispiel:
httpKopierenBearbeitenAuthorization: Basic YWRtaW46YWRtaW4= # entspricht "admin:admin"
Authentifizierung per cURL:
bashKopierenBearbeiten$ curl -u admin:admin http://<SERVER_IP>:<PORT>/ # Standard Basic Auth
$ curl -H 'Authorization: Basic YWRtaW46YWRtaW4=' http://<SERVER_IP>:<PORT>/ # Manuell
$ curl http://admin:admin@<SERVER_IP>:<PORT>/ # Zugangsdaten in URL
Hinweis: Basic Auth sollte niemals ohne HTTPS verwendet werden, da die Zugangsdaten sonst im Klartext übertragbar und anfällig für MITM-Angriffe sind.
GET vs. POST Requests
GET Request
Parameter werden in der URL übergeben
Anfragen sind im Browser-Cache und Server-Logs sichtbar
Eignet sich nur für lesende Operationen
Begrenzung auf ~2.000 Zeichen (je nach Server/Browser)
Beispiel:
bashKopierenBearbeiten$ curl "http://<SERVER_IP>:<PORT>/search.php?search=le" # GET mit URL-Parametern
POST Request
Parameter werden im Body der Anfrage übertragen
Geeignet für vertrauliche Daten (z. B. Login-Formulare, Dateiuploads)
Kein URL-Limit
Server-Logs enthalten keine sensiblen Daten im URL-Pfad
Beispiel:
bashKopierenBearbeiten$ curl -X POST -d 'username=admin&password=admin' http://<SERVER_IP>:<PORT>/ # Login per POST
$ curl -L -X POST ... # Mit -L folgt cURL möglichen Redirects nach Login
Authentifizierung per Session-Cookie
Viele Webanwendungen verwenden Session-Cookies, um Benutzer nach der Authentifizierung eindeutig zu identifizieren. Der Server sendet dem Client nach erfolgreichem Login ein Set-Cookie
, das vom Client bei weiteren Requests wieder mitgesendet wird.
Beispiel-Header nach Login:
httpKopierenBearbeitenSet-Cookie: PHPSESSID=abc123; path=/
Verwendung des Cookies mit cURL:
bashKopierenBearbeiten$ curl -b 'PHPSESSID=abc123' http://<SERVER_IP>:<PORT>/ # Cookie mit -b
$ curl -H 'Cookie: PHPSESSID=abc123' http://<SERVER_IP>:<PORT>/ # Cookie als Header
Sicherheitshinweis:
Session-Cookies sind zentrale Angriffspunkte:
Session Hijacking (z. B. via XSS oder MITM)
Session Fixation (vorgegebener Session-Wert)
Unzureichende Session-Invaliderung beim Logout
JSON-Daten in POST Requests
Moderne Webanwendungen und APIs verwenden häufig JSON als Datenformat. In diesen Fällen muss der Content-Type
korrekt auf application/json
gesetzt werden.
Beispiel:
bashKopierenBearbeiten$ curl -X POST -d '{"search":"london"}' \
-H 'Content-Type: application/json' \
-b 'PHPSESSID=abc123' \
http://<SERVER_IP>:<PORT>/search.php
Wird Content-Type
nicht korrekt gesetzt, kann der Server die Daten ignorieren oder einen Fehler zurückgeben.
CRUD mit REST-API
CRUD steht für die vier Basisoperationen in der Datenverarbeitung:
Create (Erstellen)
Read (Lesen)
Update (Aktualisieren)
Delete (Löschen)
Diese Operationen werden in RESTful APIs direkt über HTTP-Methoden abgebildet.
Create
POST
Neue Ressource erstellen
Read
GET
Bestehende Ressource lesen
Update
PUT
Ressource vollständig ersetzen
Delete
DELETE
Ressource löschen
READ
bashKopierenBearbeiten$ curl http://<SERVER_IP>:<PORT>/api.php/city/london
CREATE
bashKopierenBearbeiten$ curl -X POST -d '{"city_name":"HTB_City","country_name":"HTB"}' \
-H 'Content-Type: application/json' \
http://<SERVER_IP>:<PORT>/api.php/city/
UPDATE
bashKopierenBearbeiten$ curl -X PUT -d '{"city_name":"NewCity","country_name":"UK"}' \
-H 'Content-Type: application/json' \
http://<SERVER_IP>:<PORT>/api.php/city/london
DELETE
bashKopierenBearbeiten$ curl -X DELETE http://<SERVER_IP>:<PORT>/api.php/city/NewCity
Wichtig: In produktiven Umgebungen sollte jeder API-Endpunkt durch Authentifizierungsmechanismen (z. B. Cookie, Token, JWT) geschützt sein. Fehlende Authentifizierung kann zu kritischen Schwachstellen führen, wie:
Unauthenticated Resource Manipulation
Insecure Direct Object References (IDOR)
Privilege Escalation
Relevante Tools zur HTTP-Analyse
curl
Flexibler CLI-HTTP-Client
httpie
Komfortablerer HTTP-Client mit JSON-Highlighting
Burp Suite
Interaktiver Web-Proxy für Analyse und Modifikation
ZAP Proxy
OWASP-Tool für automatisierte Web-Scans
jq
CLI-Tool zur Formatierung und Filterung von JSON-Ausgaben
Postman
GUI-Client für API-Tests
Browser DevTools
Anzeige von HTTP-Traffic, Headern, Cookies & Storage
Sicherheitshinweise für HTTP-Pentests
Unverschlüsselte Basic Auth erlaubt Credential-Sniffing bei HTTP-Traffic.
Überprüfe unterstützte Methoden:
bashKopierenBearbeiten$ curl -X OPTIONS http://<SERVER_IP>/api.php/resource -i
→ Zeigt z. B.
Allow: GET, POST, PUT, DELETE
Test auf ungeschützte Methoden wie PUT/DELETE ohne Authentifizierung.
Session Handling analysieren: Ist ein Session Fixation möglich? Werden Sessions nach Logout korrekt invalidiert?
Authorization Header prüfen:
httpKopierenBearbeitenAuthorization: Bearer <JWT oder Token>
Rate Limiting & Brute-Force-Protection: Fehlen diese Mechanismen, ist ein Angriff über Passwortlisten (z. B. Hydra) möglich.
Content-Type Manipulation: API nimmt JSON – was passiert bei
Content-Type: text/plain
?
Last updated