HTTP/2 λ€μ΄κ·Έλ μ΄λμμμ μμ² μ€λ¨ΈκΈλ§
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/2λ μΌλ°μ μΌλ‘ κ° DATA νλ μμ κΈΈμ΄κ° λͺ μμ μ΄κΈ° λλ¬Έμ κ³ μ μ μΈ μμ² μ€λ¨ΈκΈλ§μ λ©΄μμ΄ μλ€κ³ μ¬κ²¨μ§λλ€. κ·Έλ¬λ νλ‘ νΈμλ νλ‘μκ° μμ²μ HTTP/1.xλ‘ βλ€μ΄κ·Έλ μ΄λβνμ¬ λ°±μλλ‘ μ λ¬νλ©΄ κ·Έ 보νΈλ μ¬λΌμ§λλ€. λ κ°μ μλ‘ λ€λ₯Έ νμ(HTTP/2 νλ‘ νΈμλμ HTTP/1 λ°±μλ)κ° νλμ μμ²μ΄ λλλ μ§μ κ³Ό λ€μ μμ²μ΄ μμλλ μ§μ μ λν΄ ν©μνλ €κ³ ν λ, λͺ¨λ μ€λλ λΉλκΈ° νΈλ¦μ΄ λ€μ λνλλ©° λͺ κ°μ§ μλ‘μ΄ νΈλ¦λ μΆκ°λ©λλ€.
λ€μ΄κ·Έλ μ΄λκ° λ°μνλ μ΄μ
- λΈλΌμ°μ λ μ΄λ―Έ HTTP/2λ₯Ό μ¬μ©νμ§λ§, λ§μ λ κ±°μ μ€λ¦¬μ§ μΈνλΌλ μ¬μ ν HTTP/1.1λ§ μ΄ν΄ν©λλ€.
- λ°λΌμ 리λ²μ€ νλ‘μ(CDN, WAF, λ‘λ λ°Έλ°μ)λ μ£μ§μμ TLS + HTTP/2λ₯Ό μ’ λ£νκ³ λͺ¨λ μμ²μ HTTP/1.1λ‘ μ¬μμ±ν©λλ€.
- λ³ν λ¨κ³μμλ μ€λ¦¬μ§μ΄ λ³Έλ¬Έ κΈΈμ΄λ₯Ό κ²°μ ν μ μλλ‘ λ λ€
Content-Lengthλ°/λλTransfer-Encoding: chunkedν€λλ₯Ό μμ±ν΄μΌ ν©λλ€.
νλ‘ νΈμλκ° HTTP/2 νλ μ κΈΈμ΄λ₯Ό μ λ’°νμ§λ§ λ°±μλκ° CL λλ TEλ₯Ό μ λ’°ν λ, 곡격μλ κ·Έλ€μ΄ λμνμ§ μλλ‘ κ°μν μ μμ΅λλ€.
λ κ°μ§ μ£Όμ μμ ν΄λμ€
| λ³ν | νλ‘ νΈμλ κΈΈμ΄ | λ°±μλ κΈΈμ΄ | μΌλ°μ μΈ νμ΄λ‘λ |
|---|---|---|---|
| H2.TE | HTTP/2 νλ μ | Transfer-Encoding: chunked | μ΅μ’
0\r\n\r\nμ΄ μ μ‘λμ§ μλ μΆκ° μ²ν¬ λ©μμ§ λ³Έλ¬Έμ ν¬ν¨νμ¬ λ°±μλκ° κ³΅κ²©μκ° μ 곡ν βλ€μβ μμ²μ κΈ°λ€λ¦¬κ² ν©λλ€. |
| H2.CL | HTTP/2 νλ μ | Content-Length | μ€μ λ³Έλ¬Έλ³΄λ€ μμ CLμ μ μ‘νμ¬ λ°±μλκ° κ²½κ³λ₯Ό λμ΄ λ€μ μμ²μ μ½λλ‘ ν©λλ€. |
μ΄λ€μ κ³ μ μ μΈ TE.CL / CL.TEμ λ³Έμ§μ μΌλ‘ λμΌνλ©°, λ¨μ§ HTTP/2κ° νμ μ€ νλλ₯Ό λ체ν©λλ€.
λ€μ΄κ·Έλ μ΄λ μ²΄μΈ μλ³
- TLS νΈλμ
°μ΄ν¬μμ ALPN μ¬μ© (
openssl s_client -alpn h2 -connect host:443) λλ curl:
curl -v --http2 https://target
* Using HTTP2κ° λνλλ©΄ μ£μ§κ° H2λ₯Ό μ¬μ©νκ³ μμ΅λλ€.
2. HTTP/2λ₯Ό ν΅ν΄ μλμ μΌλ‘ μλͺ»λ CL/TE μμ²μ μ μ‘ν©λλ€(Burp Repeaterλ μ΄μ HTTP/2λ₯Ό κ°μ νλ λλ‘λ€μ΄μ μ 곡ν©λλ€). μλ΅μ΄ 400 Bad chunkμ κ°μ HTTP/1.1 μ€λ₯μΈ κ²½μ°, μ£μ§κ° HTTP/1 νμλ₯Ό μν΄ νΈλν½μ λ³ννλ€λ μ¦κ±°κ° λ©λλ€.
μ΅μ€νλ‘μ μν¬νλ‘μ° (H2.TE μμ)
:method: POST
:path: /login
:scheme: https
:authority: example.com
content-length: 13 # ignored by the edge
transfer-encoding: chunked
5;ext=1\r\nHELLO\r\n
0\r\n\r\nGET /admin HTTP/1.1\r\nHost: internal\r\nX: X
- νλ‘ νΈμλλ μ νν 13λ°μ΄νΈ(
HELLO\r\n0\r\n\r\nGE)λ₯Ό μ½κ³ μμ²μ΄ λλ¬λ€κ³ μκ°νλ©° κ·Έλ§νΌμ μ€λ¦¬μ§μΌλ‘ μ λ¬ν©λλ€. - λ°±μλλ TE ν€λλ₯Ό μ λ’°νκ³ , λ λ²μ§Έ
0\r\n\r\nμ λ³Ό λκΉμ§ κ³μ μ½μ΄ 곡격μμ λ λ²μ§Έ μμ²(GET /admin β¦)μ μ λμ¬λ₯Ό μλΉν©λλ€. - λλ¨Έμ§(
GET /admin β¦)λ νΌν΄μμ λ€μ λκΈ° μ€μΈ μλ‘μ΄ μμ²μΌλ‘ μ²λ¦¬λ©λλ€.
λ°λ°μ λ μμ²μ λ€μμΌλ‘ κ΅μ²΄ν©λλ€:
POST /api/logoutμΌλ‘ μΈμ κ³ μ μ κ°μ ν©λλ€.GET /users/1234λ‘ νΌν΄μ νΉμ 리μμ€λ₯Ό νμ·¨ν©λλ€.
h2c λ°λ°μ (λͺ νν ν μ€νΈ μ κ·Έλ μ΄λ)
2023λ
μ°κ΅¬μ λ°λ₯΄λ©΄, νλ‘ νΈμλκ° HTTP/1.1 Upgrade: h2c ν€λλ₯Ό λͺ
νν ν
μ€νΈ HTTP/2λ₯Ό μ§μνλ λ°±μλλ‘ μ λ¬νλ©΄, 곡격μλ HTTP/1.1λ§ κ²μ¦λ μ£μ§λ₯Ό ν΅ν΄ μμ HTTP/2 νλ μμ ν°λλ§ν μ μμ΅λλ€. μ΄λ ν€λ μ κ·ν, WAF κ·μΉ λ° μ¬μ§μ΄ TLS μ’
λ£λ₯Ό μ°νν©λλ€.
μ£Όμ μꡬ μ¬ν:
- μ£μ§λ λ λ€
Connection: UpgradeμUpgrade: h2cλ₯Ό λ³κ²½νμ§ μκ³ μ λ¬ν©λλ€. - μ€λ¦¬μ§μ HTTP/2λ‘ μ¦κ°νκ³ μμ² λκΈ°μ΄μ κ°λ₯νκ² νλ μ°κ²° μ¬μ¬μ© μλ―Έλ₯Ό μ μ§ν©λλ€.
μνλ κ°λ¨ν©λλ€ β WebSocketsλ₯Ό μ μΈνκ³ μ£μ§μμ Upgrade ν€λλ₯Ό μ κ±°νκ±°λ νλμ½λ©ν©λλ€.
μ£Όλͺ©ν λ§ν μ€μ CVE (2022-2025)
- CVE-2023-25690 β Apache HTTP Server mod_proxy μ¬μμ± κ·μΉμ΄ μμ² λΆν λ° λ°λ°μ μ μν΄ μ°κ²°λ μ μμ΅λλ€. (2.4.56μμ μμ λ¨)
- CVE-2023-25950 β HTX νμκ° νμ΄νλΌμΈ μμ²μ μλͺ» μ²λ¦¬ν λ HAProxy 2.7/2.6 μμ²/μλ΅ λ°λ°μ .
- CVE-2022-41721 β Go
MaxBytesHandlerκ° λ¨μ λ³Έλ¬Έ λ°μ΄νΈλ₯Ό HTTP/2 νλ μμΌλ‘ νμ±νμ¬ νλ‘ν μ½ κ° λ°λ°μ μ κ°λ₯νκ² νμ΅λλ€.
λꡬ
- Burp Request Smuggler β v1.26λΆν° H2.TE/H2.CL λ° μ¨κ²¨μ§ ALPN μ§μμ μλμΌλ‘ ν μ€νΈν©λλ€. νμ₯ μ΅μ μμ βHTTP/2 νλ‘λΉβμ νμ±νν©λλ€.
- h2cSmuggler β Bishop Foxμ Python PoCλ‘ λͺ νν ν μ€νΈ μ κ·Έλ μ΄λ 곡격μ μλνν©λλ€:
python3 h2csmuggler.py -u https://target -x 'GET /admin HTTP/1.1\r\nHost: target\r\n\r\n'
- curl/
hyperβ μλ νμ΄λ‘λ μμ±:curl --http2-prior-knowledge -X POST --data-binary @payload.raw https://target.
λ°©μ΄ μ‘°μΉ
- μ’ λ¨ κ° HTTP/2 β λ€μ΄κ·Έλ μ΄λ λ³νμ μμ ν μ κ±°ν©λλ€.
- κΈΈμ΄ μ§μ€μ λ¨μΌ μΆμ² β λ€μ΄κ·Έλ μ΄λν λλ νμ μ ν¨ν
Content-Lengthλ₯Ό μμ±νκ³ μ¬μ©μ μ 곡Content-Length/Transfer-Encodingν€λλ₯Ό μ κ±°ν©λλ€. - λΌμ°νΈ μ μ μ κ·ν β λΌμ°ν /μ¬μμ± λ‘μ§ μ΄μ μ ν€λ μ ν μ μ©ν©λλ€.
- μ°κ²° 격리 β μ¬μ©μ κ°μ λ°±μλ TCP μ°κ²°μ μ¬μ¬μ©νμ§ λ§μμμ€; βμ°κ²°λΉ νλμ μμ²βμ λκΈ°μ΄ κΈ°λ° κ³΅κ²©μ 무λ ₯νν©λλ€.
- WebSocketμ΄ μλ κ²½μ°
Upgradeμ κ±° β h2c ν°λλ§μ λ°©μ§ν©λλ€.
μ°Έκ³ λ¬Έν
- PortSwigger Research β βHTTP/2: The Sequel is Always Worseβ https://portswigger.net/research/http2
- Bishop Fox β βh2c Smuggling: request smuggling via HTTP/2 clear-textβ https://bishopfox.com/blog/h2c-smuggling-request
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μ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


