Wyścigi i przemyt żądań
Wyścigi / przemyt żądań udostępnia dwa wyspecjalizowane narzędzia do ataków HTTP zależnych od czasu i działających na poziomie protokołu.
Warunki wyścigu
Karta Warunki wyścigu wysyła jednocześnie wiele kopii żądania do tego samego punktu końcowego i pozwala porównać odpowiedzi oraz czas równoległych wykonań.
Kiedy używać
- TOCTOU (time-of-check/time-of-use) — sprawdź, czy współbieżne żądania mogą rozdzielić sprawdzenie warunku od operacji zmieniającej stan.
- Manipulacja kontem — wysyłaj równolegle żądania zmiany salda, realizacji kuponów lub operacji objętych limitami, aby sprawdzić możliwość podwójnego wydania środków lub realizacji kuponów ponad dozwolony limit.
- Omijanie limitów głosowania lub częstotliwości — potwierdź, czy limity dla użytkownika są egzekwowane atomowo.
Uruchamianie testu wyścigu
- Przygotuj docelowe żądanie lub wyślij je do karty Warunki wyścigu.
- Ustaw Współbieżność — liczbę kopii wysyłanych równolegle.
- Kliknij przycisk Wyślij z ustawioną liczbą żądań. Wszystkie kopie są wysyłane możliwie najbliżej tej samej chwili.
- Przejrzyj tabelę odpowiedzi: kod statusu, treść i czas trwania dla każdej kopii.
- Różnice między odpowiedziami (różne kody statusu, różne treści odpowiedzi, nieoczekiwany sukces dla kopii 2 i kolejnych) wskazują na okno wyścigu.
Wyścig w pojedynczym pakiecie HTTP/2
Gdy cel obsługuje HTTP/2, wybierz H2 w jednym pakiecie w polu Tryb ataku. HTTP/2 multipleksuje wszystkie równoległe żądania w jednym połączeniu, co eliminuje wahania opóźnienia sieci i zwiększa niezawodność jednoczesnego dotarcia żądań do serwera.
Przemyt żądań HTTP
Karta Przemyt żądań HTTP sprawdza, jak serwer obsługuje niejednoznaczne nagłówki Content-Length i Transfer-Encoding, aby wykryć desynchronizację między warstwą frontendową a backendem.
Podstawy
Gdy odwrotne proxy i serwer backendu nie zgadzają się co do miejsca, w którym kończy się jedno żądanie, a zaczyna następne, przemycony prefiks żądania A może zostać dodany na początku żądania B. Skutki obejmują zatruwanie pamięci podręcznej, omijanie uwierzytelniania i wstrzykiwanie dowolnych żądań.
Warianty desynchronizacji
| Wariant | Opis |
|---|---|
| CL.TE | Frontend używa Content-Length; backend używa Transfer-Encoding |
| TE.CL | Frontend używa Transfer-Encoding; backend używa Content-Length |
| TE.TE | Oba używają Transfer-Encoding, ale różnie reagują na zaciemniony nagłówek |
Uruchamianie próby przemytu
- Wybierz docelowy punkt końcowy na karcie Przemyt żądań HTTP.
- Wybierz wariant desynchronizacji do przetestowania.
- Kliknij Uruchom test przemytu żądań. Narzędzie wysyła specjalnie przygotowane żądanie i mierzy odpowiedź.
- Przekroczenie limitu czasu lub nieoczekiwana odpowiedź na drugie żądanie w sekwencji wskazuje na potencjalną desynchronizację.
- Potwierdź wynik ręcznie przed utworzeniem ustalenia — wyniki fałszywie dodatnie występują, gdy warunki sieciowe powodują przekroczenie czasu niezwiązane z próbą.