๐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.comTrong 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,DELETEvร 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
Dรนng Burp Scanner ฤแป quรฉt
Manual bแบฑng cรกc endpoint cรณ thแป chแปฉa API Documenrt
/api
/swagger/index.html
/openapi.jsonCรณ 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
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.
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.
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
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.
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.
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
.jstrong 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/taskscรณ 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แบญtusernamevรemailvแปi dแปฏ liแปu JSON:{ "username": "wiener", "email": "wiener@example.com" }Mแปt yรชu cแบงu ฤแปng thแปi
GET /api/users/123trแบฃ vแป:{ "id": 123, "name": "John Doe", "email": "john@example.com", "isAdmin": "false" }
ฤiแปu nร y cho thแบฅy cรกc tham sแป แบฉn nhฦฐ
idvรisAdmincรณ 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ฦฐusernamevร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:{ "username": "wiener", "email": "wiener@example.com", "isAdmin": false }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:{ "username": "wiener", "email": "wiener@example.com", "isAdmin": "foo" }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
trueGแปญi yรชu cแบงu PATCH vแปi giรก trแป
isAdminlรtrue:{ "username": "wiener", "email": "wiener@example.com", "isAdmin": 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
wienervร 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:
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.
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.
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).
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.
แบจ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.
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แปฑ.
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:
GET /userSearch?name=peter&back=/homeMรกy chแปง sแบฝ gแปญi yรชu cแบงu nแปi bแป sau:
GET /users/search?name=peter&publicProfile=trueฤแป thแปญ cแบฏt chuแปi truy vแบฅn, bแบกn cรณ thแป thรชm kรฝ tแปฑ # (ฤรฃ mรฃ hรณa URL):
GET /userSearch?name=peter%23foo&back=/homeMรกy chแปง sau ฤรณ cรณ thแป gแปญi yรชu cแบงu nแปi bแป nhฦฐ sau:
GET /users/search?name=peter#foo&publicProfile=trueLฦฐ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:
GET /userSearch?name=peter%26foo=xyz&back=/homeKhi ฤรณ, API nแปi bแป sแบฝ nhแบญn yรชu cแบงu:
GET /users/search?name=peter&foo=xyz&publicProfile=trueQuan sรกt phแบฃn hแปi:
Nแบฟu khรดng cรณ thay ฤแปi, tham sแป
foocรณ 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รณ:
GET /userSearch?name=peter%26email=foo&back=/homeYรชu cแบงu nแปi bแป sแบฝ trแป thร nh:
GET /users/search?name=peter&email=foo&publicProfile=trueQuan 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:
GET /userSearch?name=peter%26name=carlos&back=/homeYรชu cแบงu nแปi bแป sแบฝ trแป thร nh:
GET /users/search?name=peter&name=carlos&publicProfile=trueCรก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:
/api/users/123ฤฦฐแป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:
GET /edit_profile.php?name=peterYรชu cแบงu phรญa mรกy chแปง sแบฝ lร :
GET /api/private/users/peterKแบป 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:
GET /edit_profile.php?name=peter%2f..%2fadminฤiแปu nร y cรณ thแป dแบซn ฤแบฟn yรชu cแบงu phรญa mรกy chแปง sau:
GET /api/private/users/peter/../adminNแบฟ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:
GET /api/private/users/admin
Lab: Exploiting server-side parameter pollution in a REST URL



{
"error": "Unexpected response from API server: {
\"openapi\": \"3.0.0\",
\"info\": {
\"title\": \"User API\",
\"version\": \"2.0.0\"
},
\"paths\": {
\"/api/internal/v1/users/{username}/field/{field}\": {
\"get\": {
\"tags\": [
\"users\"
],
\"summary\": \"Find user by username\",
\"description\": \"API Version 1\",
\"parameters\": [
{
\"name\": \"username\",
\"in\": \"path\",
\"description\": \"Username\",
\"required\": true,
\"schema\": {
\"type\": \"string\"
}
},
{
\"name\": \"field\",
\"in\": \"path\",
\"description\": \"Field to retrieve (e.g., email, passwordResetToken)\",
\"required\": true,
\"schema\": {
\"type\": \"string\"
}
}
]
}
}
}
}"
}
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