πŸ”API Testing

API lΓ  mα»™t tαΊ­p hợp cΓ‘c commands, functions, protocol, objects ... giΓΊp hai phαΊ§n mềm cΓ³ thể tΖ°Ζ‘ng tΓ‘c trao Δ‘α»•i dα»― liệu vα»›i nhau .

API Recon

TrΖ°α»›c khi bαΊ―t Δ‘αΊ§u kiểm thα»­ API, Δ‘iều quan trọng Δ‘αΊ§u tiΓͺn lΓ  thu thαΊ­p thΓ΄ng tin về API để xΓ‘c Δ‘α»‹nh bề mαΊ·t tαΊ₯n cΓ΄ng

XΓ‘c Δ‘α»‹nh API Endpoint

GET /api/books HTTP/1.1
Host: example.com

Trong trường hợp nΓ y, API endpoint lΓ  /api/books, nΓ³ được sα»­ dα»₯ng để lαΊ₯y danh sΓ‘ch sΓ‘ch tα»« mα»™t thΖ° viện. Mα»™t endpoint khΓ‘c cΓ³ thể lΓ  /api/books/mystery, giΓΊp lαΊ₯y danh sΓ‘ch sΓ‘ch thuα»™c thể loαΊ‘i trinh thΓ‘m.

TΓ¬m hiểu cΓ‘ch tΖ°Ζ‘ng tΓ‘c vα»›i API

  • Dα»― liệu Δ‘αΊ§u vΓ o mΓ  API xα»­ lΓ½:

    • Bao gα»“m cΓ‘c tham sα»‘ bαΊ―t buα»™c vΓ  khΓ΄ng bαΊ―t buα»™c mΓ  API yΓͺu cαΊ§u.

  • CΓ‘c loαΊ‘i yΓͺu cαΊ§u mΓ  API chαΊ₯p nhαΊ­n:

    • Bao gα»“m cΓ‘c phΖ°Ζ‘ng thα»©c HTTP được hα»— trợ nhΖ° GET, POST, PUT, DELETE vΓ  cΓ‘c Δ‘α»‹nh dαΊ‘ng dα»― liệu nhΖ° JSON, XML.

  • Giα»›i hαΊ‘n tα»‘c Δ‘α»™ (Rate Limits) vΓ  cΖ‘ chαΊΏ xΓ‘c thα»±c:

    • TΓ¬m hiểu xem API cΓ³ giα»›i hαΊ‘n sα»‘ lượng yΓͺu cαΊ§u trong mα»™t khoαΊ£ng thời gian hay khΓ΄ng.

    • XΓ‘c Δ‘α»‹nh cΓ‘c phΖ°Ζ‘ng thα»©c xΓ‘c thα»±c nhΖ° API Key, OAuth, hoαΊ·c JWT.

API Document

Discovering API documentation

  1. DΓΉng Burp Scanner để quΓ©t

  2. Manual bαΊ±ng cΓ‘c endpoint cΓ³ thể chα»©a API Documenrt

  1. CΓ³ thể dΓΉng cΓ‘c tool để fuzzing nΓ³ ra bαΊ±ng cΓ‘ch dΓΉng cΓ‘c list API quen thuα»™c - wordlist

Lab: Exploiting an API endpoint using documentation

Machine-readable API Documentation

CΓ΄ng cα»₯ phΓ’n tΓ­ch vΓ  kiểm thα»­ tΓ i liệu API

  1. Burp Suite:

    • Burp Scanner:

      • Tα»± Δ‘α»™ng quΓ©t vΓ  kiểm tra bαΊ£o mαΊ­t tΓ i liệu API theo chuαΊ©n OpenAPI (Swagger).

      • XΓ‘c Δ‘α»‹nh cΓ‘c lα»— hα»•ng bαΊ£o mαΊ­t nhΖ° Injection, Broken Authentication, Rate Limiting.

    • OpenAPI Parser BApp:

      • Mα»™t tiện Γ­ch mở rα»™ng trong Burp Suite giΓΊp phΓ’n tΓ­ch tΓ i liệu OpenAPI, tα»± Δ‘α»™ng trΓ­ch xuαΊ₯t cΓ‘c endpoint vΓ  tαΊ‘o yΓͺu cαΊ§u thα»­ nghiệm.

  2. Postman:

    • CΓ΄ng cα»₯ kiểm thα»­ API phα»• biαΊΏn, cho phΓ©p nhαΊ­p tΓ i liệu OpenAPI để tα»± Δ‘α»™ng tαΊ‘o yΓͺu cαΊ§u HTTP.

    • Hα»— trợ kiểm tra tΓ­nh Δ‘ΓΊng Δ‘αΊ―n cα»§a phαΊ£n hα»“i vΓ  xΓ‘c thα»±c API bαΊ±ng cΓ‘c phΖ°Ζ‘ng phΓ‘p nhΖ° OAuth, API Key, JWT.

  3. SoapUI:

    • Kiểm thα»­ API SOAP vΓ  REST vα»›i cΓ‘c kα»‹ch bαΊ£n tα»± Δ‘α»™ng dα»±a trΓͺn tΓ i liệu API.

    • Cho phΓ©p mΓ΄ phỏng cΓ‘c yΓͺu cαΊ§u phα»©c tαΊ‘p vΓ  thα»±c hiện kiểm thα»­ chα»©c nΔƒng.


Quy trΓ¬nh kiểm thα»­ API dα»±a trΓͺn tΓ i liệu

  1. PhΓ’n tΓ­ch tΓ i liệu API:

    • Sα»­ dα»₯ng Burp hoαΊ·c Postman để nhαΊ­p vΓ  trΓ­ch xuαΊ₯t cΓ‘c endpoint.

    • XΓ‘c Δ‘α»‹nh cΓ‘c thΓ΄ng sα»‘ Δ‘αΊ§u vΓ o, phΖ°Ζ‘ng thα»©c HTTP được hα»— trợ vΓ  quy tαΊ―c xΓ‘c thα»±c.

  2. Gα»­i yΓͺu cαΊ§u kiểm thα»­:

    • Kiểm tra API bαΊ±ng cΓ‘ch gα»­i yΓͺu cαΊ§u thΓ΄ng qua Postman hoαΊ·c SoapUI.

    • PhΓ’n tΓ­ch phαΊ£n hα»“i vΓ  kiểm tra lα»—i logic hoαΊ·c bαΊ£o mαΊ­t.

  3. Kiểm tra bαΊ£o mαΊ­t tα»± Δ‘α»™ng:

    • Sα»­ dα»₯ng Burp Scanner để phΓ‘t hiện lα»— hα»•ng nhΖ° SQL Injection, XSS, Authentication Bypass.

    • Kiểm tra tΓ­nh chα»‘ng chα»‹u cα»§a API vα»›i giα»›i hαΊ‘n tα»‘c Δ‘α»™ (rate limiting) vΓ  kiểm tra lα»—i xα»­ lΓ½ Δ‘αΊ§u vΓ o.

Identifying API endpoints

  • Tα»± Δ‘α»™ng quΓ©t bαΊ±ng Burp Scanner:

    • Burp Scanner cΓ³ thể thα»±c hiện quΓ‘ trΓ¬nh crawling (thu thαΊ­p dα»― liệu) để phΓ‘t hiện cΓ‘c endpoint API.

    • Sau khi quΓ©t, kiểm tra cΓ‘c kαΊΏt quαΊ£ liΓͺn quan Δ‘αΊΏn cΓ‘c endpoint Δ‘Γ‘ng ngờ hoαΊ·c chΖ°a được ghi nhαΊ­n.

  • Duyệt α»©ng dα»₯ng thα»§ cΓ΄ng bαΊ±ng Burp's browser:

    • Sα»­ dα»₯ng trΓ¬nh duyệt proxy cα»§a Burp để quan sΓ‘t cΓ‘c yΓͺu cαΊ§u gα»­i Δ‘i trong thời gian thα»±c vΓ  tΓ¬m kiαΊΏm dαΊ₯u hiệu cα»§a API.

Tìm kiếm trong file JavaScript:

  • Nhiều endpoint API cΓ³ thể được tham chiαΊΏu trong cΓ‘c file JavaScript tαΊ£i xuα»‘ng tα»« trΓ¬nh duyệt.

  • DΓΉng cΓ΄ng cα»₯ JS Link Finder BApp cα»§a Burp Suite để tα»± Δ‘α»™ng phΓ’n tΓ­ch vΓ  trΓ­ch xuαΊ₯t cΓ‘c đường dαΊ«n API tα»« mΓ£ nguα»“n JavaScript.

  • CΕ©ng cΓ³ thể kiểm tra thα»§ cΓ΄ng bαΊ±ng cΓ‘ch duyệt vΓ  phΓ’n tΓ­ch cΓ‘c file .js trong Burp Suite.

Interacting with API endpoints

  • XΓ‘c Δ‘α»‹nh cΓ‘c endpoint API vΓ  sα»­ dα»₯ng Burp Repeater, Burp Intruder để kiểm tra.

  • Quan sΓ‘t hΓ nh vi cα»§a API vΓ  phΓ‘t hiện bề mαΊ·t tαΊ₯n cΓ΄ng tiềm αΊ©n.

  • Kiểm tra phαΊ£n hα»“i cα»§a API khi thay Δ‘α»•i phΖ°Ζ‘ng thα»©c HTTP vΓ  loαΊ‘i dα»― liệu.

  • PhΓ’n tΓ­ch kα»Ή thΓ΄ng bΓ‘o lα»—i vΓ  phαΊ£n hα»“i để thu thαΊ­p thΓ΄ng tin hα»―u Γ­ch.

  • Sα»­ dα»₯ng thΓ΄ng tin thu được để xΓ’y dα»±ng yΓͺu cαΊ§u HTTP hợp lệ.

Identifying supported HTTP methods

  • HTTP method xΓ‘c Δ‘α»‹nh hΓ nh Δ‘α»™ng được thα»±c hiện trΓͺn mα»™t tΓ i nguyΓͺn.

  • VΓ­ dα»₯ về cΓ‘c HTTP method phα»• biαΊΏn:

    • GET: LαΊ₯y dα»― liệu tα»« mα»™t tΓ i nguyΓͺn.

    • PATCH: Thay Δ‘α»•i mα»™t phαΊ§n cα»§a tΓ i nguyΓͺn.

    • OPTIONS: LαΊ₯y thΓ΄ng tin về cΓ‘c phΖ°Ζ‘ng thα»©c HTTP được hα»— trợ trΓͺn tΓ i nguyΓͺn.

  • Mα»™t endpoint API cΓ³ thể hα»— trợ nhiều phΖ°Ζ‘ng thα»©c HTTP khΓ‘c nhau, do Δ‘Γ³ cαΊ§n kiểm tra tαΊ₯t cαΊ£ cΓ‘c phΖ°Ζ‘ng thα»©c tiềm nΔƒng để khΓ‘m phΓ‘ thΓͺm chα»©c nΔƒng cα»§a endpoint vΓ  mở rα»™ng bề mαΊ·t tαΊ₯n cΓ΄ng.

  • VΓ­ dα»₯, endpoint /api/tasks cΓ³ thể hα»— trợ cΓ‘c phΖ°Ζ‘ng thα»©c sau:

    • GET /api/tasks: LαΊ₯y danh sΓ‘ch cΓ΄ng việc.

    • POST /api/tasks: TαΊ‘o mα»™t cΓ΄ng việc mα»›i.

    • DELETE /api/tasks/1: XΓ³a mα»™t cΓ΄ng việc.

  • Burp Intruder cΓ³ sαΊ΅n danh sΓ‘ch cΓ‘c HTTP method để tα»± Δ‘α»™ng kiểm tra hΓ ng loαΊ‘t phΖ°Ζ‘ng thα»©c khΓ‘c nhau.

  • LΖ°u Γ½:

    • Khi kiểm tra cΓ‘c phΖ°Ζ‘ng thα»©c HTTP, nΓͺn thα»­ nghiệm trΓͺn cΓ‘c Δ‘α»‘i tượng cΓ³ mα»©c Δ‘α»™ Ζ°u tiΓͺn thαΊ₯p để trΓ‘nh tΓ‘c Δ‘α»™ng khΓ΄ng mong muα»‘n nhΖ° thay Δ‘α»•i dα»― liệu quan trọng hoαΊ·c tαΊ‘o ra quΓ‘ nhiều bαΊ£n ghi.

Identifying supported content types

  • CΓ‘c endpoint API thường yΓͺu cαΊ§u dα»― liệu theo mα»™t Δ‘α»‹nh dαΊ‘ng cα»₯ thể.

  • API cΓ³ thể phαΊ£n hα»“i khΓ‘c nhau tΓΉy thuα»™c vΓ o kiểu nα»™i dung (content type) được gα»­i trong yΓͺu cαΊ§u.

  • Việc thay Δ‘α»•i kiểu nα»™i dung cΓ³ thể giΓΊp bαΊ‘n:

    • KΓ­ch hoαΊ‘t lα»—i để thu thαΊ­p thΓ΄ng tin hα»―u Γ­ch.

    • Bypass cΓ‘c biện phΓ‘p phΓ²ng thα»§ khΓ΄ng chαΊ·t chαΊ½.

    • Khai thΓ‘c sα»± khΓ‘c biệt trong logic xα»­ lΓ½, vΓ­ dα»₯: API cΓ³ thể an toΓ n khi xα»­ lΓ½ JSON nhΖ°ng dα»… bα»‹ tαΊ₯n cΓ΄ng injection khi xα»­ lΓ½ XML.

  • Để thay Δ‘α»•i kiểu nα»™i dung, cαΊ§n chỉnh sα»­a tiΓͺu đề Content-Type vΓ  Δ‘α»‹nh dαΊ‘ng lαΊ‘i phαΊ§n thΓ’n (body) cα»§a yΓͺu cαΊ§u cho phΓΉ hợp.

  • CΓ΄ng cα»₯ Content Type Converter BApp cΓ³ thể tα»± Δ‘α»™ng chuyển Δ‘α»•i dα»― liệu trong yΓͺu cαΊ§u giα»―a XML vΓ  JSON, giΓΊp dα»… dΓ ng thα»­ nghiệm nhiều Δ‘α»‹nh dαΊ‘ng khΓ‘c nhau.

Lab: Finding and exploiting an unused API endpoint

Using Intruder to find hidden endpoints

  • DΓΉng Burp Intruder để tΓ¬m endpoint αΊ©n sau khi xΓ‘c Δ‘α»‹nh cΓ‘c endpoint ban Δ‘αΊ§u.

  • Kiểm tra biαΊΏn thể cα»§a endpoint bαΊ±ng cΓ‘ch thΓͺm cΓ‘c chα»©c nΔƒng phα»• biαΊΏn nhΖ° delete, add.

  • Sα»­ dα»₯ng wordlists vα»›i cΓ‘c quy Ζ°α»›c Δ‘αΊ·t tΓͺn API phα»• biαΊΏn vΓ  thuαΊ­t ngα»― ngΓ nh.

  • Bα»• sung tα»« khΓ³a liΓͺn quan dα»±a trΓͺn thΓ΄ng tin thu thαΊ­p ban Δ‘αΊ§u - wordlist

Mass assignment vulnerabilities

Mass Assignment lΓ  mα»™t kα»Ή thuαΊ­t trong lαΊ­p trΓ¬nh web cho phΓ©p gΓ‘n giΓ‘ trα»‹ cho nhiều thuα»™c tΓ­nh cα»§a mα»™t Δ‘α»‘i tượng (object) cΓΉng lΓΊc, thường bαΊ±ng cΓ‘ch sα»­ dα»₯ng dα»― liệu tα»« request cα»§a người dΓΉng (vΓ­ dα»₯: JSON, form data). NΓ³ giΓΊp lαΊ­p trΓ¬nh viΓͺn giαΊ£m thiểu cΓ΄ng sα»©c viαΊΏt code khi xα»­ lΓ½ nhiều trường dα»― liệu cΓΉng mα»™t lΓΊc.

Identifying hidden parameters

  • XΓ‘c Δ‘α»‹nh tham sα»‘ αΊ©n: CΓ‘c tham sα»‘ αΊ©n cΓ³ thể được phΓ‘t hiện bαΊ±ng cΓ‘ch kiểm tra thα»§ cΓ΄ng cΓ‘c Δ‘α»‘i tượng do API trαΊ£ về.

  • VΓ­ dα»₯:

    • YΓͺu cαΊ§u PATCH /api/users/ để cαΊ­p nhαΊ­t username vΓ  email vα»›i dα»― liệu JSON:

    • Mα»™t yΓͺu cαΊ§u Δ‘α»“ng thời GET /api/users/123 trαΊ£ về:

  • Điều nΓ y cho thαΊ₯y cΓ‘c tham sα»‘ αΊ©n nhΖ° id vΓ  isAdmin cΓ³ thể tα»“n tαΊ‘i vΓ  được rΓ ng buα»™c vΓ o Δ‘α»‘i tượng người dΓΉng nα»™i bα»™, bΓͺn cαΊ‘nh cΓ‘c tham sα»‘ được cαΊ­p nhαΊ­t nhΖ° username vΓ  email.

  • KαΊΏt luαΊ­n: Kiểm tra phαΊ£n hα»“i tα»« API cΓ³ thể giΓΊp phΓ‘t hiện tham sα»‘ αΊ©n, cho phΓ©p khai thΓ‘c hoαΊ·c kiểm tra lα»— hα»•ng bαΊ£o mαΊ­t liΓͺn quan Δ‘αΊΏn mass assignment.

Kiểm tra lα»— hα»•ng Mass Assignment

Kiểm tra lα»— hα»•ng Mass Assignment

  • BΖ°α»›c 1: Thα»­ thΓͺm tham sα»‘ αΊ©n vΓ o yΓͺu cαΊ§u PATCH

    • Gα»­i yΓͺu cαΊ§u cαΊ­p nhαΊ­t thΓ΄ng tin người dΓΉng vα»›i tham sα»‘ isAdmin được thΓͺm vΓ o:

    • NαΊΏu α»©ng dα»₯ng chαΊ₯p nhαΊ­n yΓͺu cαΊ§u mΓ  khΓ΄ng cΓ³ phαΊ£n hα»“i lα»—i, cΓ³ thể tham sα»‘ nΓ y Δ‘ang được xα»­ lΓ½ nα»™i bα»™.

  • BΖ°α»›c 2: Kiểm tra phαΊ£n hα»“i vα»›i giΓ‘ trα»‹ khΓ΄ng hợp lệ

    • Gα»­i yΓͺu cαΊ§u PATCH vα»›i giΓ‘ trα»‹ khΓ΄ng hợp lệ cho isAdmin:

    • NαΊΏu α»©ng dα»₯ng phαΊ£n hα»“i khΓ‘c nhau giα»―a giΓ‘ trα»‹ hợp lệ vΓ  khΓ΄ng hợp lệ, Δ‘iều nΓ y cΓ³ thể cho thαΊ₯y tham sα»‘ Δ‘ang tΓ‘c Δ‘α»™ng Δ‘αΊΏn logic xα»­ lΓ½ cα»§a α»©ng dα»₯ng.

  • BΖ°α»›c 3: Khai thΓ‘c lα»— hα»•ng bαΊ±ng cΓ‘ch thay Δ‘α»•i giΓ‘ trα»‹ thΓ nh true

    • Gα»­i yΓͺu cαΊ§u PATCH vα»›i giΓ‘ trα»‹ isAdmin lΓ  true:

    • NαΊΏu tham sα»‘ nΓ y khΓ΄ng được kiểm tra vΓ  xΓ‘c thα»±c Δ‘ΓΊng cΓ‘ch, người dΓΉng cΓ³ thể được cαΊ₯p quyền admin ngoΓ i Γ½ muα»‘n.

  • BΖ°α»›c 4: Kiểm tra quyền truy cαΊ­p

    • Đăng nhαΊ­p vΓ o α»©ng dα»₯ng bαΊ±ng tΓ i khoαΊ£n wiener vΓ  kiểm tra xem cΓ³ thể truy cαΊ­p cΓ‘c tΓ­nh nΔƒng dΓ nh cho admin hay khΓ΄ng.

    • NαΊΏu cΓ³ thể truy cαΊ­p, chα»©ng tỏ α»©ng dα»₯ng Δ‘Γ£ bα»‹ khai thΓ‘c lα»— hα»•ng mass assignment.

KαΊΏt luαΊ­n: NαΊΏu α»©ng dα»₯ng khΓ΄ng kiểm tra vΓ  lọc tham sα»‘ αΊ©n hợp lΓ½, kαΊ» tαΊ₯n cΓ΄ng cΓ³ thể lợi dα»₯ng để chiαΊΏm quyền kiểm soΓ‘t hoαΊ·c thay Δ‘α»•i dα»― liệu quan trọng.

Lab: Exploiting a mass assignment vulnerability

Preventing vulnerabilities in APIs

Khi thiαΊΏt kαΊΏ API, yαΊΏu tα»‘ bαΊ£o mαΊ­t cαΊ§n được chΓΊ trọng ngay tα»« giai Δ‘oαΊ‘n Δ‘αΊ§u. Để Δ‘αΊ£m bαΊ£o an toΓ n, hΓ£y thα»±c hiện cΓ‘c bΖ°α»›c sau:

  1. BαΊ£o vệ tΓ i liệu API:

    • NαΊΏu API cα»§a bαΊ‘n khΓ΄ng dΓ nh cho cΓ΄ng khai, hΓ£y bαΊ£o mαΊ­t tΓ i liệu để hαΊ‘n chαΊΏ truy cαΊ­p trΓ‘i phΓ©p.

  2. CαΊ­p nhαΊ­t tΓ i liệu thường xuyΓͺn:

    • Đảm bαΊ£o tΓ i liệu luΓ΄n phαΊ£n Γ‘nh Δ‘ΓΊng hiện trαΊ‘ng cα»§a API, giΓΊp cΓ‘c tester hợp phΓ‘p dα»… dΓ ng kiểm tra vΓ  xΓ‘c Δ‘α»‹nh bề mαΊ·t tαΊ₯n cΓ΄ng.

  3. HαΊ‘n chαΊΏ phΖ°Ζ‘ng thα»©c HTTP:

    • Chỉ cho phΓ©p nhα»―ng HTTP method cαΊ§n thiαΊΏt (nhΖ° GET, POST) bαΊ±ng cΓ‘ch sα»­ dα»₯ng danh sΓ‘ch cho phΓ©p (allowlist).

  4. XΓ‘c thα»±c loαΊ‘i nα»™i dung (Content-Type):

    • Kiểm tra vΓ  Δ‘αΊ£m bαΊ£o rαΊ±ng mα»—i yΓͺu cαΊ§u (request) hoαΊ·c phαΊ£n hα»“i (response) chỉ chα»©a loαΊ‘i nα»™i dung phΓΉ hợp vα»›i dα»± kiαΊΏn.

  5. αΊ¨n thΓ΄ng tin trong lα»—i:

    • Thay vΓ¬ cung cαΊ₯p thΓ΄ng bΓ‘o lα»—i chi tiαΊΏt, hΓ£y sα»­ dα»₯ng cΓ‘c thΓ΄ng bΓ‘o lα»—i chung chung để trΓ‘nh rΓ² rỉ thΓ΄ng tin mΓ  kαΊ» tαΊ₯n cΓ΄ng cΓ³ thể lợi dα»₯ng.

  6. BαΊ£o mαΊ­t trΓͺn tαΊ₯t cαΊ£ cΓ‘c phiΓͺn bαΊ£n API:

    • KhΓ΄ng chỉ tαΊ­p trung vΓ o phiΓͺn bαΊ£n production, mΓ  mọi phiΓͺn bαΊ£n (bao gα»“m cαΊ£ phiΓͺn bαΊ£n cΕ© hoαΊ·c beta) đều cαΊ§n được Γ‘p dα»₯ng cΓ‘c biện phΓ‘p bαΊ£o vệ tΖ°Ζ‘ng tα»±.

  7. Ngăn ngừa lỗ hổng "Mass Assignment":

    • Sα»­ dα»₯ng danh sΓ‘ch cho phΓ©p (allowlist) để giα»›i hαΊ‘n cΓ‘c thuα»™c tΓ­nh mΓ  người dΓΉng cΓ³ thể cαΊ­p nhαΊ­t. Đồng thời, chαΊ·n nhα»―ng thuα»™c tΓ­nh nhαΊ‘y cαΊ£m bαΊ±ng danh sΓ‘ch chαΊ·n (blocklist) để ngΔƒn chαΊ·n truy cαΊ­p khΓ΄ng mong muα»‘n.

Server-side parameter pollution

Mα»™t sα»‘ hệ thα»‘ng chα»©a cΓ‘c API nα»™i bα»™ khΓ΄ng được truy cαΊ­p trα»±c tiαΊΏp tα»« internet. Lα»— hα»•ng Server-side Parameter Pollution (SSPP) xαΊ£y ra khi mα»™t trang web nhΓΊng Δ‘αΊ§u vΓ o cα»§a người dΓΉng vΓ o yΓͺu cαΊ§u gα»­i Δ‘αΊΏn API nα»™i bα»™ mΓ  khΓ΄ng thα»±c hiện mΓ£ hΓ³a Δ‘αΊ§y Δ‘α»§. Điều nΓ y cho phΓ©p kαΊ» tαΊ₯n cΓ΄ng thao tΓΊng hoαΊ·c tiΓͺm cΓ‘c tham sα»‘ khΓ‘c, dαΊ«n Δ‘αΊΏn:

  • Ghi Δ‘Γ¨ cΓ‘c tham sα»‘ hiện cΓ³.

  • Thay Δ‘α»•i hΓ nh vi cα»§a α»©ng dα»₯ng.

  • Truy cαΊ­p dα»― liệu trΓ‘i phΓ©p.

Testing the query string

1. Kiểm tra cαΊ―t chuα»—i truy vαΊ₯n (Truncating query strings)

Khi kiểm tra khαΊ£ nΔƒng cαΊ―t chuα»—i truy vαΊ₯n, bαΊ‘n cΓ³ thể thΓͺm kΓ½ tα»± Δ‘αΊ·c biệt nhΖ° #, &, hoαΊ·c = vΓ o Δ‘αΊ§u vΓ o cα»§a mΓ¬nh để quan sΓ‘t phαΊ£n hα»“i tα»« α»©ng dα»₯ng.

VΓ­ dα»₯ minh họa: Ứng dα»₯ng dα»… bα»‹ tαΊ₯n cΓ΄ng cho phΓ©p tΓ¬m kiαΊΏm người dΓΉng bαΊ±ng tΓͺn Δ‘Δƒng nhαΊ­p:

MΓ‘y chα»§ sαΊ½ gα»­i yΓͺu cαΊ§u nα»™i bα»™ sau:

Để thα»­ cαΊ―t chuα»—i truy vαΊ₯n, bαΊ‘n cΓ³ thể thΓͺm kΓ½ tα»± # (Δ‘Γ£ mΓ£ hΓ³a URL):

MΓ‘y chα»§ sau Δ‘Γ³ cΓ³ thể gα»­i yΓͺu cαΊ§u nα»™i bα»™ nhΖ° sau:

  • LΖ°u Γ½: KΓ½ tα»± # cαΊ§n được mΓ£ hΓ³a URL (vΓ­ dα»₯ %23). NαΊΏu khΓ΄ng, α»©ng dα»₯ng phΓ­a front-end sαΊ½ coi Δ‘Γ³ lΓ  "fragment identifier" vΓ  khΓ΄ng chuyển nΓ³ Δ‘αΊΏn API nα»™i bα»™.

  • DαΊ₯u hiệu khai thΓ‘c thΓ nh cΓ΄ng:

    • NαΊΏu phαΊ£n hα»“i trαΊ£ về kαΊΏt quαΊ£ cho người dΓΉng "peter" mΓ  khΓ΄ng cαΊ§n kiểm tra publicProfile, truy vαΊ₯n Δ‘Γ£ bα»‹ cαΊ―t thΓ nh cΓ΄ng.

    • NαΊΏu phαΊ£n hα»“i trαΊ£ về lα»—i nhΖ° "Invalid name", cΓ³ thể foo Δ‘Γ£ bα»‹ xα»­ lΓ½ nhΖ° mα»™t phαΊ§n cα»§a tΓͺn người dΓΉng.


2. TiΓͺm tham sα»‘ khΓ΄ng hợp lệ (Injecting invalid parameters)

BαΊ‘n cΓ³ thể sα»­ dα»₯ng kΓ½ tα»± & (Δ‘Γ£ mΓ£ hΓ³a URL) để thΓͺm tham sα»‘ mα»›i vΓ o yΓͺu cαΊ§u nα»™i bα»™.

VΓ­ dα»₯: Sα»­a chuα»—i truy vαΊ₯n nhΖ° sau:

Khi Δ‘Γ³, API nα»™i bα»™ sαΊ½ nhαΊ­n yΓͺu cαΊ§u:

  • Quan sΓ‘t phαΊ£n hα»“i:

    • NαΊΏu khΓ΄ng cΓ³ thay Δ‘α»•i, tham sα»‘ foo cΓ³ thể Δ‘Γ£ được tiΓͺm nhΖ°ng bα»‹ α»©ng dα»₯ng bỏ qua.

    • TiαΊΏp tα»₯c thα»­ nghiệm để hiểu rΓ΅ cΓ‘ch tham sα»‘ nΓ y được xα»­ lΓ½.


3. TiΓͺm tham sα»‘ hợp lệ (Injecting valid parameters)

Khi tΓ¬m ra cΓ‘c tham sα»‘ hợp lệ cΓ³ thể tiΓͺm, bαΊ‘n cΓ³ thể thΓͺm chΓΊng vΓ o yΓͺu cαΊ§u nα»™i bα»™.

VΓ­ dα»₯: NαΊΏu phΓ‘t hiện tham sα»‘ email, bαΊ‘n cΓ³ thể thΓͺm nΓ³:

YΓͺu cαΊ§u nα»™i bα»™ sαΊ½ trở thΓ nh:

  • Quan sΓ‘t phαΊ£n hα»“i:

    • NαΊΏu tham sα»‘ email được xα»­ lΓ½, bαΊ‘n cΓ³ thể kiểm tra xem nΓ³ αΊ£nh hưởng thαΊΏ nΓ o Δ‘αΊΏn phαΊ£n hα»“i.


4. Ghi Δ‘Γ¨ tham sα»‘ hiện cΓ³ (Overriding existing parameters)

Để kiểm tra lα»— hα»•ng, bαΊ‘n cΓ³ thể thα»­ tiΓͺm mα»™t tham sα»‘ trΓΉng tΓͺn để ghi Δ‘Γ¨ giΓ‘ trα»‹ ban Δ‘αΊ§u.

VΓ­ dα»₯: Sα»­a chuα»—i truy vαΊ₯n nhΖ° sau:

YΓͺu cαΊ§u nα»™i bα»™ sαΊ½ trở thΓ nh:

  • CΓ‘ch xα»­ lΓ½ phα»₯ thuα»™c cΓ΄ng nghệ web:

    • PHP: Chỉ xα»­ lΓ½ tham sα»‘ cuα»‘i cΓΉng (carlos).

    • ASP.NET: KαΊΏt hợp cαΊ£ hai tham sα»‘ (peter,carlos).

    • Node.js / Express: Chỉ xα»­ lΓ½ tham sα»‘ Δ‘αΊ§u tiΓͺn (peter).

  • DαΊ₯u hiệu khai thΓ‘c:

    • NαΊΏu ghi Δ‘Γ¨ thΓ nh cΓ΄ng, bαΊ‘n cΓ³ thể thα»­ thΓͺm tham sα»‘ nhΖ° name=administrator để thα»±c hiện hΓ nh vi khai thΓ‘c (vΓ­ dα»₯: Δ‘Δƒng nhαΊ­p dΖ°α»›i quyền admin).


Lab: Exploiting server-side parameter pollution in a query string

Testing for server-side parameter pollution in REST paths

Mα»™t API RESTful cΓ³ thể sα»­ dα»₯ng tΓͺn vΓ  giΓ‘ trα»‹ tham sα»‘ trong đường dαΊ«n URL thay vΓ¬ chuα»—i truy vαΊ₯n. VΓ­ dα»₯, xΓ©t đường dαΊ«n sau:

Đường dαΊ«n URL cΓ³ thể được phΓ’n tΓ­ch nhΖ° sau:

  • /api lΓ  Δ‘iểm cuα»‘i gα»‘c cα»§a API.

  • /users lΓ  tΓ i nguyΓͺn, trong trường hợp nΓ y lΓ  người dΓΉng.

  • /123 lΓ  tham sα»‘, ở Δ‘Γ’y lΓ  Δ‘α»‹nh danh cho người dΓΉng cα»₯ thể.

VΓ­ dα»₯ về α»©ng dα»₯ng dα»… bα»‹ tαΊ₯n cΓ΄ng: Mα»™t α»©ng dα»₯ng cho phΓ©p chỉnh sα»­a hα»“ sΖ‘ người dΓΉng theo tΓͺn Δ‘Δƒng nhαΊ­p. YΓͺu cαΊ§u được gα»­i Δ‘αΊΏn endpoint sau:

YΓͺu cαΊ§u phΓ­a mΓ‘y chα»§ sαΊ½ lΓ :

KαΊ» tαΊ₯n cΓ΄ng cΓ³ thể thao tΓΊng tham sα»‘ đường dαΊ«n phΓ­a mΓ‘y chα»§ để khai thΓ‘c API. Để kiểm tra lα»— hα»•ng nΓ y, bαΊ‘n cΓ³ thể thΓͺm cΓ‘c chuα»—i path traversal để thay Δ‘α»•i tham sα»‘ vΓ  quan sΓ‘t cΓ‘ch α»©ng dα»₯ng phαΊ£n hα»“i.

VΓ­ dα»₯ thα»­ nghiệm: BαΊ‘n cΓ³ thể gα»­i giΓ‘ trα»‹ mΓ£ hΓ³a URL peter/../admin cho tham sα»‘ name:

Điều nΓ y cΓ³ thể dαΊ«n Δ‘αΊΏn yΓͺu cαΊ§u phΓ­a mΓ‘y chα»§ sau:

  • NαΊΏu API hoαΊ·c mΓ‘y chα»§ phΓ­a back-end chuαΊ©n hΓ³a đường dαΊ«n (normalize path), nΓ³ cΓ³ thể giαΊ£i quyαΊΏt thΓ nh:

Lab: Exploiting server-side parameter pollution in a REST URL

Endpoint phΓ’n tΓ­ch chi tiαΊΏt:

  • /api/internal/v1/users/{username}/field/{field}:

    • Method: "get" (phΖ°Ζ‘ng thα»©c GET để lαΊ₯y dα»― liệu tα»« server).

    • Parameters:

      • "username":

        • LoαΊ‘i tham sα»‘: "in": "path" (tham sα»‘ nαΊ±m trong URL).

        • BαΊ―t buα»™c ("required": true).

        • CΓ³ mΓ΄ tαΊ£: "description": "Username".

      • "field":

        • ĐÒy lΓ  mα»™t tham sα»‘ khΓ‘c trong endpoint, cho phΓ©p bαΊ‘n xΓ‘c Δ‘α»‹nh loαΊ‘i thΓ΄ng tin cαΊ§n lαΊ₯y tα»« API (vΓ­ dα»₯: email, token...).

Last updated