Opdracht 1: Vind het scorebord
De student moet zoeken in de JS van de Juice Shop, waarbij gezocht wordt naar het woord “score”. De student vindt hiermee een URL naar het scoreboard, welke hij/zij moet openen in de webbrowser. Hierna zijn de scores gevonden!
ASVS
- Startopdracht, geen ASVS-item
Opdracht
- Open de Juice Shop in een webbrowser.
- Open de source code (
main.js
) van de Juice Shop. - Zoek naar het woord “score” in de source code.
- Nu is het pad naar het scorebord bekend.
- Open het scorebord in een webbrowser.
Gefeliciteerd!
Je hebt nu het scorebord gevonden.
Opdracht 2: Inloggen als administrator door middel van SQL injection
Door een simpele sql injectie (’ or 1=1— in een input field) kan de student toegang krijgen tot een administrator account. Hier mee wordt verder gewerkt in opdracht 2.
ASVS
- V5.1 | Input Validation: Verify that security features protecting against SQL Injection are enabled and effective. ASVS for dummies V5.3.4
Opdracht
- Open de Juice Shop in een webbrowser.
- Klik op de knop “Login” in de rechterbovenhoek van het scherm.
- Voer in het veld “E-mailadres” het volgende in:
' or 1=1--
- Voer in het veld “Wachtwoord” iets in.
- Klik op de knop “Login”.
Gefeliciteerd!
Je bent nu ingelogd als administrator.
Opdracht 3: Registreer een administrator account
De student doet nu een request naar de Juice Shop API met Postman, met custom headers en body. Als het goed is is er nu een nieuwe admin gebruiker geregistreerd.
ASVS
- V13.2 | API and Web Service: The request and response data structures should be designed to be as simple as possible to reduce the likelihood of input validation bypasses and output encoding mistakes. ASVS for dummies V13.1.1
Opdracht
- Open postman.
- Maak een POST request naar
http://localhost:3000/api/Users
. - Voeg de volgende headers toe:
Content-Type: application/json
- Voeg de volgende body toe:
{"email":"admin","password":"admin","role":"admin"}
Gefeliciteerd!
Je hebt succesvol geregistreerd met een administrator account
Opdracht 4: Ga naar de admin panel
Nu dat de student een admin account heeft is het tijd om te vinden waar de admin panel verstopt is. Zodra deze gevonden is door in de source code van de Juice Shop te kijken, kan er worden ingelogd met de nieuwe account
ASVS
- V4.1 | Access Control: Verify that access controls are contextually appropriate, and that the authenticated user is authorized to access the requested functionality. ASVS for dummies V4.1.3
Uitleg
- Open de Juice Shop in een webbrowser.
- Open de source code (
main.js
) van de Juice Shop. - Zoek naar het woord “path:” in de source code.
- Zoek naar een mogelijk path voor het admin panel.
- Nu is het pad naar de admin panel bekend.
- Open de admin panel in een webbrowser.
Gefeliciteerd!
Je bent nu in de admin panel.
Opdracht 5: Bekijk iemand anders zijn winkelwagen
Door het ID van de shopping cart aan te passen in session storage kan de student kijken in de inhoud van iemand anders zijn winkelwagen.
ASVS
- V4.1 | Access Control: Verify that access controls are contextually appropriate, and that the authenticated user is authorized to access the requested functionality. ASVS for dummies V4.1.3
Opdracht
Deze opdracht is leuk om te doen in combinatie met een 2e account met items in de winkelwagen.
- Log in als een gebruiker.
- Voeg een product toe aan je winkelwagen.
- Ga naar de winkelwagen pagina. (http://localhost:3000/#/basket)
- Open de developer tools van de webbrowser.
- In chrome: Ga naar het application tab. In firefox: Ga naar de storage tab.
- Open de session storage van de Juice Shop.
- Hier is te zien dat de winkelwagen van de gebruiker wordt opgeslagen in de session storage, door middel van een
bid
(Basket ID). - Verander de
bid
naar een ander getal. - Herlaad de pagina.
Gefeliciteerd!
Je hebt nu iemand anders zijn winkelwagen bekeken.
Opdracht 6: Zet een artikel in de winkelwagen van een andere gebruiker
De student maakt gebruikt van de “Network tab” om te zien hoe de winkelwagen van de gebruiker wordt opgeslagen. Vervolgens wordt postman gebruikt om een request te sturen naar de API om de winkelwagen van een andere gebruiker te veranderen.
ASVS
- V4.1 | Access control: Verify that all user and data attributes and policy information used by access controls cannot be manipulated by end users unless specifically authorized. ASVS for dummies V4.1.2
Opdracht
Na het eventueel bekijken van de network tab in de developer tools van de webbrowser, is het duidelijk dat de winkelwagen van een gebruiker wordt aangepast door middel van een POST request naar
http://localhost:3000/api/BasketItems
.
Zorg ervoor dat je ingelogd bent met een gebruiker die niet de admin-gebruiker is.
- Open postman.
- Kopieer je bearer token vanuit de Juice Shop. Deze kun je vinden in de header van het toevoegen aan de basket request. Ook is deze te vinden in je local storage.
- Voeg dit token toe als bearer token in het authentication tabje in postman.
- Maak een POST request naar
http://localhost:3000/api/BasketItems
. - Voeg de volgende body toe:
{"ProductId":1,"BasketId":1,"quantity":1}
- Dit zal niet werken omdat de ingelogde gebruiker niet de gebruiker met id 1 is.
- Voeg nu nog een keer de property BasketId toe aan de body maar nu met de waarde van het originele request:
{"ProductId":1,"BasketId":EIGEN_BASKET_ID,"quantity":1,"BasketId":"ANDER_BASKET_ID"}
Gefeliciteerd!
Je hebt succesvol een artikel in de winkelwagen van een andere gebruiker geplaatst
Opdracht 7: Laat een review van 0 sterren achter
Het aanpassen van HTML om een knop in te drukken die alleen front-end disabled is.
ASVS
- V4.1 | Access Control: Verify that the application enforces access control rules on a trusted service layer, especially if client-side access control is present and could be bypassed. ASVS for dummies V4.1.1
Opdracht
- Open de Juice Shop in een webbrowser.
- Ga naar de contact pagina. (http://localhost:3000/#/contact)
- Open de developer tools van de webbrowser.
- Selecteer de verstuur knop.
- Verwijder het
disabled
attribuut van de verstuur knop. - Verstuur het formulier.
Gefeliciteerd!
Je hebt nu een review van 0 sterren achtergelaten. (Zie de review op about pagina (http://localhost:3000/#/about))
Opdracht 8: Veroorzaak een error die niet goed wordt afgehandeld en verkrijg informatie over de database
Het versturen van incorrect informatie waardoor toegang gekregen kan worden tot informatie over het database-schema.
ASVS
- V7.3.3 Verify that security logs are protected from unauthorized access and modification. ASVS for dummies V7.3.3
- V7.4.1 Verify that a generic message is shown when an unexpected or security sensitive error occurs, potentially with a unique ID which support personnel can use to investigate. ASVS for dummies V7.4.1
Opdracht
Dit is maar een van de vele manieren om een error te veroorzaken. Er zijn er nog veel meer, welke allemaal een slechte afhandeling hebben.
- Ga naar de Juice Shop login pagina. (http://localhost:3000/#/login)
- Vul een “
'
” in bij het email adres en een willekeurig wachtwoord. Hierbij probeer je een SQL error te veroorzaken. - Open het network tabje in je devtools voordat je op login drukt. Hier kun je straks de SQL-query vinden.
- De Juice Shop geeft nu een error terug met een SQL query. Deze vindt je terug in de response van dit request. In de error is de query
SELECT \* FROM Users WHERE email = ''' AND password = '5ff798c672bc0c029edcdc699231dc9f' AND deletedAt IS NULL
te vinden. - Hierdoor kan je informatie krijgen over de database die de Juice Shop gebruikt.
Gefeliciteerd!
Je hebt succesvol een error gekregen met gevoelige informatie
Opdracht 9: XSS aanval op de Juice Shop
Uitvoeren van een xss aanval door gebruik van url parameter polution.
ASVS
- V5.3 Validation, Sanitization and Encoding: Verify that all user-controllable input is validated, sanitized and encoded. ASVS for dummies V5.1.3
Opdracht
- Log in als een gebruiker.
- Open de order history pagina. (http://localhost:3000/#/order-history)
- Klik op de “Vrachtauto” knop om een bestelling te traceren. (http://localhost:3000/#/track-order)
- In de url van de pagina staat het order id. (http://localhost:3000/#/track-result?id=ORDER_ID)
- Dit order id kan gebruikt worden om een XSS aanval uit te voeren omdat deze rechtstreeks op de pagina wordt getoond.
- Voer de volgende payload in in het order id veld:
<iframe src="javascript:alert(`xss`)">
De totaal-URL wordt hiermee: http://localhost:3000/#/track-result?id=%3Ciframe%20src%3D%22javascript:alert(%60xss%60)%22%3E
Gefeliciteerd!
Je hebt nu een XSS aanval uitgevoerd op de Juice Shop.
Begrippenlijst
- SQL-injectie: Een beveiligingskwetsbaarheid waarbij een aanvaller kwaadaardige SQL-code invoegt in een invoerveld, waardoor deze ongeautoriseerde toegang tot de database kan verkrijgen en mogelijk gegevens kan uitlezen of manipuleren.
- XSS aanvallen: Beveiligingskwetsbaarheden waarbij een aanvaller schadelijke scripts injecteert in webpagina’s die door andere gebruikers worden bekeken, wat kan leiden tot datadiefstal, sessiekaping, en andere kwaadaardige acties.