
Ein Tool zur Überprüfung von Endpunkten, die in offengelegten (Swagger/OpenAPI) Definitionsdateien definiert sind.

sj ist ein Kommandozeilenwerkzeug, das bei der Überwachung von freigegebenen Swagger/OpenAPI-Definitionsdateien hilft, indem es die zugehörigen API-Endpunkte auf schwache Authentifizierung prüft. Außerdem stellt es Befehlsschablonen für manuelle Schwachstellentests bereit.
Es tut dies, indem es die Definitionsdatei nach Pfaden, Parametern und akzeptierten Methoden parst und die Ergebnisse dann mit einem von fünf Unterbefehlen verwendet:
automate - Erstellt eine Reihe von Anfragen und analysiert den Statuscode der Antwort.prepare - Generiert eine Liste von Befehlen für manuelle Tests.endpoints - Generiert eine Liste der rohen API-Routen. Pfadwerte werden nicht durch Testdaten ersetzt.brute - Sendet eine Reihe von Anfragen an ein Ziel, um Operationsdefinitionen basierend auf häufig verwendeten Dateipfaden zu finden.convert - Konvertiert eine Definitionsdatei von v2 zu v3.Um aus dem Quellcode zu kompilieren, stellen Sie sicher, dass Go Version >= 1.22.5 installiert ist, und führen Sie go build im Repository aus:
$ git clone https://github.com/BishopFox/sj.git
$ cd sj/
$ go build .
Um die neueste Version des Tools zu installieren, führen Sie folgenden Befehl aus:
$ go install github.com/BishopFox/sj@latest
# Hinweis: Möglicherweise müssen Sie den Pfad zu Ihren Go-Binärdateien in Ihrer PATH-Umgebungsvariable ablegen:
$ export PATH=$PATH:~/go/bin
Verwenden Sie den Befehl
automate, um eine Reihe von Anfragen an jeden definierten Endpunkt zu senden und den Statuscode jeder Antwort zu analysieren.
$ sj automate -u https://petstore.swagger.io/v2/swagger.json -qi -p http://127.0.0.1:8080
Gathering API details.
Title: Swagger Petstore
Description: This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.
✓ GET 200 /v2/pet/findByStatus
✓ GET 200 /v2/user/logout
⚠ POST 400 /v2/user/createWithArray
⚠ POST 400 /v2/store/order
✗ GET 404 /v2/store/order/1
⚠ POST 400 /v2/pet
⚠ PUT 415 /v2/pet
⚠ POST 400 /v2/user/createWithList
✗ GET 404 /v2/user/bishopfox
⚠ PUT 415 /v2/user/bishopfox
⚠ POST 400 /v2/user
⚠ POST 415 /v2/pet/1/uploadImage
✓ GET 200 /v2/pet/findByTags
✗ GET 404 /v2/pet/1
⚠ POST 415 /v2/pet/1
✓ GET 200 /v2/store/inventory
✓ GET 200 /v2/user/login
Sie können das Flag --replay-proxy verwenden, um übereinstimmende Anfragen über einen separaten Proxy (z. B. Burp Suite) erneut zu senden. Dadurch können Sie den gesamten Datenverkehr über einen Proxy (oder direkt) leiten und nur interessante Ergebnisse an Ihren Abfangproxy senden:
$ sj automate -u https://petstore.swagger.io/v2/swagger.json -qi --replay-proxy http://127.0.0.1:8080
Sie können es auch mit --proxy kombinieren, um den Scanverkehr über einen anderen Proxy zu leiten, während Übereinstimmungen an Burp weitergeleitet werden:
$ sj automate -u https://petstore.swagger.io/v2/swagger.json -qi -p http://proxy:9090 --replay-proxy http://127.0.0.1:8080
Sie können auch eine ausführliche Ausgabe anfordern, um die teilweise (oder vollständige) Antwort zu sehen:
$ sj automate -u https://petstore.swagger.io/v2/swagger.json -qi -p http://127.0.0.1:8080 -v
Gathering API details.
Title: Swagger Petstore
Description: This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.
✗ GET 404 /v2/user/bishopfox
{"code":1,"type":"error","message":"User not found
⚠ PUT 415 /v2/user/bishopfox
{"code":415,"type":"unknown","message":"com.sun.je
✓ GET 200 /v2/user/logout
{"code":200,"type":"unknown","message":"ok"}
⚠ POST 400 /v2/user/createWithArray
{"code":400,"type":"unknown","message":"bad input"
⚠ POST 400 /v2/user/createWithList
{"code":400,"type":"unknown","message":"bad input"
✗ GET 404 /v2/pet/1
{"code":1,"type":"error","message":"Pet not found"
⚠ POST 415 /v2/pet/1
{"code":415,"type":"unknown"}
✓ GET 200 /v2/store/inventory
{"sold":117,"string":26,"invalidStatus":1,"-1":1,"
⚠ POST 400 /v2/store/order
{"code":400,"type":"unknown","message":"bad input"
✓ GET 200 /v2/user/login
{"code":200,"type":"unknown","message":"logged in
⚠ POST 400 /v2/pet
{"code":400,"type":"unknown","message":"bad input"
⚠ PUT 415 /v2/pet
{"code":415,"type":"unknown","message":"com.sun.je
✓ GET 200 /v2/pet/findByStatus
[]
✓ GET 200 /v2/pet/findByTags
[]
✗ GET 404 /v2/store/order/1
{"code":1,"type":"error","message":"Order not foun
⚠ POST 400 /v2/user
{"code":400,"type":"unknown","message":"bad input"
⚠ POST 415 /v2/pet/1/uploadImage
{"code":415,"type":"unknown"}
Verwenden Sie den Befehl
prepare, um eine Liste von Befehlen für manuelle Tests vorzubereiten. Unterstützt derzeit sowohlcurlals auchsqlmap. Sie müssen diese wahrscheinlich geringfügig anpassen.
$ sj prepare -u https://petstore.swagger.io/v2/swagger.json -qi -p http://127.0.0.1:8080
INFO[0000] Gathering API details.
Title: Swagger Petstore
Description: This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.
$ curl -X POST "https://petstore.swagger.io/v2/pet/{petId}"
$ curl -X GET "https://petstore.swagger.io/v2/pet/{petId}"
$ curl -X GET "https://petstore.swagger.io/v2/store/inventory"
$ curl -X POST "https://petstore.swagger.io/v2/user/createWithList" -d 'body=1'
$ curl -X GET "https://petstore.swagger.io/v2/user/logout"
$ curl -X POST "https://petstore.swagger.io/v2/user/createWithArray" -d 'body=1'
$ curl -X GET "https://petstore.swagger.io/v2/pet/findByStatus"
$ curl -X GET "https://petstore.swagger.io/v2/pet/findByTags"
$ curl -X POST "https://petstore.swagger.io/v2/store/order" -d 'petId=1&quantity=1&shipDate=bishopfox&status=bishopfox&complete=1&id=1&body='
$ curl -X POST "https://petstore.swagger.io/v2/pet/{petId}/uploadImage"
$ curl -X POST "https://petstore.swagger.io/v2/pet" -d 'photoUrls=1&tags=1&status=bishopfox&id=1&category=&name=doggie&body='
$ curl -X PUT "https://petstore.swagger.io/v2/pet" -d 'id=1&category=&name=doggie&photoUrls=1&tags=1&status=bishopfox&body='
$ curl -X GET "https://petstore.swagger.io/v2/user/{username}"
$ curl -X PUT "https://petstore.swagger.io/v2/user/{username}" -d 'email=bishopfox&password=bishopfox&phone=bishopfox&userStatus=1&id=1&username=bishopfox&firstName=bishopfox&lastName=bishopfox&body='
$ curl -X GET "https://petstore.swagger.io/v2/user/login"
$ curl -X POST "https://petstore.swagger.io/v2/user" -d 'phone=bishopfox&userStatus=1&id=1&username=bishopfox&firstName=bishopfox&lastName=bishopfox&email=bishopfox&password=bishopfox&body='
$ curl -X GET "https://petstore.swagger.io/v2/store/order/{orderId}"
Verwenden Sie den Befehl
endpoints, um eine Liste der rohen Endpunkte aus der bereitgestellten Definitionsdatei zu generieren.
$ sj endpoints -u https://petstore.swagger.io/v2/swagger.json -qi -p http://127.0.0.1:8080