Øvelse 19 - Test Cases
Forfatter: Mathias Greisen
Dato: 2026-09-28
Fag/modul: IT-Sikkerhed i Webapplikationer
Status: Færdig
1. Beskrivelse af øvelsen
Øvelsen går ud på at at udvide test cases fra øvelse 17.
2. Reproduktion trin for trin
Find BOLA (Negativ test)
- ID
- JS-01
- Summary
- Test af autorisation til at se indkøbskurve.
- Preconditions
- Adgang til JuiceShop igennem burpsuite proxy.
-
Steps
- Tilgå JuiceShop med burpsuite som proxy. Opret og log ind som bruger A
-
Tilføj emner til indkøbskurven.
-
I Burpsuite tænd for intercept og klik på indkøbskurven i JuiceShop.
-
Noter ID'et på indkøbskurven:
-
Intercept kan nu deaktiveres igen.
-
-
Opret og log ind som bruger B.
-
Aktiver igen intercept i Bursuite og klik på indkøbskurven.
-
Send GET request til repeater.
- Request til: "http://127.0.0.1:3000/rest/basket/{ID}"
-
Skift ID URL-parameter
- Skift {ID} til ID noteret i step 3.
-
Send request og tjek response
Raw HTTP response- Postconfitions - Ingen. - Exected Results - Systemet skal afvise forespørgslen da det ikke er den nuværende brugers kurv. - Actual Result - Systemet tillod at se en anden brugers indkøbskurv. - Status - FailedHTTP/1.1 200 OK [...] { "status":"success", "data":{ "id":6, "coupon":null, "UserId":23, "createdAt":"2026-09-14T11:48:00.530Z", "updatedAt":"2026-09-14T11:48:00.530Z", "Products":[ { "id":6, "name":"Banana Juice (1000ml)", "description":"Monkeys love it the most.", "price":1.99, "deluxePrice":1.99, "image":"banana_juice.jpg", "createdAt":"2026-09-14T11:42:10.097Z", "updatedAt":"2026-09-14T11:42:10.097Z", "deletedAt":null, "BasketItem":{ "ProductId":6, "BasketId":6, "id":9, "quantity":1, "createdAt":"2026-09-14T11:48:10.979Z", "updatedAt":"2026-09-14T11:48:10.979Z" } }, [...] ] } }
Find excessive Data Exposure (positive test)
- ID
- JS-02
- Summary
- Test af get /memories
- Preconditions
- Adgang til JuiceShop igennem burpsuite proxy.
-
Steps
-
Tilgå JuiceShop med Burpsuite som proxy
-
Åbn photo wall i JuiceShop
- http://127.0.0.1:3000/#/photo-wall
-
Tjek http history i Burpsuite
- Find et GET kald til "GET /rest/memories/ HTTP/1.1"
- Der sendes kun flere oplysninger retur ved første kald.
-
Find EDE i response
Response med EDE- Postconfitions - Ingen. - Exected Results - Systemet må ikke vises potentiel sensitive data omkirng andre brugere, som f.eks. password hashes, rolle, tokens, ip-adresse osv. - Actual Result - Systemet sendte sensitive data retur for alle brugere der havde oprettet et minde på photo-wall. - Status - FailedHTTP/1.1 200 OK Access-Control-Allow-Origin: * X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN Feature-Policy: payment 'self' X-Recruiting: /#/jobs Content-Type: application/json; charset=utf-8 ETag: W/"1827-pjaV9PPdvogygFQBeM0+1zJsQGw" Vary: Accept-Encoding Date: Mon, 14 Sep 2026 12:40:39 GMT Connection: keep-alive Keep-Alive: timeout=5 Content-Length: 6183 { "status":"success", "data":[ { "UserId":13, [...] "User":{ "id":13, "username":"", "email":"bjoern@owasp.org", "password":"9283f1b2e9669749081963be0462e466", "role":"deluxe", "deluxeToken":"efe2f1599e2d93440d5243a1ffaf5a413b70cf3ac97156bd6fab9b5ddfcbe0e4", "lastLoginIp":"", "profileImage":"assets/public/images/uploads/13.jpg", "totpSecret":"", "isActive":true, "createdAt":"2026-09-14T11:42:07.669Z", "updatedAt":"2026-09-14T11:42:07.669Z", "deletedAt":null } }, [...] ] }
-
Kombiner og exploit (negative)
- ID
- JS-03
- Summary
- Tjek at anden brugers indkøbskurv ikke kan tilgåes.
- Preconditions
- Adgang til JuiceShop igennem burpsuite proxy. Adgang til en ny bruger A. Adgang til en bruger B med varer i indkøbskurven.
-
Steps
- Noter bruger B's ID (UserId)
- Log ind som bruger A.
- Aktiver intercept i Bursuite og klik på indkøbskurven.
-
Send GET request til repeater.
- Request til: "http://127.0.0.1:3000/rest/basket/{ID}"
-
Skift ID URL-parameter
- Skift {ID} til ID noteret i step 3.
- Skift (enumerer) basket ID'et indtil en kurv linket til det korrekte UserID (Bruger B) returneres eller at alle kurve er enummereret igennem.
- Postconfitions - Slet evt. de to test brugere A og B. - Exected Results - Som bruger A bør bruger B's indkøbskurv ikke kunne findes, da man ikke skal kunne tilgå og/eller se hvem der har en kurv i systemet. - Actual Result - Det lykkedes at finde bruger B's indkøbskurv, som bruger A. - Status - Failed{ "status":"success", "data":{ "id":1, "coupon":null, "UserId":1, "createdAt":"2026-09-14T11:42:10.290Z", "updatedAt":"2026-09-14T11:42:10.290Z", "Products":[ { "id":1, "name":"Apple Juice (1000ml)", "description":"The all-time classic.", "price":1.99, "deluxePrice":0.99, "image":"apple_juice.jpg", "createdAt":"2026-09-14T11:42:10.097Z", "updatedAt":"2026-09-14T11:42:10.097Z", "deletedAt":null, "BasketItem":{ "ProductId":1, "BasketId":1, "id":1, "quantity":2, "createdAt":"2026-09-14T11:42:10.350Z", "updatedAt":"2026-09-14T11:42:10.350Z" } }, [...] ] } } - Skift {ID} til ID noteret i step 3.
Even More BOLA vulnerabilities
Forge feedback from another user (destructive)
- ID
- JS-04
- Summary
- Forsøg at oprette en feedback for en anden bruger.
- Preconditions
- Adgang til UserID for den bruger man ønsker at oprette feedback for.
-
Steps
-
Tilgå JuiceShop og klik på Customer Feedback.
-
Udfyld felterne.
-
Aktiver intercept i Burpsuite og indsend feedback.
-
I Burpsuite send POST requesten til repeater.
-
Skift "UserId" og evt. "comment" i request body til det ønskede.
-
Send request afsted og tjek response for at det lykkedes
-
(Ektra) Tjek administrator panel
Dette kræver adgang til en admin konto i JuiceShop
- Tilgå http://127.0.0.1:3000/#/administration
- Tjek at den nye feedback er oprettet
- Postconfitions
- Ingen.
- Exected Results
- At systemet kun bør tillade oprettelse af feedback for bruger som er logget ind i den kørende session.
- Actual Result
- Det lykkedes at oprette feedback på vegne af en anden bruger.
- Status
- Failed
-
Create or edit another users product review (destructive)
- ID
- JS-05
- Summary
- Forsøg at redigere en produkt anmeldelse for en anden bruger.
- Preconditions
- Adgang til en bruger.
-
Steps
-
Åben JuiceShop med burpsuit som proxy og log ind.
-
Opret et review på et produkt.
-
Aktiver intercept i Burpsuite og klik på rediger review.
-
Send PATCH request til repeater. Og deaktiver intercept.
-
Aktiver intercept igen og klik på en vare.
-
I Burpsuite, send GET request til repeater.
- GET request til følgende endpoint: "/rest/products/30/reviews"
-
Åben repeater og send GET request afsted. Noter "_id" for den kommentar som ønskes ændret.
-
Find PATCH requesten og indsæt nu det noterede "_id" og skriv feedback besked som ønskes.
-
Send PATCH request afsted og tjek response.
- Postconfitions - Rediger evt. feedback tilbage til det oprindelige. - Exected Results - Systemet bør kun tillade at man redigerer sine egne feedback. - Actual Result - Systemet tillod at redigere en anden brugers feedback. - Status - Failed"modified":1, "original":[ { "message":"0 st4rs f0r 7h3 h0rr1bl3 s3cur17y", "author":"uvogin@juice-sh.op", "product":30, "likesCount":0, "likedBy":[ ], "_id":"w6fbzSKqgG5tR7yXL" } ], "updated":[ { "message":"Dette review er blevet ændret via BOLA", "author":"uvogin@juice-sh.op", "product":30, "likesCount":0, "likedBy":[ ], "_id":"w6fbzSKqgG5tR7yXL" } ]
-
3. Problemer og løsninger
Jeg løb ikke ind i problemer under denne øvelse.
4. Reflektion
-
Hvorfor bør man udarbejde test cases, når man arbejder med sikkerhedstest?
- Det er vigtigt for at kunne reproducere testen og dermed også for at kunne dokumentere når en evt. sårbarhed er blevet mitigeret.
-
Hvad er forskellen på en negativ og en destruktiv test?
- En negativ test afprøver ikke valide indputs. En destruktiv test forsøger at ødelægge systemet (ødelægge CIA?), ved f.eks. at ændre på andres data (systemets integritet ødelægges).
-
Hvordan kan velbeskrevne test cases bruges i samarbejde med andre udviklere eller sikkerhedstestere
- De kan bruges til at de dermed også kan udføre testen, for en udvikler kunne det f.eks. gøre at de selv kan se om de har fået mitigeret en sårbarhed.
5. Opsummering af erfaringer
Jeg har opnået erfaring med at skrive test cases og vurdere vitigheden i at have dem når man arbehder med sikkerhedstests.