Finden Sie heraus, was ein Angreifer in Ihrer App knacken könnte

KI-Agenten greifen Ihre Web-App mit den Werkzeugen echter Angreifer an. Mit einem Testkonto testen sie alles, was ein angemeldeter Nutzer erreichen kann. Jeder Befund kommt mit den Requests und Responses, die ihn belegen, und einem Fix.

In wenigen Minuten startklar. Kein Abo, kein Verkaufsgespräch.

Auth
Recon

18m remaining

Live operations
Orchestrator

Initializing pentest session...

Controlling
Die echte Laufseite mit den Höhepunkten eines unserer Läufe auf ginandjuice.shop, einem Shop, den PortSwigger zum Hacken gebaut hat. Auf unter eine Minute beschleunigt. Klicken Sie auf einen Agenten, um sein Log zu lesen.

Ein Lauf auf demselben Demo-Shop

Laufzeit
30 Min.
Agenten im Einsatz
Befunde
9
Befunde
Zeit bis zum ersten Befund
Ca. 2 Min.
bis zum ersten Befund

Warum jetzt

Ein Pentest bei jedem Release, nicht einmal im Jahr

Ein klassischer Pentest braucht Wochen Vorlauf und endet in einem PDF. Sie releasen täglich, also ist das PDF beim nächsten Release schon veraltet. Mit AttackerView können Sie jedes Release pentesten.

VergleichKlassischer PentestAttackerView
StartWochen VorlaufMinuten: App hinzufügen und loslegen
ErgebnisseEin PDF am EndeBefunde erscheinen, während die Agenten arbeiten
Nach dem nächsten ReleaseNeu buchenEinfach neu starten. Bekannte Befunde werden aktualisiert, und ein Fehler, der zurückkommt, wird markiert.

Teams dieser Unternehmen nutzen AttackerView

So funktioniert's

Von der Anmeldung zum laufenden Pentest in Minuten

Keine Scoping-Calls, kein Angebot, kein Vertrag. Sie richten es selbst ein und sehen zu.

  1. 1

    App hinzufügen

    Melden Sie sich an und fügen Sie Ihre App hinzu. Mit einem Testkonto melden sich die Agenten an und testen alles, was dieses Konto erreichen kann.

  2. 2

    Laufzeit wählen

    30 Minuten, 90 Minuten oder 4 Stunden, in denen Agenten Ihre App angreifen.

  3. 3

    Zusehen

    Bis zu fünf Agenten kartieren Ihre App und greifen sie mit curl, sqlmap, ffuf und einem echten Browser an. Befunde erscheinen schon während des Laufs, und Sie können das Log jedes Agenten lesen.

Teamarbeit

Die Agenten geben sich gegenseitig Hinweise

Entdeckt ein Agent etwas, das in einem anderen Teil Ihrer App einen genaueren Blick wert ist, übernimmt es sofort der nächste freie Agent.

1

Ein Agent notiert, was ihm auffällt

Jeder Agent arbeitet an einem Teil Ihrer App. Dabei notiert er alles Wissenswerte: wie die App gebaut ist, was schwach aussieht und wo es sich weiterzusuchen lohnt.

POST|/catalog/product/stock
note_observation
  • Architecture Stock check posts an XML document
  • Weakness Parser resolves external entities
  • Lead Search results echo searchTerm GET /catalog high

Categories: Lead, Weakness, Architecture, Defense, Credential

2

Ein Hinweis wird sofort zum nächsten Auftrag

Eine Notiz, die auf einen anderen Teil Ihrer App zeigt, landet sofort in der gemeinsamen Warteschlange, sofern sie im Scope liegt. Der nächste freie Agent übernimmt sie. Niemand wartet, bis ein Durchgang fertig ist.

Queue by priority
  • high GET|/catalog claimed
  • medium GET|/my-account/orders
  • low GET|/blog

Ein Eintrag pro Operation. Hinweise auf /catalog?category= und /catalog?searchTerm= zählen nur einmal.

Active (5/5 slots)
  • POST|/login
  • GET|/blog/post
  • POST|/catalog/product/stock
  • GET|/catalog/product
  • GET|/catalog new agent
Wie die Agenten teilen, was sie lernen, gezeigt auf ginandjuice.shop. Schritt 1: Ein Agent, der POST /catalog/product/stock testet, notiert eine Architecture-Notiz, eine Weakness-Notiz und einen Lead für GET /catalog. Schritt 2: Der Lead kommt in die gemeinsame Warteschlange, die einen Eintrag pro Operation in Prioritätsreihenfolge hält, und der nächste freie von fünf Slots übernimmt ihn als neuer Agent.

Was Sie bekommen

Jeder Befund kommt mit den Requests, die ihn belegen

Bevor ein Befund bei Ihnen ankommt, wird er gegen die Requests und Responses geprüft, die der Agent tatsächlich aufgezeichnet hat. Was nicht standhält, wird verworfen. Zu jedem Befund bekommen Sie die genauen Requests, einen CVSS-Schweregrad, die Auswirkung und den Fix. Diese SQL-Injection stammt aus einem Test auf dem Demo-Shop: Der Agent hat die Produktliste mit zwei Wahr/Falsch-Paaren aus- und wieder eingeschaltet, und Sie können dieselben Requests selbst senden.

SQL injection in the catalog category filter

Verified on this target

The baseline and true/false responses were checked for the marker.

Assessment details

The recorded test demonstrates the finding on this target.

Severity (CVSS)

8.7 · CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N

Assessed for this target

Anyone can send the request without signing in, and the injected condition decides what the database returns.

Explanation

The category parameter of GET /catalog is placed into a SQL query without parameterisation. Appending a condition to the category changes which rows the database returns.

Prerequisites

Confirmed on this target: the catalog is public, so no account is needed.

PoC

  1. Request the catalog for a real category and note that Hibiscus Gin is listed.
  2. Append a true condition, ' AND 7=7-- , and the same product is listed.
  3. Append a false condition, ' AND 7=8-- , and the listing is empty, with the same 200 status.
  4. Repeat with a second integer (13=13 and 13=14) to rule out chance.

Evidence

Five requests to the same operation, differing only in the category value. See the evidence of record below.

Impact

Anyone, without an account, can pull data out of the shop's database by asking it yes/no questions through the category filter.

Remediation

Use a parameterised query for the category filter, and reject category values that are not in the known list.

Evidence of record

  • baselineId · r1 · req-baseline
    Request
    GET https://ginandjuice.shop/catalog?category=Gin
    Response
    HTTP 200 OK
    Content-Type: text/html; charset=utf-8
    
    <h3>Hibiscus Gin</h3> <p>Floral, bright, a little tart.</p> <span class="price">$19.30</span> …
  • pairs[0].trueId · r2 · req-true-1
    Request
    GET https://ginandjuice.shop/catalog?category=Gin'%20AND%207%3D7--%20
    Response
    HTTP 200 OK
    Content-Type: text/html; charset=utf-8
    
    <h3>Hibiscus Gin</h3> <p>Floral, bright, a little tart.</p> <span class="price">$19.30</span> …
  • pairs[0].falseId · r3 · req-false-1
    Request
    GET https://ginandjuice.shop/catalog?category=Gin'%20AND%207%3D8--%20
    Response
    HTTP 200 OK
    Content-Type: text/html; charset=utf-8
    
    <section class="products"></section> <p>No products in this category.</p>
  • pairs[1].trueId · r4 · req-true-2
    Request
    GET https://ginandjuice.shop/catalog?category=Gin'%20AND%2013%3D13--%20
    Response
    HTTP 200 OK
    Content-Type: text/html; charset=utf-8
    
    <h3>Hibiscus Gin</h3> <p>Floral, bright, a little tart.</p> <span class="price">$19.30</span> …
  • pairs[1].falseId · r5 · req-false-2
    Request
    GET https://ginandjuice.shop/catalog?category=Gin'%20AND%2013%3D14--%20
    Response
    HTTP 200 OK
    Content-Type: text/html; charset=utf-8
    
    <section class="products"></section> <p>No products in this category.</p>

Typed proof

Kind
sqli-boolean
Parameter
category
Marker
Hibiscus Gin
Baseline
r1
Pair 1
true r2 · false r3
Pair 2
true r4 · false r5

Observed effect

kind
typed-proof
version
1
signature
sqli-boolean
details
The baseline and true/false responses were checked for the marker.
outcome
{"parameter":"query:category","marker":"Hibiscus Gin","baseline":{"requestId":"req-baseline","markerPresent":true},"pairs":[{"trueRequestId":"req-true-1","falseRequestId":"req-false-1","trueMarkerPresent":true,"falseMarkerPresent":false},{"trueRequestId":"req-true-2","falseRequestId":"req-false-2","trueMarkerPresent":true,"falseMarkerPresent":false}]}

Derived severity metrics

  • PR=N: The attack requests carried no credential context.

Cookies, Auth-Header und Tokens werden in den gespeicherten Daten maskiert. Beispielbericht ansehen.

Standardmäßig sicher

Sie entscheiden, was die Agenten anfassen dürfen

Standardmäßig senden die Agenten keine POST-, PUT-, PATCH- oder DELETE-Requests, außer zur Anmeldung mit Ihrem Testkonto. Schalten Sie Datenänderungen nur ein, wenn Sie sie testen lassen wollen. Logout-Seiten und Pfade, die Sie sperren, werden nie angefasst, und die Agenten bleiben auf Ihrer App und ihren Subdomains.

Die Agenten erreichen den Host Ihrer App und seine Subdomains: ginandjuice.shop *.ginandjuice.shop
Beispiel-Requests und was die Prüfung mit jedem macht, im Nur-Lesen-Modus und mit erlaubten Datenänderungen
RequestNur lesen (Standard)Datenänderungen erlaubt
GET /catalog?category=Gin Erlaubt Erlaubt
GET /order/details Erlaubt Erlaubt
POST /catalog/cart Blockiert Erlaubt
POST /catalog/product/stock Blockiert Erlaubt
GET /logout

würde die Sitzung beenden

Blockiert Blockiert
GET /billing/invoices

unter dem gesperrten /billing

Blockiert Blockiert
GET https://other-site.example/

nicht Ihr Host

Blockiert Blockiert

Dürfen die Agenten Daten ändern?

  • Nein: nur lesen (Standard) (ausgewählt)
  • Ja: sie dürfen Daten anlegen, ändern und löschen

Nur lesen blockiert POST-, PUT-, PATCH-, DELETE- und WebSocket-Requests. Die Anmeldung mit Ihrem Testkonto funktioniert trotzdem.

Gesperrte Pfade

  • /logout
  • /signout
  • /billing

Diese Pfade und alles darunter werden nie angefasst, egal mit welcher Methode. /logout und /signout stehen immer auf der Liste. Den Rest fügen Sie hinzu.

Jeder Request der Agenten wird geprüft, bevor er Ihre App erreicht. Lesende Requests auf Ihre App und ihre Subdomains sind erlaubt. POST-, PUT-, PATCH-, DELETE- und WebSocket-Requests werden blockiert, außer Sie erlauben Datenänderungen. /logout, /signout und Ihre gesperrten Pfade werden immer blockiert. Jeder Request wird gegen Ihre Einstellungen geprüft, bevor er Ihre App erreicht.

Preise

Pro Lauf bezahlen, ohne Abo

Sie wählen, wie lange die Agenten arbeiten. Eine größere App kostet nicht mehr.

LaufAgenten arbeitenPreis
FocusedBis zu 30 Minuten€50 + MwSt.
StandardBis zu 90 Minuten€150 + MwSt.
DeepBis zu 4 Stunden€400 + MwSt.
Klassischer PentestWochen Vorlauf10.000 bis 25.000 €

Wenn die Agenten Ihre App nie testen können oder auf unserer Seite etwas schiefgeht, erstatten wir den vollen Betrag inklusive MwSt.

Fragen

Bevor Sie starten

Was ist der Unterschied zu einem Schwachstellenscanner?

Ein Scanner arbeitet eine feste Liste von Checks ab. Die Agenten erkunden Ihre App wie ein Nutzer, angemeldet, wenn Sie ihnen ein Testkonto geben, und gehen dem, was sie finden, mit sqlmap, ffuf, curl und einem echten Browser nach. Jeder Befund kommt mit den Requests und Responses, die ihn belegen.

Welche Schwachstellen findet es?

SQL-Injection, XSS, XXE, SSRF, Path Traversal, Command Injection, Template Injection, CSRF und Fehler in der Zugriffskontrolle, etwa Daten, die jeder ohne Anmeldung lesen kann.

Ist ein Lauf gegen die Produktion sicher?

Standardmäßig ist der Lauf rein lesend: keine POST-, PUT-, PATCH- oder DELETE-Requests, außer zur Anmeldung mit Ihrem Testkonto. Alle Agenten teilen sich ein Budget von 600 Requests pro Minute und bremsen ab, sobald Ihr Server mit 429 oder 503 antwortet.

Kann es Seiten hinter einem Login testen?

Ja. Mit einem Testkonto melden sich die Agenten an und testen alles, was dieses Konto erreichen kann.

Sehen Sie, was die Agenten in Ihrer App finden