API
Manchmal sind Dokumentationen zu API's auf bestimmten Seiten und können so leicht eingesehen werden:
/api
/swagger/index.html
/openapi.json
OpenAPI Parser aus dem BApp Store.
Es ist auch immer sinnvoll zu testen, welche Methoden erlaubt sind. Beispielsweise die drei Methoden: GET, POST und DELETE können mit dem selben link unterschiedliche Aktionen ausführen.
Meistens erwarten API Endpunkte Daten in einem bestimmten Format, ein anderes kann zu unerwarteten Ergebnissen führen. Hierbei kann auch der Content type converter aus dem BApp Store helfen.
Auch ist es möglich, bei Anfragen zusätzliche Attribute hinzuzufügen, wenn man weiß wie ein Objekt aufgebaut ist. Beispielsweise mit dem PATCH Request ist es möglich die Email eines Nutzers upzugraden. Dazu wird das folgende JSON Objekt gesendet:
{
"username": "wiener",
"email": "wiener@example.com"
}
{
"id": 123,
"name": "John Doe",
"email": "john@example.com",
"isAdmin": "false"
}
Server-side parameter pollution
Manchmal kontaktieren manche Webapplikationen Intern APIs. Dies passiert, ohne dass der Nutzer dies mitbekommt. Dies kann aber ausgenutzt werden.
Um nach Server-side parameter pollution in einer URL zu suchen, können die Zeichen #, & und = benutzt werden. Um dieses Szenario zu verdeutlichen kann man sich den folgenden Request vorstellen, welcher Nutzer Informationen abfragt:
GET /userSearch?name=peter&back=/home
GET /users/search?name=peter&publicProfile=true
# Zeichen url enkodiert werden und hinter dem Namen eingefügt werden. Dadurch werden die folgenden Parameter nicht mehr als Parameter gesehen und es kann in diesem Fall auch auf nicht öffentliche Profile zugegriffen werden.
Überschreiben von existierenden Parametern
Das überschreiben ist auch möglich. Beispielsweise kann der folgende Request URL enkodiert geschickt werden um den Parameter Namen zu überschreiben.
GET /userSearch?name=peter&name=carlos&back=/home
peter,carlos was wahrscheinlich zu einem invalid username führt.
- Node.js / express wertet nur den ersten Parameter aus. Hier wird nur nach peter gesucht.
Server-side parameter pollution in REST
In Rest APIs kann es dass die Parameter in dem URL Pfad anstatt des Query Strings. Dabei wird dann die Webapp abgefragt mit der folgenden Anfrage:
GET /edit_profile.php?name=peter
GET /api/private/users/peter
path traversal Attacke.
Server-side parameter pollution in struckturierten Datenformaten
Mit strukturierten Datenformaten sieht es schon anders aus. Hier muss das Format an das strukturierte Datenformat angepasst werden, zumeist XML oder JSON.
POST /myaccount
name=peter
POST Request wird dann bei der Anfrage an die interne API das folgende:
PATCH /users/7312/update
{"name": "peter"}