Skip to content

2. Identifizieren und Interagieren mit API

Wie identifiziert man API Endpunkte

  • Man kann schon viele Infos sammeln indem man nur einfach die Anwendung durchstöbert
    • Selbst wenn es eine Dokumentation gibt lohnt sich das weil diese manchmal einfach veraltet sind
  • Mit dem Burp Scanner kann man Anwendungen crawlen und anschließend manuell durchstöbern
  • Muster wie /api/ könnten Auskunft über die Dokumentation liefern
  • Javascript Dateien enthalten oft Referenzen auf API Endpoints die im Browser gar nicht direkt ausgelöst werden
    • Burp Scanner extrahiert automatisch einige Endpoints beim crawlen
    • Für eine tiefere Ektraktion kann man mit JS Link Finder BApp benutzen

Interaktion mit API-Endpoints

  • Mit Repeater oder Intruder
  • API testen - HTTP Methoden oder Medientyp ändern und schauen wie es reagiert
  • Fehlermeldungen genau prüfen weil enthalten oft Infos

Unterstützte HTTP-Methoden identifizieren

Die HTTP-Methode gibt an, welche Aktion auf einer Ressource ausgeführt wird. Beispiele: - GET -> Ruft Daten ab - PATCH -> Ändert Daten teilweise - OPTIONS -> Liefert Informationen darüber, welche Methoden erlaubt sind

Unterstützte Content-Types identifizieren

  • API-Endpoints erwarten oft Daten in einem bestimmten Format.
  • Je nach Content-Type kann sich das Verhalten der API ändern.
  • Durch Ändern des Content-Types kannst du z. B.:

    • Fehler provozieren, die nützliche Infos preisgeben.
    • Schwache Abwehrmechanismen umgehen.
    • Unterschiede in der Verarbeitungslogik ausnutzen.
      • Beispiel: JSON-Verarbeitung ist sicher, aber XML-Verarbeitung erlaubt Injections.
  • Vorgehen:

    • Im Content-Type-Header den Typ ändern.
    • Den Request-Body passend dazu umformatieren.
  • Mit dem Content Type Converter BApp kannst du Daten automatisch zwischen XML und JSON konvertieren.

Lab: Finding and exploiting an unused API endpoint

!!Nachträglich dokumentieren!!

Using Intruder to find hidden endpoints

Wir können den Intruder nutzen und eigene Payloads draufladen um PATHS zu bruteforcen - z. B. mit mehreren Wordlisten bzw. HTTP Befehlen

§PATCH§ /§api§/§products§/§1§/§price§ HTTP/2
Host: 0ad300850399877881047ffd00e70095.web-security-academy.net

Finding hidding parameters

Um tiefer in der API zu suchen kann man den Inhalt der Endpunkte mit Tools abchecken - manchmal gibt es undokumentierte Parameter die, die API trotzdem nutzen kann.

  • Burp Intruder

    • Kann mit einer Wordlist gängiger Parameternamen systematisch Parameter testen.
  • Param Miner BApp

    • Errät automatisch bis zu 65.536 Parameternamen pro Request.
  • Content Discovery Tool

    • Deckt Inhalte auf, die nicht direkt verlinkt sind.
    • Hilft ebenfalls beim Aufspüren versteckter Parameter.

Mass assignment vulnerabilities

Mass assignment bedeutet, dass die Entwickler z. B. den Namen ändern lassen wollten, aber man kann verschiedene zusätzliche Parameter mitschicken falls es die gibt, weil nicht validiert wird.

Beispiel: GET /api/users/123

Antwort:

{
  "id": 123,
  "username": "wiener",
  "email": "wiener@example.com",
  "isAdmin": false,
  "credits": 5000
}

Offiziell darf man z. B. nur username und email ändern.
Aber wenn man einen PATCH baut wie:

{
  "username": "wiener2",
  "isAdmin": true,
  "credits": 999999
}

Lab: Exploiting a mass assignment vulnerability

  1. Wir rufen erstmal ganz viele Methoden und Funktionen auf und analysieren hinterher was uns der Server so sagt - Wir sehen ein
    • POST Request mit API URL
    • GET Request mit API URL mass_assignment1.png

mass_assignment2.png 2. Wir passen dann den POST Request an - hier haben wir item_price auf 0 gesetzt, aber alternativ würde sich auch der discount auf 100% setzen lassen. Ab da hat man freien Spielraum mass_assignment3.png