Parameter Pollution | JSON Injection
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
HTTP Parameter Pollution (HPP) ๊ฐ์
HTTP Parameter Pollution (HPP)๋ ๊ณต๊ฒฉ์๊ฐ HTTP ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ์๋ํ์ง ์์ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ธฐ์ ์ ๋๋ค. ์ด ์กฐ์์ HTTP ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐ, ์์ ๋๋ ๋ณต์ ํจ์ผ๋ก์จ ์ด๋ฃจ์ด์ง๋๋ค. ์ด๋ฌํ ์กฐ์์ ํจ๊ณผ๋ ์ฌ์ฉ์์๊ฒ ์ง์ ์ ์ผ๋ก ๋ณด์ด์ง ์์ง๋ง, ์๋ฒ ์ธก์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ์๋นํ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ ์ธก์์ ๊ด์ฐฐ ๊ฐ๋ฅํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
HTTP Parameter Pollution (HPP) ์์
์ํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฑฐ๋ URL:
- ์๋ณธ URL:
https://www.victim.com/send/?from=accountA&to=accountB&amount=10000
์ถ๊ฐ from ๋งค๊ฐ๋ณ์๋ฅผ ์ฝ์
ํจ์ผ๋ก์จ:
- ์กฐ์๋ URL:
https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC
๊ฑฐ๋๊ฐ accountA๊ฐ ์๋ accountC์ ์๋ชป ์ฒญ๊ตฌ๋ ์ ์์ผ๋ฉฐ, ์ด๋ HPP๊ฐ ๊ฑฐ๋ ๋๋ ๋น๋ฐ๋ฒํธ ์ฌ์ค์ , 2FA ์ค์ , API ํค ์์ฒญ๊ณผ ๊ฐ์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์กฐ์ํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ๋ณด์ฌ์ค๋๋ค.
๊ธฐ์ ๋ณ ๋งค๊ฐ๋ณ์ ํ์ฑ
- ๋งค๊ฐ๋ณ์๊ฐ ํ์ฑ๋๊ณ ์ฐ์ ์์๊ฐ ๋งค๊ฒจ์ง๋ ๋ฐฉ์์ ๊ธฐ๋ณธ ์น ๊ธฐ์ ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ, HPP๊ฐ ์ด๋ป๊ฒ ์ ์ฉ๋ ์ ์๋์ง์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- Wappalyzer์ ๊ฐ์ ๋๊ตฌ๋ ์ด๋ฌํ ๊ธฐ์ ๊ณผ ๊ทธ ํ์ฑ ๋์์ ์๋ณํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
PHP์ HPP ์ ์ฉ
OTP ์กฐ์ ์ฌ๋ก:
- ๋งฅ๋ฝ: ์ผํ์ฉ ๋น๋ฐ๋ฒํธ(OTP)๋ฅผ ์๊ตฌํ๋ ๋ก๊ทธ์ธ ๋ฉ์ปค๋์ฆ์ด ์ ์ฉ๋์์ต๋๋ค.
- ๋ฐฉ๋ฒ: Burp Suite์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ OTP ์์ฒญ์ ๊ฐ๋ก์ฑ๊ณ , ๊ณต๊ฒฉ์๋ HTTP ์์ฒญ์์
email๋งค๊ฐ๋ณ์๋ฅผ ๋ณต์ ํ์ต๋๋ค. - ๊ฒฐ๊ณผ: ์ด๊ธฐ ์ด๋ฉ์ผ์ ์ํ OTP๊ฐ ์กฐ์๋ ์์ฒญ์์ ์ง์ ๋ ๋ ๋ฒ์งธ ์ด๋ฉ์ผ ์ฃผ์๋ก ์ ์ก๋์์ต๋๋ค. ์ด ๊ฒฐํจ์ ์๋๋ ๋ณด์ ์กฐ์น๋ฅผ ์ฐํํ์ฌ ๋ฌด๋จ ์ ๊ทผ์ ํ์ฉํ์ต๋๋ค.
์ด ์๋๋ฆฌ์ค๋ OTP ์์ฑ์ ์ํด ์ฒซ ๋ฒ์งธ email ๋งค๊ฐ๋ณ์๋ฅผ ์ฒ๋ฆฌํ์ง๋ง, ์ ๋ฌ์ ์ํด ๋ง์ง๋ง ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฑ์๋์์์ ์ค์ํ ๊ฐ๊ณผ๋ฅผ ๊ฐ์กฐํฉ๋๋ค.
API ํค ์กฐ์ ์ฌ๋ก:
- ์๋๋ฆฌ์ค: ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉ์๊ฐ ํ๋กํ ์ค์ ํ์ด์ง๋ฅผ ํตํด API ํค๋ฅผ ์ ๋ฐ์ดํธํ ์ ์๋๋ก ํ์ฉํฉ๋๋ค.
- ๊ณต๊ฒฉ ๋ฒกํฐ: ๊ณต๊ฒฉ์๋ POST ์์ฒญ์ ์ถ๊ฐ
api_key๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ API ํค ์ ๋ฐ์ดํธ ๊ธฐ๋ฅ์ ๊ฒฐ๊ณผ๋ฅผ ์กฐ์ํ ์ ์์์ ๋ฐ๊ฒฌํฉ๋๋ค. - ๊ธฐ์ : Burp Suite์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต๊ฒฉ์๋ ํ๋์ ํฉ๋ฒ์ ์ธ
api_key๋งค๊ฐ๋ณ์์ ํ๋์ ์ ์์ ์ธapi_key๋งค๊ฐ๋ณ์๋ฅผ ํฌํจํ๋ ์์ฒญ์ ์์ฑํฉ๋๋ค. ์๋ฒ๋ ๋ง์ง๋ง ๋ฐ์๋ง ์ฒ๋ฆฌํ์ฌ ๊ณต๊ฒฉ์๊ฐ ์ ๊ณตํ ๊ฐ์ผ๋ก API ํค๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. - ๊ฒฐ๊ณผ: ๊ณต๊ฒฉ์๋ ํผํด์์ API ๊ธฐ๋ฅ์ ์ ์ดํ๊ฒ ๋์ด, ๊ฐ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ฌด๋จ์ผ๋ก ์ ๊ทผํ๊ฑฐ๋ ์์ ํ ์ ์์ต๋๋ค.
์ด ์์๋ API ํค ๊ด๋ฆฌ์ ๊ฐ์ ์ค์ํ ๊ธฐ๋ฅ์์ ์์ ํ ๋งค๊ฐ๋ณ์ ์ฒ๋ฆฌ๊ฐ ํ์ํจ์ ๋์ฑ ๊ฐ์กฐํฉ๋๋ค.
๋งค๊ฐ๋ณ์ ํ์ฑ: Flask vs. PHP
์น ๊ธฐ์ ์ด ์ค๋ณต HTTP ๋งค๊ฐ๋ณ์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋ค๋ฅด๋ฉฐ, HPP ๊ณต๊ฒฉ์ ๋ํ ์ทจ์ฝ์ฑ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค:
- Flask: ์ฟผ๋ฆฌ ๋ฌธ์์ด
a=1&a=2์์a=1๊ณผ ๊ฐ์ ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์ ๊ฐ์ ์ฑํํ๋ฉฐ, ์ด๊ธฐ ์ธ์คํด์ค๋ฅผ ํ์ ์ค๋ณต๋ณด๋ค ์ฐ์ ์ํฉ๋๋ค. - PHP (Apache HTTP Server์์): ๋ฐ๋๋ก, ๋ง์ง๋ง ๋งค๊ฐ๋ณ์ ๊ฐ์ ์ฐ์ ์ํ์ฌ ์ฃผ์ด์ง ์์์
a=2๋ฅผ ์ ํํฉ๋๋ค. ์ด ๋์์ ๊ณต๊ฒฉ์๊ฐ ์กฐ์ํ ๋งค๊ฐ๋ณ์๋ฅผ ์๋ณธ๋ณด๋ค ์ฐ์ ์ํจ์ผ๋ก์จ HPP ์ ์ฉ์ ์ฐ์ฐํ ์ด์งํ ์ ์์ต๋๋ค.
๊ธฐ์ ๋ณ ๋งค๊ฐ๋ณ์ ์ค์ผ
๊ฒฐ๊ณผ๋ https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89์์ ๊ฐ์ ธ์์ต๋๋ค.
PHP 8.3.11 ๋ฐ Apache 2.4.62
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*l_Pf2JNCYhmfAvfk7UTEbQ.jpeg
- ๋งค๊ฐ๋ณ์ ์ด๋ฆ ๋ค์ %00์ ๋ฌด์ํฉ๋๋ค.
- name[]๋ฅผ ๋ฐฐ์ด๋ก ์ฒ๋ฆฌํฉ๋๋ค.
- _GET์ GET ๋ฉ์๋๋ฅผ ์๋ฏธํ์ง ์์ต๋๋ค.
- ๋ง์ง๋ง ๋งค๊ฐ๋ณ์๋ฅผ ์ ํธํฉ๋๋ค.
Ruby 3.3.5 ๋ฐ WEBrick 1.8.2
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kKxtZ8qEmgTIMS81py5hhg.jpeg
- & ๋ฐ ; ๊ตฌ๋ถ์๋ฅผ ์ฌ์ฉํ์ฌ ๋งค๊ฐ๋ณ์๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค.
- name[]๋ฅผ ์ธ์ํ์ง ์์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ฅผ ์ ํธํฉ๋๋ค.
Spring MVC 6.0.23 ๋ฐ 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์์ name[]๋ฅผ ์ธ์ํฉ๋๋ค.
- name๊ณผ name[]๊ฐ ๋ชจ๋ ์กด์ฌํ ๊ฒฝ์ฐ name์ ์ ํธํฉ๋๋ค.
- ๋งค๊ฐ๋ณ์๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค. ์: first,last.
- POST RequestMapping & PostMapping์์ Content-Type๊ณผ ํจ๊ป ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์๋ฅผ ์ธ์ํฉ๋๋ค.
NodeJS 20.17.0 ๋ฐ Express 4.21.0
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg
- name[]๋ฅผ ์ธ์ํฉ๋๋ค.
- ๋งค๊ฐ๋ณ์๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค. ์: first,last.
GO 1.22.7
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg
- name[]๋ฅผ ์ธ์ํ์ง ์์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ฅผ ์ ํธํฉ๋๋ค.
Python 3.12.6 ๋ฐ Werkzeug 3.0.4 ๋ฐ Flask 3.0.3
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg
- name[]๋ฅผ ์ธ์ํ์ง ์์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ฅผ ์ ํธํฉ๋๋ค.
Python 3.12.6 ๋ฐ Django 4.2.15
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg
- name[]๋ฅผ ์ธ์ํ์ง ์์ต๋๋ค.
- ๋ง์ง๋ง ๋งค๊ฐ๋ณ์๋ฅผ ์ ํธํฉ๋๋ค.
Python 3.12.6 ๋ฐ Tornado 6.4.1
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg
- name[]๋ฅผ ์ธ์ํ์ง ์์ต๋๋ค.
- ๋ง์ง๋ง ๋งค๊ฐ๋ณ์๋ฅผ ์ ํธํฉ๋๋ค.
JSON Injection
์ค๋ณต ํค
obj = {"test": "user", "test": "admin"}
ํ๋ก ํธ์๋๋ ์ฒซ ๋ฒ์งธ ๋ฐ์์ ๋ฏฟ์ ์ ์์ง๋ง ๋ฐฑ์๋๋ ๋ ๋ฒ์งธ ๋ฐ์์ ํค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํค ์ถฉ๋: ๋ฌธ์ ์๋ฆผ ๋ฐ ์ฃผ์
ํน์ ๋ฌธ์๋ ํ๋ก ํธ์๋์์ ์ฌ๋ฐ๋ฅด๊ฒ ํด์๋์ง ์์ง๋ง ๋ฐฑ์๋๋ ์ด๋ฅผ ํด์ํ๊ณ ํด๋น ํค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ํน์ ์ ํ์ ์ฐํํ๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค:
{"test": 1, "test\[raw \x0d byte]": 2}
{"test": 1, "test\ud800": 2}
{"test": 1, "test"": 2}
{"test": 1, "te\st": 2}
์ด ๊ฒฝ์ฐ ํ๋ก ํธ ์๋๋ test == 1์ด๋ผ๊ณ ์๊ฐํ ์ ์๊ณ ๋ฐฑ์๋๋ test == 2๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค.
์ด๊ฒ์ ๋ค์๊ณผ ๊ฐ์ ๊ฐ ์ ํ์ ์ฐํํ๋ ๋ฐ์๋ ์ฌ์ฉ๋ ์ ์์ต๋๋ค:
{"role": "administrator\[raw \x0d byte]"}
{"role":"administrator\ud800"}
{"role": "administrator""}
{"role": "admini\strator"}
์ฃผ์ ์๋ผ๋ด๊ธฐ ์ฌ์ฉ
obj = {"description": "Duplicate with comments", "test": 2, "extra": /*, "test": 1, "extra2": */}
์ฌ๊ธฐ์์๋ ๊ฐ ํ์์ ์ง๋ ฌ ๋ณํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์ถ๋ ฅ์ ๋ณผ ๊ฒ์ ๋๋ค.
Serializer 1 (์: GoLang์ GoJay ๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ๋ค์์ ์์ฑํฉ๋๋ค:
description = "Duplicate with comments"test = 2extra = ""
Serializer 2 (์: Java์ JSON-iterator ๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ๋ค์์ ์์ฑํฉ๋๋ค:
description = "Duplicate with comments"extra = "/*"extra2 = "*/"test = 1
๋๋, ์ฃผ์์ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ๋ ๊ฒ๋ ํจ๊ณผ์ ์ผ ์ ์์ต๋๋ค:
obj = {"description": "Comment support", "test": 1, "extra": "a"/*, "test": 2, "extra2": "b"*/}
Java์ GSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ:
{ "description": "Comment support", "test": 1, "extra": "a" }
๋ฃจ๋น์ simdjson ๋ผ์ด๋ธ๋ฌ๋ฆฌ:
{ "description": "Comment support", "test": 2, "extra": "a", "extra2": "b" }
์ผ๊ด๋์ง ์์ ์ฐ์ ์์: ์ญ์ง๋ ฌํ ๋ ์ง๋ ฌํ
obj = {"test": 1, "test": 2}
obj["test"] // 1
obj.toString() // {"test": 2}
Float and Integer
์ซ์
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
์ฌ๋ฌ ํํ์ผ๋ก ๋์ฝ๋ฉ๋ ์ ์์ต๋๋ค. ๋ค์์ ํฌํจํ์ฌ:
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9.999999999999999e95
1E+96
0
9223372036854775807
์ด๋ค ๊ฒ์ด ๋ถ์ผ์น๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค
References
- 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
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


