Upgrade Header Smuggling
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μ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
H2C Smuggling
HTTP2 Over Cleartext (H2C)
H2C, λλ http2 over cleartext, νμ€ HTTP μ°κ²°μ μ§μμ μΈ μ°κ²°λ‘ μ κ·Έλ μ΄λνμ¬ μΌμμ μΈ HTTP μ°κ²°μ κ·λ²μμ λ²μ΄λ©λλ€. μ΄ μ κ·Έλ μ΄λλ μ°κ²°μ νλ¬Έ HTTPμ λ¨μΌ μμ² νΉμ± λμ μ§μμ μΈ ν΅μ μ μν΄ http2 μ΄μ§ νλ‘ν μ½μ μ¬μ©ν©λλ€.
λ°μ λ¬Έμ μ ν΅μ¬μ 리λ²μ€ νλ‘μμ μ¬μ©μμ λ°μν©λλ€. μΌλ°μ μΌλ‘ 리λ²μ€ νλ‘μλ HTTP μμ²μ μ²λ¦¬νκ³ λ°±μλλ‘ μ λ¬νλ©°, κ·Έ ν λ°±μλμ μλ΅μ λ°νν©λλ€. κ·Έλ¬λ HTTP μμ²μ Connection: Upgrade ν€λκ° ν¬ν¨λμ΄ μμ λ(μΉμμΌ μ°κ²°μμ μΌλ°μ μΌλ‘ λ³Ό μ μμ), 리λ²μ€ νλ‘μλ ν΄λΌμ΄μΈνΈμ μλ² κ°μ μ§μμ μΈ μ°κ²°μ μ μ§νμ¬ νΉμ νλ‘ν μ½μμ μꡬνλ μ§μμ μΈ κ΅νμ μ©μ΄νκ² ν©λλ€. H2C μ°κ²°μ κ²½μ°, RFC μ€μλ₯Ό μν΄ μΈ κ°μ§ νΉμ ν€λκ° νμν©λλ€:
Upgrade: h2c
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
Connection: Upgrade, HTTP2-Settings
μ·¨μ½μ μ μ°κ²°μ μ κ·Έλ μ΄λν ν, 리λ²μ€ νλ‘μκ° κ°λ³ μμ²μ κ΄λ¦¬νμ§ μκ² λμ΄ μ°κ²° μ€μ ν λΌμ°ν μμ μ΄ μλ£λμλ€κ³ κ°μ ν λ λ°μν©λλ€. H2C Smugglingμ μ΄μ©νλ©΄ μμ² μ²λ¦¬ μ€ μ μ©λ 리λ²μ€ νλ‘μ κ·μΉ(μ: κ²½λ‘ κΈ°λ° λΌμ°ν , μΈμ¦ λ° WAF μ²λ¦¬)μ μ°νν μ μμΌλ©°, H2C μ°κ²°μ΄ μ±κ³΅μ μΌλ‘ μμλμλ€κ³ κ°μ ν©λλ€.
μ·¨μ½ν νλ‘μ
μ·¨μ½μ μ 리λ²μ€ νλ‘μκ° Upgrade λ° λλλ‘ Connection ν€λλ₯Ό μ²λ¦¬νλ λ°©μμ λ°λΌ λ¬λΌμ§λλ€. λ€μ νλ‘μλ νλ‘μ ν¨μ€ μ€ μ΄λ¬ν ν€λλ₯Ό λ³Έμ§μ μΌλ‘ μ λ¬νμ¬ H2C μ€λ¨ΈκΈλ§μ κ°λ₯νκ² ν©λλ€:
- HAProxy
- Traefik
- Nuster
λ°λλ‘, μ΄λ¬ν μλΉμ€λ νλ‘μ ν¨μ€ μ€ λ ν€λλ₯Ό λ³Έμ§μ μΌλ‘ μ λ¬νμ§ μμ΅λλ€. κ·Έλ¬λ λΆμμ νκ² κ΅¬μ±λ μ μμ΄ Upgrade λ° Connection ν€λμ νν°λ§ μλ μ λ¬μ νμ©ν μ μμ΅λλ€:
- AWS ALB/CLB
- NGINX
- Apache
- Squid
- Varnish
- Kong
- Envoy
- Apache Traffic Server
μ μ©
λͺ¨λ μλ²κ° H2C μ°κ²° μ
κ·Έλ μ΄λμ νμν ν€λλ₯Ό λ³Έμ§μ μΌλ‘ μ λ¬νμ§ μλλ€λ μ μ μ μν΄μΌ ν©λλ€. λ°λΌμ AWS ALB/CLB, NGINX λ° Apache Traffic Serverμ κ°μ μλ²λ μμ°μ€λ½κ² H2C μ°κ²°μ μ°¨λ¨ν©λλ€. κ·ΈλΌμλ λΆκ΅¬νκ³ , Connection: Upgrade λ³νμ μ¬μ©νμ¬ ν
μ€νΈν΄ λ³Ό κ°μΉκ° μμΌλ©°, μ΄λ Connection ν€λμμ HTTP2-Settings κ°μ μ μΈν©λλ€. μΌλΆ λ°±μλλ νμ€μ μ€μνμ§ μμ μ μμ΅λλ€.
Caution
proxy_passURLμ μ§μ λ νΉμ κ²½λ‘(μ:http://backend:9999/socket.io)μ κ΄κ³μμ΄, μ€μ λ μ°κ²°μ κΈ°λ³Έμ μΌλ‘http://backend:9999λ‘ μ€μ λ©λλ€. μ΄λ μ΄ κΈ°μ μ νμ©νμ¬ ν΄λΉ λ΄λΆ μλν¬μΈνΈ λ΄μ λͺ¨λ κ²½λ‘μ μνΈμμ©ν μ μκ² ν©λλ€. λ°λΌμproxy_passURLμ κ²½λ‘λ₯Ό μ§μ νλ κ²μ μ κ·Όμ μ ννμ§ μμ΅λλ€.
λꡬ h2csmuggler by BishopFox λ° h2csmuggler by assetnoteλ H2C μ°κ²°μ μ€μ νμ¬ νλ‘μκ° λΆκ³Όν 보νΈλ₯Ό μ°ννλ €λ μλλ₯Ό μ©μ΄νκ² νμ¬ νλ‘μλ‘ λ³΄νΈλ 리μμ€μ μ κ·Όν μ μκ² ν©λλ€.
μ΄ μ·¨μ½μ μ λν μΆκ° μ 보, νΉν NGINXμ κ΄λ ¨νμ¬, μ΄ μμΈ λ¦¬μμ€λ₯Ό μ°Έμ‘°νμμμ€.
μΉμμΌ μ€λ¨ΈκΈλ§
μΉμμΌ μ€λ¨ΈκΈλ§μ νλ‘μλ₯Ό ν΅ν΄ μ κ·Όν μ μλ μλν¬μΈνΈμ HTTP2 ν°λμ μμ±νλ κ²κ³Ό λ¬λ¦¬, μ μ¬μ μΈ νλ‘μ μ νμ μ°ννκ³ μλν¬μΈνΈμ μ§μ ν΅μ νκΈ° μν΄ μΉμμΌ ν°λμ μ€μ ν©λλ€.
μλλ¦¬μ€ 1
μ΄ μλ리μ€μμλ κ³΅κ° μΉμμΌ APIμ μ κ·Όν μ μλ λ΄λΆ REST APIλ₯Ό μ 곡νλ λ°±μλκ° μ μμ μΈ ν΄λΌμ΄μΈνΈμ 곡격 λμμ΄ λ©λλ€. 곡격μ μ¬λ¬ λ¨κ³λ‘ μ§νλ©λλ€:
- ν΄λΌμ΄μΈνΈλ μλͺ»λ
Sec-WebSocket-Versionνλ‘ν μ½ λ²μ μ ν€λμ ν¬ν¨νμ¬ λ¦¬λ²μ€ νλ‘μλ‘ μ κ·Έλ μ΄λ μμ²μ 보λ λλ€. νλ‘μλSec-WebSocket-Versionν€λλ₯Ό κ²μ¦νμ§ λͺ»νκ³ μ κ·Έλ μ΄λ μμ²μ΄ μ ν¨νλ€κ³ λ―Ώκ³ λ°±μλλ‘ μ λ¬ν©λλ€. - λ°±μλλ
Sec-WebSocket-Versionν€λμ μλͺ»λ νλ‘ν μ½ λ²μ μ λνλ΄λ μν μ½λ426μΌλ‘ μλ΅ν©λλ€. 리λ²μ€ νλ‘μλ λ°±μλμ μλ΅ μνλ₯Ό κ°κ³Όνκ³ μΉμμΌ ν΅μ μ€λΉκ° μλ£λμλ€κ³ κ°μ νλ©° ν΄λΌμ΄μΈνΈμκ² μλ΅μ μ λ¬ν©λλ€. - κ²°κ³Όμ μΌλ‘ 리λ²μ€ νλ‘μλ ν΄λΌμ΄μΈνΈμ λ°±μλ κ°μ μΉμμΌ μ°κ²°μ΄ μ€μ λμλ€κ³ μλͺ» λ―Ώκ² λλ©°, μ€μ λ‘λ λ°±μλκ° μ κ·Έλ μ΄λ μμ²μ κ±°λΆνμ΅λλ€. κ·ΈλΌμλ λΆκ΅¬νκ³ νλ‘μλ ν΄λΌμ΄μΈνΈμ λ°±μλ κ°μ μ΄λ¦° TCP λλ TLS μ°κ²°μ μ μ§νμ¬ ν΄λΌμ΄μΈνΈκ° μ΄ μ°κ²°μ ν΅ν΄ λΉκ³΅μ REST APIμ 무μ νμΌλ‘ μ κ·Όν μ μκ² ν©λλ€.
μν₯μ λ°λ 리λ²μ€ νλ‘μμλ λ¬Έμ λ₯Ό ν΄κ²°νμ§ μκΈ°λ‘ κ²°μ ν Varnishμ μ κ·Έλ μ΄λ λ©μ»€λμ¦μ΄ λ³κ²½λ Envoy νλ‘μ λ²μ 1.8.0 μ΄νκ° ν¬ν¨λ©λλ€. λ€λ₯Έ νλ‘μλ μ·¨μ½ν μ μμ΅λλ€.

μλλ¦¬μ€ 2
μ΄ μλ리μ€λ κ³΅κ° μΉμμΌ APIμ κ±΄κ° κ²μ¬λ₯Ό μν κ³΅κ° REST API, κ·Έλ¦¬κ³ μ κ·Όν μ μλ λ΄λΆ REST APIλ₯Ό κ°μ§ λ°±μλλ₯Ό ν¬ν¨ν©λλ€. 곡격μ λ 볡μ‘νλ©° λ€μ λ¨κ³λ‘ μ§νλ©λλ€:
- ν΄λΌμ΄μΈνΈλ κ±΄κ° κ²μ¬ APIλ₯Ό νΈλ¦¬κ±°νκΈ° μν΄ POST μμ²μ 보λ΄κ³ μΆκ° HTTP ν€λ
Upgrade: websocketμ ν¬ν¨ν©λλ€. NGINXλ 리λ²μ€ νλ‘μλ‘μ μ΄λ₯ΌUpgradeν€λλ§ κΈ°λ°μΌλ‘ νμ€ μ κ·Έλ μ΄λ μμ²μΌλ‘ ν΄μνκ³ μμ²μ λ€λ₯Έ μΈ‘λ©΄μ 무μνλ©° λ°±μλλ‘ μ λ¬ν©λλ€. - λ°±μλλ κ±΄κ° κ²μ¬ APIλ₯Ό μ€ννκ³ κ³΅κ²©μκ° μ μ΄νλ μΈλΆ 리μμ€μ μ κ·Όνμ¬ μν μ½λ
101μ΄ ν¬ν¨λ HTTP μλ΅μ λ°νν©λλ€. μ΄ μλ΅μ λ°±μλμ μν΄ μμ λκ³ NGINXλ‘ μ λ¬λλ©°, νλ‘μλ μν μ½λλ§ κ²μ¦νμ¬ μΉμμΌ μ°κ²°μ΄ μ€μ λμλ€κ³ μλͺ» μκ°νκ² λ©λλ€.

κ²½κ³ : μ΄ κΈ°μ μ 볡μ‘μ±μ μν μ½λ 101μ λ°νν μ μλ μλν¬μΈνΈμ μνΈμμ©ν μ μλ λ₯λ ₯μ μꡬν¨μ λ°λΌ μ¦κ°ν©λλ€.
κ²°κ΅ NGINXλ ν΄λΌμ΄μΈνΈμ λ°±μλ κ°μ μΉμμΌ μ°κ²°μ΄ μ‘΄μ¬νλ€κ³ λ―Ώκ² λ©λλ€. μ€μ λ‘λ κ·Έλ¬ν μ°κ²°μ΄ μ‘΄μ¬νμ§ μμΌλ©°, κ±΄κ° κ²μ¬ REST APIκ° λͺ©νμμ΅λλ€. κ·ΈλΌμλ λΆκ΅¬νκ³ λ¦¬λ²μ€ νλ‘μλ μ°κ²°μ μ΄μ΄ λμ΄ ν΄λΌμ΄μΈνΈκ° μ΄λ₯Ό ν΅ν΄ λΉκ³΅μ REST APIμ μ κ·Όν μ μκ² ν©λλ€.

λλΆλΆμ 리λ²μ€ νλ‘μλ μ΄ μλ리μ€μ μ·¨μ½νμ§λ§, μ μ©μ μΌλ°μ μΌλ‘ μ μν λ¬Έμ λ‘ κ°μ£Όλλ μΈλΆ SSRF μ·¨μ½μ μ μ‘΄μ¬μ λ¬λ € μμ΅λλ€.
μ€μ΅
λ μλ리μ€λ₯Ό ν μ€νΈνκΈ° μν μ€μ΅μ νμΈνμμμ€ https://github.com/0ang3el/websocket-smuggle.git
μ°Έκ³ μλ£
- https://blog.assetnote.io/2021/03/18/h2c-smuggling/
- https://bishopfox.com/blog/h2c-smuggling-request
- https://github.com/0ang3el/websocket-smuggle.git
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μ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


