To ja, piszący skrypt wyliczający parametry żądania POST do gov.tr, siedzący przed granicą z Chorwacją.
Jak to wszystko się zaczęło
Razem z żoną podróżujemy po świecie i pracujemy zdalnie. Niedawno przenieśliśmy się z Turcji do Chorwacji (najlepszy punkt do zwiedzania Europy). Aby nie iść na kwarantannę w Chorwacji, trzeba mieć zaświadczenie o negatywnym teście covid wykonanym nie później niż 48 godzin przed wjazdem.
Dowiedzieliśmy się, że stosunkowo opłacalne (2500 rubli) i szybkie (wszystkie wyniki pojawiają się w ciągu 5 godzin) zrobić test na lotnisku w Stambule, z którego właśnie wylecieliśmy.
Przyjechaliśmy na lotnisko 7 godzin przed odlotem, znaleźliśmy punkt testowy. Robią wszystko chaotycznie: podchodzisz, dajesz paszport, płacisz, dostajesz 2 naklejki z kodem kreskowym, idziesz do mobilnego laboratorium, gdzie biorą od ciebie jedną z tych naklejek, aby zidentyfikować twoją analizę. Po wyjściu, a oni ci mówią: przejdź do tej strony:
Ale jeśli wprowadzisz dane natychmiast po przejściu analizy, strona wyświetli błąd.
Nawet wtedy w mojej głowie wkradły się myśli o „pięknym” UX, w którym przy jakimkolwiek błędzie operatora, który wjechał w dane paszportowe, nie ma sposobu, aby dowiedzieć się o swoim wyniku.
Przed odlotem
Nadchodzi godzina wyjazdu, wpisuję swoje dane i widzę, że dokumenty do nich już są, chociaż nie ma jeszcze wyniku testu.
Wiadomo nawet, że testy dotarły do laboratorium 1.5 godziny temu. Ale wpis danych mojej żony nadal powoduje błąd, że wpis nie został znaleziony. A co najważniejsze, nie będziesz mógł po prostu pójść i zapytać, co jest nie tak, ponieważ. Zdaliśmy egzamin w strefie przed kontrolą paszportową.
Przy wejściu na pokład poproszono nas o wyniki badań, ale na szczęście udało nam się przekonać przedstawiciela lotniska, że wkrótce się pojawią (pokazali kody kreskowe), aw ostateczności udamy się na kwarantannę.
Jak tylko wsiadłem do samolotu, mój kod pokazał, że mam negatywny test.
Po przyjeździe
I tu zaczyna się zabawa! Gdy tylko przylecieliśmy i połączyliśmy się z lokalnym WiFi, okazało się, że wpisu mojej żony nie ma w bazie danych. A na samej granicy do dokumentów podchodzono bardzo ostrożnie: straż graniczna zrobiła test na koronawirusa i zabrała go do osobnego pomieszczenia, żeby sprawdzić jego prawdziwość. Zdecydowaliśmy, że opowiemy naszą historię zaufania taką, jaka jest i dowiemy się, jakie mamy opcje.
Podczas gdy staliśmy w kolejce, postanowiłem sprawdzić, czy dane są poprawne (moje) i niepoprawne, jak reaguje strona walidacyjna.
Okazało się, że wysyła prośbę o przesłanie do
nr kodu kreskowego=XX
kimlikNo=YY
kimlik Tipi=2
gdzie numer kodu kreskowego - numer kodu kreskowego, kimlik Nie - Numer paszportu, Kimlik Tipi – parametr stały równy 2 (jeśli wypełnione są tylko dwa pierwsze pola). Nie było widać żadnych tokenów. Żądanie zwróciło 1 dla poprawnych parametrów (moje dane) i 0 dla niepoprawnych.
Od listonosza próbowałem posortować 40 kombinacji (nagle błąd jednego znaku), ale nic z tego nie wyszło.
W tym momencie podeszliśmy do straży granicznej, wysłuchał naszej historii i zasugerował kwarantannę. Ale najwyraźniej nie chcieliśmy siedzieć w mieszkaniu przez 14 dni, więc poprosiliśmy o poczekanie trochę w strefie tranzytowej, aby spróbować rozwiązać problem w ciągu kilku godzin. Strażnik graniczny wszedł na nasze stanowisko, poszedł sprawdzić, czy możemy usiąść w białej strefie i za zgodą szefa powiedział: „ok, tylko kilka godzin”.
Zacząłem szukać telefonów tych, którzy zrobili koronę test, i równolegle postanowiłem przetestować szaloną hipotezę: jeśli ten system ma tak fatalny UX, to system bezpieczeństwa nie powinien być dobry, mimo że gov.tr domena.
W rezultacie, siedząc na rozmowach, napisałem mały skrypt, który sortował wszystkie liczby od 0000 do 9999 w polu kimlikNo. barkodNo mieliśmy na naklejce, więc nie mogło być źle.
Wyobraźcie sobie moje zdziwienie, gdy nawet po 500 ciągłych żądaniach nie zostałem zbanowany, a skrypt działał z prędkością 20 żądań na sekundę z lotniskowego WiFi.
Rozmowy nie przyniosły większego skutku: przekierowywano mnie z jednego działu do drugiego. Ale bardzo szybko skrypt dał upragnioną wartość 6505, która wcale nie przypominała prawdziwych 4 cyfr paszportu.
Po wgraniu dokumentu okazało się, że ewidentnie nie był to paszport mojej żony (rosyjscy cudzoziemcy nie mają nawet takich numerów), ale wszystkie inne dane (m.in. imię, nazwisko i data urodzenia) są prawidłowe.
Najciekawsze jest to, że kody kreskowe również nie są przypadkowe, ale idą prawie jeden po drugim. W teorii mogłem więc znaleźć kontakty, które zdobyły numer paszportu mojej żony iw ogóle płynnie wypompować prywatne dane innych osób.
Ale była 9 rano i nieprzespana noc, spóźniłem się na spotkanie online i cieszyłem się, że przepuścili nas bez kwarantanny, więc po prostu zacząłem swoją podróż po Europie.
Źródło: www.habr.com