- Zainstalowana komenda
git
na stacji roboczej - Zainstalowany
docker
na 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
SQL
i 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.Student
lubproject/book/models.py
- Przygotowanie testów
referencja - slajdy od 40 z prezentacji o nazwie
5 6 7 SbD Kod.pdf
- Zmodyfikowanie pliku
Dockerfile
tak 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 jwt
Aplikacja 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ęBody
a następnie w wartości parametrujwt_token
umieść 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