- Zainstalowana komenda
gitna stacji roboczej - Zainstalowany
dockerna stacji roboczej - Bezpośredni dostęp do internetu (nie przez proxy)
- Zainstalowany program
Postman- https://www.postman.com
-
Założenie konta na GitHub (jeśli jeszcze nie jesteś zarejestrowany)
Aby wykonać ćwiczenie, konieczne jest posiadanie zarejestrowanego użytkownika na portalu github.com. -
Wykonanie "fork'a" projektu
Wykonaj "fork'a" projektu https://github.com/Mixeway-Academy/task3 - w wyniku tej operacji, w twojej przestrzeni na GitHubie powstanie kopia repozytorium.
Zadanie zakłada wykonanie listy operacji na kodzie źródłowym, ale aby nie wprowadzać zmian w przestrzeni, z której korzystają inni użytkownicy, wygodnie jest wykonać kopię w swojej przestrzeni. Więcej informacji znajdziesz tutaj.

-
Pobranie kopii projektu na swoją stację roboczą Aby pobrać 'sforkowany' projekt na swoją stację roboczą, wykonaj poniższą komendę:
git clone https://github.com/{username}/task1
#gdzie {username} to nazwa użytkownika. Wchodząc w swoją kopie repozytoroium przez przeglądarkę można też skorzystać z adresu URL.- Zainstalowanie Postmana
Cel: Celem zadania jest stworzenie pełnego - rozszerzonego scenariusza testów jednostkowych dla jednej wybranej klasy obiektów. Zakres testów powinien zawierać:
- Testy poprawnych danych
- Testy niepoprawnych danych
- Testy związane z próbą wstrzyknięcia kodu
SQLi koduJavaScript - Testy ekstremalne
celem zadania jest przygotowanego zestawu testów - nie musisz poprawić definicji klasy tak, aby weryfikować wszystkie założenia — jeśli np. test niepoprawnych danych się nie uda (w sensie obiekt stworzy się mimo niepoprawnych daych) - to dalej jest ok. Test w takim wypadku ma się nie udać
- Wybór aplilacji Zadanie można zrealizować w jednym z dwóch wybranych wariantów: Java lub Python. Obydwa warianty zostały zawarte w katalogach:
Java/
Python/- Wybór klasy/obiektu do realizacji testów
Wybierz, na którym obiekcie chcesz zrealizować testy - wystarczy stworzenie scenariusza testów dla jednego obiektu np.
com.example.thymeleaf.entity.Studentlubproject/book/models.py - Przygotowanie testów
referencja - slajdy od 40 z prezentacji o nazwie
5 6 7 SbD Kod.pdf - Zmodyfikowanie pliku
Dockerfiletak aby przed zbudowaniem obrazu zrealizowane zostały testy — w przypadku niepowodzenia testów operacjadocker build...powinna być zakończona niepowodzeniem
Cel: celem zadania jest zweryfikowanie i zidentyfikowanie podatności w module uwierzytelnienia aplikacji, realizowanego na podstawie wystawiane przez aplikacje tokeny JWT. Do realizacji będzie atak polegający na próbie zalogowania się na konto administratora. Po poprawnie zrealizowanym ataku należy znaleźć błąd w aplikacji, a następnie go usunąć.
- Przejdź do katalogu z aplikacją
cd JWT- Uruchom aplikacje
docker build -t jwt --platform linux/amd64 .
docker run -it -p 443:443 jwtAplikacja będzie dostępna pod adresem https://127.0.0.1:443, aplikacja nie zawiera graficznego interfejsu użytkownika zawiera jedynie API
3. Uruchom Postmana i zaimportowanie dostarczonej kolekcji
Import kolekcji:

Po wskazaniu ścieżki do pliku JWT-attacks.postman_collection.json, wczytana zostanie kolekcja. W postmanie powinna ona wyglądać tak jak na screenie poniżej:
- Wykonaj atak na JWT, zaloguj się na użytkownika o nazwie
administrator
Zaimportowana przed chwilą kolekcja Postmanowa, zawiera kilka typów ataków i testów. Interesuje nas tylko katalog none. który podświetlony jest na powyższym screenie.
Aby przeprowadzić atak:
- Napierw wyślij request o nazwie
none-obtain-token, w wyniku tej operacji otrzymasz odpowiedź, która zawiera wygenerowany token. Ten token wygenerowany został dla użytkownika o nazwieBob
- Następnie otwórz request, o nazwie
none-send-token, otwórz zakładkęBodya następnie w wartości parametrujwt_tokenumieść zmodyfikowany token. W przypadku niepoprawnego tokena otrzymasz widok jak poniżej. W przypadku przeklenienia tokena z poprzedniego żądania otrzymasz wartosć tokenu dla użytkownika o nazwieBob
- Testuj te API tak długo aż otrzymasz odpowiedź, która będzie zbliżona do

Podpowiedź: podobny scenariusz był poruszany na wykładzie 8.
Podpowiedź 2: Konkretne elementy tokena JWT, rozdzielane . są kodowane z wykorzystaniem base64 i mogą być edytowane niezależnie od siebie
Podpowiedź 3: Nawet jeśli, któryś elementów tokena JWT jest usuwany, wiele bibliotek wymaga aby . był ostatni
Zachowaj zarówno wygenerowany token JWT jak i screen z odpowiedzią od API, który zaczynać będzie się od: "message": "Congrats!! You've solved the JWT challenge!!",
- Przygotuj poprawkę
Podatność znajduję się w JWT/jwt-signature-apis-challanges/app.json w metodzie w linijce 22. Usunięcie problemu jest dość prostę i polega na usunięciu dosłownie kilku symboli.
Wykonaj zmianę, a potem zweryfikuj czy działa ona w oczekiwany sposób
docker build -t jwt --platform linux/amd64 .
docker run -it -p 443:443 jwt- 2 za zadanie 1
- 2 punty za wtkorzystanie podatnosci związanej z
JWT - 1 Punkt za propozycje usunięcia podatności
- Java application - GitHub Repo
- Python application - GitHub Repo
- JWT application - GitHub Repo
