' OR '1'='1' --SELECT id, username, role
FROM users
WHERE username = '' OR 1=1 -- '1adminadmin
2aliceuser
3bobuser
DEFENSE AVAILABLESwitch to a parameterized query and the attack stops.
0 ROWSMeridian Holdings · po godzinach
Każdy system ma drzwi, których ktoś zapomniał zamknąć.
Ty je znajdujesz. Po drugiej stronie prawdziwa baza — żadnej symulacji, żadnej siatki bezpieczeństwa poza piaskownicą. Zrób trzy roboty. Potem naucz się, jak powinni cię byli powstrzymać.
' OR '1'='1' --SELECT id, username, role
FROM users
WHERE username = '' OR 1=1 -- '1adminadmin
2aliceuser
3bobuser
DEFENSE AVAILABLESwitch to a parameterized query and the attack stops.
0 ROWSNapad w pięciu ruchach
Neo wskazuje cel i łup — nigdy metodę.
Rozpracuj cel. Znajdź, gdzie naprawdę trafia twój wpis.
Wpisz coś w formularz, patrz, jak twój wpis buduje zapytanie na żywo, a potem je uruchom.
Łup i twój wynik. Nikt cię nie powstrzymał — o to właśnie chodzi.
Podatny kod obok poprawki, która go zamyka. To jest obrona.
Trzy sprawy · jedna droga
8 celów w trzech coraz trudniejszych sprawach. Każde podejście dostaje świeżo zasianą lokalną bazę.

Startowa / 3 cele
Głośna witryna, ścieżka logowania i żywe zapytanie, które zdradza lukę.
Omijanie logowania · Odkrywanie schematu · Ekstrakcja UNIONWejdź do sprawy
Średnia / 3 cele
Wynik znika. Czas, błędy i uważne pytania ujawniają to, co zostało.
Ślepe boolean · Ślepe czasowe · Oparte na błędachWejdź do sprawy
Zaawansowana / 2 cele
Filtry pilnują oczywistej drogi. Zobacz, czemu blokowanie słów nie zastępuje prawdziwej granicy.
Omijanie WAF · Zapytania łączoneWejdź do sprawyPrawdziwa baza · bezpieczny poligon
Każda sprawa działa na SQLite w twojej przeglądarce. Cel jest odizolowany, świeżo zasiany i można go zresetować w każdej chwili.
Żadnego prawdziwego celu. Ładunek nie trafia do zewnętrznego systemu.
// Input is inserted into source
const q = "SELECT id, username, role
FROM users WHERE username = '" + input + "'";DANE UŻYTKOWNIKA' OR 1=1 --Wartość wychodzi z ciągu i przepisuje logikę zapytania.
// Structure and value stay separate
const q = "SELECT id, username, role
FROM users WHERE username = ?";
db.execute(q, [input]);PARAMETR POWIĄZANY, NIE WYKONANY["' OR 1=1 --"]Dane pozostają danymi. Struktura zapytania nie może się zmienić.
Wyślij wstrzykniętą wartość.
Zobacz wiersze, których użytkownik nie powinien dostać.
Użyj zapytania parametryzowanego.
Wyślij dokładnie te same dane.
Wracają tylko zamierzone dane.
Wsparcie operatora
Wszystko jest odizolowane, resetowalne i stworzone do nauki. Wyjaśnij pytania przed pierwszą operacją.
Przeczytaj każdą odpowiedź NeoTak. Każda robota celuje wyłącznie w bazę SQLite w piaskownicy twojej przeglądarki. Ładunek treningowy nigdy nie trafia do prawdziwego systemu; dostarczenie strony i opcjonalna synchronizacja konta są oddzielone od celu.
Nie. Działa w nowoczesnej przeglądarce. Silnik SQLite ładuje się na żądanie, gdy pierwszy raz go potrzebujesz — bez potrzeby konta, bez pobierania, bez konfiguracji.
To pomaga. Gra zakłada, że umiesz przeczytać SELECT i z grubsza ogarnąć klauzulę WHERE. Uczy cię wstrzykiwania — nie SQL od zera.
Uczymy, jak działa wstrzykiwanie, żebyś umiał je rozpoznać i zamknąć — każda robota kończy się poprawką, nie włamaniem. Używaj tego tylko na systemach, które posiadasz lub które wolno ci testować.
Neo · „Trzy roboty. Ty zatrzymujesz wiedzę — Meridian zostaje z rachunkiem.”