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.

Methode
Beschreibung

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

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.

Operation
HTTP-Methode
Beschreibung

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

Tool
Beschreibung

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