Parameter Pollution | JSON Injection
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Blaai deur die volledige HackTricks Training-katalogus vir die assesseringsroetes (ARTA/GRTA/AzRTA) en Linux Hacking Expert (LHE).
Ondersteun HackTricks
- Kyk na die intekenplanne!
- Sluit aan by die 💬 Discord-groep, die telegram-groep, volg @hacktricks_live op X/Twitter, of kyk na die LinkedIn-bladsy en YouTube-kanaal.
- Deel hacking tricks deur PRs in te stuur na die HackTricks en HackTricks Cloud github repos.
HTTP Parameter Pollution (HPP) Oorsig
HTTP Parameter Pollution (HPP) is ’n tegniek waar aanvallers HTTP-parameters manipuleer om die gedrag van ’n webtoepassing op onverwagte maniere te verander. Hierdie manipulasie word gedoen deur HTTP-parameters by te voeg, te wysig, of te dupliseer. Die uitwerking van hierdie manipulering is nie direk vir die gebruiker sigbaar nie, maar kan die toepassing se funksionaliteit op die bediener aansienlik verander en waarneembare impakte aan die kliëntkant hê.
Voorbeeld van HTTP Parameter Pollution (HPP)
’n banktoepassing se transaksie-URL:
- Original URL:
https://www.victim.com/send/?from=accountA&to=accountB&amount=10000
Deur ’n ekstra from-parameter by te voeg:
- Manipulated URL:
https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC
Die transaksie kan verkeerdelik aan accountC gehef word in plaas van accountA, wat die potensiaal van HPP illustreer om transaksies of ander funksionaliteite soos wagwoordherstels, 2FA-instels, of API key-versoeke te manipuleer.
Tegnologie-spesifieke parameter-parsing
- Die wyse waarop parameters geparseer en geprioritiseer word hang af van die onderliggende webtegnologie, wat beïnvloed hoe HPP uitgebuit kan word.
- Gereedskap soos Wappalyzer help om hierdie tegnologieë en hul parsing-gedrag te identifiseer.
PHP and HPP Uitbuiting
OTP Manipulation Case:
- Context: ’n aanmeldmeganisme wat ’n One-Time Password (OTP) vereis is uitgebuit.
- Method: Deur die OTP-versoek te onderskep met gereedskap soos Burp Suite het aanvallers die
email-parameter in die HTTP-versoek gedupliseer. - Outcome: Die OTP, bedoel vir die aanvanklike e-pos, is in plaas daarvan na die tweede e-posadres gesend wat in die gemanipuleerde versoek gespesifiseer is. Hierdie fout het ongemagtigde toegang toegelaat deur die beoogde sekuriteitsmaatreël te omseil.
Hierdie scenario beklemtoon ’n kritieke tekortkoming in die toepassing se backend wat die eerste email-parameter vir OTP-generering verwerk het, maar die laaste vir aflewering gebruik het.
API Key Manipulation Case:
- Scenario: ’n Toepassing laat gebruikers toe om hul API key via ’n profielinstellingsbladsy op te dateer.
- Attack Vector: ’n Aanvaller ontdek dat deur ’n ekstra
api_key-parameter by die POST-versoek te heg, hulle die uitkoms van die API key-opdateringsfunksie kan manipuleer. - Technique: Deur ’n hulpmiddel soos Burp Suite te gebruik, bou die aanvaller ’n versoek wat twee
api_key-parameters bevat: een wettige en een kwaadwillige. Die bediener, wat slegs die laaste voorkoms verwerk, werk die API key op na die deur die aanvaller verskafde waarde. - Result: Die aanvaller kry beheer oor die slagoffer se API-funksionaliteit en kan moontlik privaat data sonder toestemming toegang kry of wysig.
Hierdie voorbeeld beklemtoon verder die noodsaaklikheid van veilige parameterhantering, veral in funksies so krities soos API key-bestuur.
Parameter-parsing: Flask vs. PHP
Die manier waarop webtegnologieë dubbelop HTTP-parameters hanteer verskil, wat hul kwesbaarheid vir HPP-aanvalle beïnvloed:
- Flask: Gebruik die eerste parameterwaarde wat gevind word, soos
a=1in ’n query stringa=1&a=2, en prioritiseer die aanvanklike voorkoms bo latere duplikate. - PHP (on Apache HTTP Server): Daarenteen prioriseer dit die laaste parameterwaarde, en kies dus
a=2in die gegewe voorbeeld. Hierdie gedrag kan onbedoeld HPP-uitbuitings vergemaklik deur die aanvaller se gemanipuleerde parameter bo die oorspronklike te laat geld.
HPP Toetsnotas (OWASP WSTG)
- HTTP-standaarde definieer nie hoe om veelvuldige parameters met dieselfde naam te interpreteer nie, dus verskil gedrag oor verskeie stacks en komponente.
- Wanneer jy server-side HPP toets, dupliseer elke parameter in query strings of bodies en waarneem of die toepassing waardes konkateneer, die eerste/laaste gebruik, of foutmeldings gee.
- Vir client-side HPP, injekteer ’n URL-encoded
&in ’n gereflekteerde parameterwaarde (bv.%26HPP_TEST) en soek na gedekodeerde voorkoms soos&HPP_TESTof&HPP_TESTbinne gegenereerde skakels of form actions.
Server-Side Parameter Pollution (SSPP) in Internal APIs
Sommige toepassings embed gebruikersinvoer in server-side versoeke na interne APIs. As daardie insette nie behoorlik geenkodeer is nie, kan jy parameters in die interne versoek injekteer of oorskryf. Toets enige gebruikersinvoer, insluitend query parameters, form fields, headers, en URL path parameters.
Common probes:
- Add a new parameter with
%26(URL-encoded&). - Truncate the downstream query with
%23(URL-encoded#). - Override an existing parameter by duplicating it.
Voorbeeld:
GET /userSearch?name=peter%26name=carlos&back=/home
Kan moontlik lei tot ’n server-side request soos:
GET /users/search?name=peter&name=carlos&publicProfile=true
Parameter pollution by technology
Hierdie resultate is geneem van https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89
PHP 8.3.11 AND Apache 2.4.62
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*l_Pf2JNCYhmfAvfk7UTEbQ.jpeg
- Ignoreer enigiets na %00 in die parameternaam .
- Hanteer name[] as array .
- _GET beteken nie GET Method nie .
- Gee voorkeur aan die laaste parameter .
Ruby 3.3.5 and WEBrick 1.8.2
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kKxtZ8qEmgTIMS81py5hhg.jpeg
- Gebruik die & en ; afbakeners om parameters te skei .
- Herken name[] nie .
- Gee voorkeur aan die eerste parameter .
Spring MVC 6.0.23 AND Apache Tomcat 10.1.30
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*llG22MF1gPTYZYFVCmCiVw.jpeg
- POST RequestMapping == PostMapping & GET RequestMapping == GetMapping .
- POST RequestMapping & PostMapping herken name[] .
- Gee voorkeur aan name as name AND name[] bestaan .
- Koppel parameters, bv. first,last .
- POST RequestMapping & PostMapping herken query-parameter met Content-Type .
NodeJS 20.17.0 AND Express 4.21.0
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg
- Herken name[] .
- Koppel parameters, bv. first,last .
GO 1.22.7
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg
- Herken name[] nie .
- Gee voorkeur aan die eerste parameter .
Python 3.12.6 AND Werkzeug 3.0.4 AND Flask 3.0.3
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg
- Herken name[] nie .
- Gee voorkeur aan die eerste parameter .
Python 3.12.6 AND Django 4.2.15
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg
- Herken name[] nie .
- Gee voorkeur aan die laaste parameter .
Python 3.12.6 AND Tornado 6.4.1
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg
- Herken name[] nie .
- Gee voorkeur aan die laaste parameter .
JSON Injection
Dubbele sleutels
obj = {"test": "user", "test": "admin"}
Die front-end mag die eerste voorkoms glo terwyl die backend die tweede voorkoms van die key gebruik.
Key Collision: Character Truncation and Comments
Sekere karakters sal nie korrek deur die front-end geïnterpreteer word nie, maar die backend sal dit wel interpreteer en daardie keys gebruik; dit kan nuttig wees om bypass certain restrictions:
{"test": 1, "test\[raw \x0d byte]": 2}
{"test": 1, "test\ud800": 2}
{"test": 1, "test"": 2}
{"test": 1, "te\st": 2}
Merk op hoe in hierdie gevalle die front end dalk dink dat test == 1 en die backend sal dink dat test == 2.
Dit kan ook gebruik word om value restrictions te bypass, soos:
{"role": "administrator\[raw \x0d byte]"}
{"role":"administrator\ud800"}
{"role": "administrator""}
{"role": "admini\strator"}
Gebruik van Comment Truncation
obj = {"description": "Duplicate with comments", "test": 2, "extra": /*, "test": 1, "extra2": */}
Hier sal ons die serializer van elke parser gebruik om sy onderskeie output te sien.
Serializer 1 (bv. GoLang’s GoJay library) sal die volgende produseer:
description = "Duplicate with comments"test = 2extra = ""
Serializer 2 (bv. Java’s JSON-iterator library) sal die volgende produseer:
description = "Duplicate with comments"extra = "/*"extra2 = "*/"test = 1
Alternatiewelik kan die direkte gebruik van comments ook effektief wees:
obj = {"description": "Comment support", "test": 1, "extra": "a"/*, "test": 2, "extra2": "b"*/}
Java se GSON-biblioteek:
{ "description": "Comment support", "test": 1, "extra": "a" }
Ruby se simdjson-biblioteek:
{ "description": "Comment support", "test": 2, "extra": "a", "extra2": "b" }
Inkonsekwente precedensie: Deserialization vs. Serialization
obj = {"test": 1, "test": 2}
obj["test"] // 1
obj.toString() // {"test": 2}
Float and Integer
Die getal
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
kan na verskeie voorstellings gedekodeer word, insluitend:
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9.999999999999999e95
1E+96
0
9223372036854775807
Wat moontlik tot inkonsekwenthede kan lei
Verwysings
-
https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654
-
https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution
-
https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89
-
https://bishopfox.com/blog/json-interoperability-vulnerabilities
-
https://portswigger.net/web-security/api-testing/server-side-parameter-pollution
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Blaai deur die volledige HackTricks Training-katalogus vir die assesseringsroetes (ARTA/GRTA/AzRTA) en Linux Hacking Expert (LHE).
Ondersteun HackTricks
- Kyk na die intekenplanne!
- Sluit aan by die 💬 Discord-groep, die telegram-groep, volg @hacktricks_live op X/Twitter, of kyk na die LinkedIn-bladsy en YouTube-kanaal.
- Deel hacking tricks deur PRs in te stuur na die HackTricks en HackTricks Cloud github repos.


