πHTTP request smuggling
HTTP request smuggling = HRS
What is HTTP request smuggling?
Theo Δα»nh nghΔ©a α» portswigger thΓ¬ HTTP request smuggling lΓ kα»Ή thuαΊt can thiα»p vΓ o cΓ‘ch trang web xα» lΓ½ trΓ¬nh tα»± cα»§a HTTP request mΓ Δược nhαΊn tα»« mα»t hoαΊ·c nhiα»u ngΖ°α»i dΓΉng. NΓ³i dα»
hiα»u hΖ‘n lΓ HTTP request smuggling (HRS) lΓ mα»t kα»Ή thuαΊt tαΊ₯n cΓ΄ng nhαΊ±m vΓ o cΓ‘c HTTP server (web server, proxy server). BαΊ₯t cα»© khi nΓ o mα»t HTTP request cα»§a client Δược phΓ’n tΓch bα»i nhiα»u hΖ‘n mα»t hα» thα»ng thΓ¬ Δα»u cΓ³ khαΊ£ nΔng bα» HRS.
Lα» hα»ng nΓ y thΓ¬ thΖ°α»ng rαΊ₯t nguy hiα»m, nΓ³ cho phΓ©p kαΊ» tαΊ₯n cΓ΄ng cΓ³ thα» bypass secuirty controls, ΔαΊ‘t Δược nhΖ° truy cαΊp trΓ‘i phΓ©p tα»i cΓ‘c data nhαΊ‘y cαΊ£m hoαΊ·c can thiα»p trα»±c tiαΊΏp tα»i α»©ng dα»₯ng ngΖ°α»i dΓΉng khΓ‘c.
What happens in an HTTP request smuggling attack?
NgΓ y nay cΓ‘c trang web thΖ°α»ng dΓΉng cΓ‘c chuα»i mΓ‘y chα»§ HTTP giα»―a ngΖ°α»i dΓΉng vΓ α»©ng dα»₯ng logic cuα»i cΓΉng. NgΖ°α»i dΓΉng gα»i request tα»i mα»t mΓ‘y chα»§ front-end (ΔΓ΄i khi cΓ³ thα» gα»i lΓ load balancer hoαΊ·c reverse proxy) vΓ server nΓ y sαΊ½ gα»i request tα»i mα»t hoαΊ·c nhiα»u sever back-end.

NhΖ° trΓͺn hΓ¬nh αΊ£nh thΓ¬ kαΊ» tαΊ₯n cΓ΄ng sαΊ½ gα»i mα»t request phα»₯ chΓ¨n thΓͺm vΓ o request chΓnh, khai thΓ‘c tα»« viα»c xα» lΓ½ bαΊ₯t Δα»ng bα» cα»§a server thΓ¬ dαΊ«n tα»i lα» hα»ng HRS nhΖ° trΓͺn.
How do HTTP request smuggling vulnerabilities arise?
HαΊ§u hαΊΏt lα» hα»ng HRS xαΊ£y ra do HTTP specification cung cαΊ₯p hai cΓ‘ch Δα» chα» Δα»nh nΖ‘i mα»t request kαΊΏt thΓΊc, nΓ³ rΓ΅ ra lΓ trong gΓ³i tin HTTP cΓ³ hai header: Content-Length vΓ Transfer-Encoding
Content-Length:
Content-Length lΓ mα»t header HTTP Δược sα» dα»₯ng Δα» chα» Δα»nh kΓch thΖ°α»c (ΔΖ‘n vα» byte) cα»§a nα»i dung yΓͺu cαΊ§u hoαΊ·c phαΊ£n hα»i.
NΓ³ Δược sα» dα»₯ng trong cΓ‘c yΓͺu cαΊ§u HTTP cΓ³ phΖ°Ζ‘ng thα»©c POST, PUT, PATCH Δα» xΓ‘c Δα»nh kΓch thΖ°α»c cα»§a dα»― liα»u gα»i Δi.
VΓ dα»₯: Content-Length: 11. Header nΓ y cho biαΊΏt rαΊ±ng nα»i dung yΓͺu cαΊ§u 11 byte.
Transfer-Encoding:
Transfer-Encoding lΓ mα»t header HTTP dΓΉng Δα» chα» Δα»nh cΓ‘ch mΓ£ hΓ³a vΓ truyα»n tαΊ£i nα»i dung yΓͺu cαΊ§u hoαΊ·c phαΊ£n hα»i qua mαΊ‘ng.
NΓ³ Δược sα» dα»₯ng Δα» hα» trợ truyα»n tαΊ£i nα»i dung dΖ°α»i nhiα»u dαΊ‘ng mΓ£ hΓ³a khΓ‘c nhau nhΖ° chunked, gzip, deflate, vv.
VΓ dα»₯: Transfer-Encoding: chunked. Header nΓ y cho biαΊΏt rαΊ±ng nα»i dung yΓͺu cαΊ§u hoαΊ·c phαΊ£n hα»i Δược truyα»n tαΊ£i dΖ°α»i dαΊ‘ng cΓ‘c phαΊ§n (chunks) vα»i Δα» dΓ i Δược chα» Δα»nh cho mα»i phαΊ§n.
How to perform an HRS attack
TαΊ₯n cΓ΄ng HTTP Request Smuggling nΓ³i chung Δα»u xoay quanh ΔαΊΏn hai header lΓ Content-Length vΓ Transfer-Encoding trΓͺn cΓΉng mα»t gΓ³i tin HTTP Δα» mΓ‘y chα»§ front-end vΓ back-end xα» lΓ½ yΓͺu cαΊ§u theo cΓ‘ch khΓ‘c nhau. Sau ΔΓ’y lΓ mα»t sα» βcomboβ thΖ°α»ng gαΊ·p cα»§a HTTP Request Smuggling:
CL.TE: mΓ‘y chα»§ front-end sα» dα»₯ng header Content-Length vΓ mΓ‘y chα»§ back-end sα» dα»₯ng header Transfer-Encoding.
TE.CL: mΓ‘y chα»§ front-end sα» dα»₯ng header Transfer-Encoding vΓ mΓ‘y chα»§ back-end sα» dα»₯ng header Content-Length.
TE.TE: mΓ‘y chα»§ front-end vΓ back-end Δα»u hα» trợ header Transfer-Encoding, nhΖ°ng mα»t trong hai loαΊ‘i mΓ‘y chα»§ khΓ΄ng xα» Γ½ Δược header nΓ y, do gΓ³i tin HTTP ΔΓ£ bα» lΓ m xΓ‘o trα»n header theo mα»t cΓ‘ch nΓ o ΔΓ³.
α» bΓ i nΓ y chΓΊng ta tαΊ₯n cΓ΄ng dαΊ‘ng CL.TE thΓ¬ payload sαΊ½ kiα»u nhΖ° nΓ y:
ΔαΊ§u tiΓͺn chΓΊng ta chuyα»n HTTP/2 -> HTTP/1.1

ChΓΊng ta sαΊ½ sα»a Δα»i Δα» dΓ i cα»§a Content vα»i giΓ‘ trα» lΓ 6 bαΊ―t ΔαΊ§u tα»« giΓ‘ trα» 0 tα»i G.


α» ΔΓ’y dα»
hiα»u rαΊ±ng khi gα»i request ΔαΊ§u tiΓͺn thΓ¬ server sαΊ½ hiα»u rαΊ±ng body gα»m 6 byte vΓ xα» lΓ½ nhΖ°ng khi xα» lΓ½ tα»i 0 thΓ¬ ΔΓ’y lΓ : mα»t chunk rα»ng, Δược sα» dα»₯ng Δα» ΔΓ‘nh dαΊ₯u kαΊΏt thΓΊc cα»§a body request.
Khi ΔΓ³ kΓ½ tα»± G sαΊ½ Δược ghΓ©p vα»i request tiαΊΏp theo lΓ G->GPOST. ChΓΊng ta sαΊ½ sang lab tiαΊΏp theo Δα» lΓ m mα»t dαΊ‘ng khΓ‘c!
α» lab thΓ¬ phΓa server front-end sα» dα»₯ng Transfer-Encoding header vΓ server back-end sα» dα»₯ng Content-Lenght header. Khi ΔΓ³ chΓΊng ta cΓ³ thα» ΔoαΊ‘n HTTP Request Smuggling nhΖ° sau:
Chunked Transfer Encoding lΓ mα»t cΖ‘ chαΊΏ Δược sα» dα»₯ng trong giao thα»©c HTTP/1.1 Δα» gα»i dα»― liα»u tα»« mΓ‘y chα»§ ΔαΊΏn client. CΖ‘ chαΊΏ nΓ y cho phΓ©p mΓ‘y chα»§ gα»i dα»― liα»u trong nhiα»u phαΊ§n hoαΊ·c "chunks", mα»i chunk Δược gα»i riΓͺng lαΊ». Δiα»u nΓ y cΓ³ thα» hα»―u Γch trong cΓ‘c tΓ¬nh huα»ng mΓ kΓch thΖ°α»c cα»§a dα»― liα»u khΓ΄ng Δược biαΊΏt trΖ°α»c hoαΊ·c dα»― liα»u cαΊ§n Δược tαΊ‘o vΓ gα»i Δα»ng thα»i.
Mα»i chunk bao gα»m kΓch thΖ°α»c cα»§a chunk (tΓnh bαΊ±ng sα» byte), sau ΔΓ³ lΓ dα»― liα»u thα»±c sα»±, vΓ cuα»i cΓΉng lΓ mα»t dΓ²ng mα»i. PhiΓͺn truyα»n dα»― liα»u kαΊΏt thΓΊc bαΊ±ng mα»t chunk cΓ³ kΓch thΖ°α»c bαΊ±ng 0.
MΓ£ hΓ³a chunked Δược chα» Δα»nh trong header HTTP bαΊ±ng cΓ‘ch sα» dα»₯ng trΖ°α»ng Transfer-Encoding:
VΓ dα»₯:
GiαΊ£ sα» mΓ‘y chα»§ muα»n gα»i chuα»i sau: "Hello, World!"
TrΖ°α»c tiΓͺn, chuα»i nΓ y Δược chia thΓ nh cΓ‘c chunks. Trong vΓ dα»₯ nΓ y, chΓΊng tΓ΄i sαΊ½ chia nΓ³ thΓ nh 2 chunks: "Hello, " vΓ "World!". Mα»i chunk sau ΔΓ³ Δược gα»i Δi kΓ¨m vα»i kΓch thΖ°α»c cα»§a nΓ³ (tΓnh bαΊ±ng sα» byte hexa).
GΓ³i tin HTTP cΓ³ thα» trΓ΄ng nhΖ° sau:
α» ΔΓ’y, 7 vΓ 6 lΓ kΓch thΖ°α»c cα»§a hai chunks (tΓnh bαΊ±ng sα» byte), vΓ 0 kαΊΏt thΓΊc phiΓͺn truyα»n dα»― liα»u. \r\n lΓ kΓ½ tα»± xuα»ng dΓ²ng CR-LF (Carriage Return-Line Feed).
LΖ°u Γ½: /r/n α» cuα»i cΓΉng ΔΓ‘nh dαΊ₯u kαΊΏt thΓΊc request.
SΖ‘ qua nhΖ° thαΊΏ rα»i chΓΊng ta sαΊ½ vΓ o bΓ i lab luΓ΄n cΓ³ description nhΖ° sau:




α» ΔΓ’y server front-end vΓ back-end Δα»u hα» trợ Transfer-Encoding header, nhΖ°ng mα»t trong nhα»―ng servers cΓ³ thα» Δược yΓͺu cαΊ§u khΓ΄ng xα» lΓ½ nΓ³ bαΊ±ng cΓ‘ch lΓ m xΓ‘o trα»n header nΓ y
VΓ dα»₯, mα»t mΓ‘y chα»§ web cΓ³ thα» thα»±c hiα»n "obfuscating the TE header" bαΊ±ng cΓ‘ch thay Δα»i TE header thΓ nh mα»t giΓ‘ trα» ngαΊ«u nhiΓͺn hoαΊ·c mΓ£ hΓ³a TE header bαΊ±ng cΓ‘ch sα» dα»₯ng mα»t thuαΊt toΓ‘n mΓ£ hΓ³a ΔαΊ·c biα»t. Δiα»u nΓ y cΓ³ thα» lΓ m cho TE header trα» nΓͺn khΓ³ hiα»u hoαΊ·c che giαΊ₯u thΓ΄ng tin vα» cΓ‘c phΖ°Ζ‘ng phΓ‘p mΓ£ hΓ³a thα»±c sα»± Δược hα» trợ bα»i mΓ‘y chα»§ web.
ChΓΊng ta sαΊ½ Δi vΓ o bΓ i lab nΓ y luΓ΄n, miΓͺu tαΊ£ cα»§a lab nΓ y nhΖ° sau:


ChΓΊng ta sαΊ½ xem xΓ©t rαΊ±ng Transfer-Encoding vαΊ«n nhαΊn nhΖ°ng sau 2-3 lαΊ§n request thΓ¬ header nΓ y khΓ΄ng Δược phΓa back-end xα» lΓ½. XΓΊc nΓ y chΓΊng ta sαΊ½ thΓͺm mα»t header tΖ°Ζ‘ng tα»± nhΖ° nΓ y vα»i mα»t giΓ‘ trα» bαΊ₯t kα»³.

ChΓΊng ta sαΊ½ giαΊ£i thΓch qua tαΊ‘i sao phαΊ£i double Transfer-Encoding header. ΔαΊ§u tiΓͺn nαΊΏu thay Δα»i vα» trΓ giΓ‘ trα» cα»§a header nΓ y thΓ¬ nΓ³ sαΊ½ trαΊ£ vα» lα»i 500. CΓ³ nghΔ©a lΓ phΓa front-end hoαΊ·c phΓa back-end khΓ΄ng xα» lΓ½ Δược vΓ quan trα»ng khΓ΄ng sα» dα»₯ng Δược Content-Length

Khi ΔΓ³ cαΊ§n sαΊ―p xαΊΏp lαΊ‘i giΓ‘ trα» vΓ Δα» backend khi xα» lΓ½ TE sαΊ½ khΓ΄ng xΓ‘c Δα»nh Δược vΓ chuyα»n qua dΓΉng CL chung nhΖ° hΓ¬nh trΓͺn.

Khi ΔΓ³ mα»t request khΓ‘c tα»« ngΖ°α»i dΓΉng khΓ‘c sαΊ½ Δược gΓ‘n vα»i kΓ½ tα»± hoαΊ·c request tiαΊΏp theo cα»§a kαΊ» tαΊ₯n cΓ΄ng.
VαΊy thΓ¬ chΓΊng ta sαΊ½ dΓΉng kα»Ή thuαΊt Lab2 Δα» solve lab nΓ y.

Finding HTTP request smuggling valnerabilities.
Sau 3 lab chα»©ng ta sαΊ½ xem xΓ©t lαΊ‘i cΓ‘ch Δα» tΓ¬m lα» hα»ng nΓ y:
TΓ¬m lα» hα»ng dαΊ‘ng CL.TE sα» dα»₯ng kα»Ή thuαΊt timming.
NαΊΏu mα»t α»©ng dα»₯ng chα»©a lα» hα»ng cΓ³ variant CL.TE, thΓ¬ chΓΊng ta gα»i request nhΖ° sau:
Khi front-end server sα» dα»₯ng Content-Length header, nΓ³ sαΊ½ chα» chuyα»n tiαΊΏp mα»t phαΊ§n cα»§a request nΓ y mΓ bα» qua X. Back-end sαΊ½ sα» dα»₯ng Transfer-Encoding header.

NhΓ¬n vΓ o hΓ¬nh αΊ£nh chΓΊng ta sαΊ½ rΓ΅ khi gα»§i giΓ‘ trα» thΓ¬ α» FE dΓΉng CL vα»i length lΓ 6 khi ΔΓ³ nΓ³ sαΊ½ drop X Δi vΓ gα»i qua backend vΓ khi BE nhαΊn thΓ¬ nΓ³ giα»― time Δα» nhαΊn X cΓ²n thiαΊΏu vΓ Δợi lΓΊc tα»i timeout trαΊ£ vα».
TΓ¬m lα» hα»ng dαΊ‘ng TE.CL
NαΊΏu lα» hα»ng HRS cΓ³ variant TE.CL thΓ¬ cΓ³ thα» gα»i request theo nhΖ° nΓ y:
α» dαΊ‘ng nΓ y thΓ¬ front-end sα» dα»₯ng Content-Length cΓ²n back-end sαΊ½ sα» dα»₯ng Content-Length

Khi FE cΓ³ TE xα» lΓ½ chunk ΔαΊ§u size bαΊ±ng 0 sau ΔΓ³ lΓ mα»t dΓ²ng trα»ng, cΓ³ nghΔ©a nΓ³ hiα»u kαΊΏt thΓΊc vΓ bα» qua X gα»i qua BE vΓ α» BE dΓΉng CL vα»i length chung lΓ 6 mΓ dα»― liα»u tα»i BE chα» cΓ³ 5 byte vΓ BE sαΊ½ Δợi byte thα»© 6, sau mα»t thα»i gian nΓ³ quyαΊΏt Δα»nh timeout.
MΓ¬nh ΔΓ£ giαΊ£i thΓch qua cΓ‘c thα»©c vΓ cΖ‘ chαΊΏ cα»§a hai variant CL.TE vΓ TE.CL, tiαΊΏp theo chΓΊng ta sαΊ½ tα»i vα»i lab tiαΊΏp theo.

Vα» lab nΓ y thΓ¬ chΓΊng xΓ‘c Δα»nh rαΊ±ng nΓ³ lΓ variant CL.TE thΓ¬ chΓΊng ta sαΊ½ gα»i payload nhΖ° sau:
Vα»i bΓ i lab nΓ y dΓΉng burp suite bαΊ―t req sαΊ½ nhΖ° nΓ y:



Vα»i lab nΓ y sα» dα»₯ng TE.CL khi ΔΓ³ payload sαΊ½ nhΖ° sau:


ΔΓ΄i khi chΓΊng ta cαΊ§n nhα»―ng thα»© to lα»n hΖ‘n nhΖ° lαΊ₯y thΓ΄ng tin tα»« mα»t endpoint nΓ o ΔΓ³ hoαΊ·c lαΊ₯y thΓ΄ng tin nhαΊ‘y cαΊ£m nhΖ°ng Δα» lαΊ₯y Δược thΓ¬ chΓΊng ta cαΊ§n phαΊ£i bypass Δược access controls, khi ΔΓ³ chΓΊng ta cΓ³ thα» sα» dα»₯ng lα» hα»ng nΓ y Δα» chuyα»n tiαΊΏp cΓ‘c router chΓΊng ta muα»n. Oke bαΊ―t ΔαΊ§u vα»i lab nΓ y thΓ΄i.

Δα» solve Δược lab nΓ y chΓΊng ta cαΊ§n truy cαΊp vΓ o endpoint admin Δα» xΓ³a Δi tΓ i khoαΊ£n carlos nhΖ°ng FE ΔΓ£ block truy cαΊp cα»§a chΓΊng ta nΓͺn cαΊ§n bypass nΓ³.

RΓ΅ rΓ ng ΔΓ£ bα» block, dα»±a vΓ o dαΊ‘ng CL.TE vΓ xem giao diα»n chΓΊng ta sαΊ½ build Δược body gΓ³i tin nhΖ° sau:

CΓ³ vαΊ₯n Δα» α» ΔΓ’y lΓ khΓ΄ng Δược duplicate header, tαΊ‘i sao lαΊ‘i xαΊ£y ra vΓ¬ khi ΔoαΊ‘n GET Δược ghΓ©p vα»i header tiαΊΏp theo cα»§a req nΓͺn sαΊ½ kiα»u nhΖ° nΓ y:

RΓ΅ rΓ ng dΓ²ng 12 vΓ 13 ΔΓ£ lαΊ·p lαΊ‘i nΓͺn server trαΊ£ vα» status 400, vαΊy lΓΊc nΓ y cΓ³ cΓ‘ch nΓ o khΓ΄ng?
CΓ’u trαΊ£ lα»i lΓ cΓ³, chΓΊng ta cΓ³ thα» tΓ‘ch nΓ³ ra Δα» thΓ nh phαΊ§n header cα»§a request sau thuα»c body nhΖ° sau:
Chα» cαΊ§n thΓͺm mα»t giΓ‘ trα» x vΓ o vΓ phαΊ§n Content-Length mα»i ngΖ°α»i tα»± fix nhΓ©. Khi ΔΓ³ resp sαΊ½ trαΊ£ vα» cho chΓΊng ta nhΖ° nΓ y:

LΓΊc nΓ y chΓΊng ta cΓ³ thα» solve Δược dα»±a vΓ o source tα»« resp:

α» lab nΓ y theo dαΊ‘ng TE.CL, chΓΊng ta dα»±a vΓ o lab sα» 6 sαΊ½ build lαΊ‘i theo dαΊ‘ng TE.CL nhΖ° sau:



ChΓΊng ta thαΊ₯y rαΊ±ng nhΖ° tiΓͺu Δα» cα»§a lab thΓ¬ cαΊ§n reveal request cα»§a server. NhΖ° lab nΓ y chΓΊng ta trΖ°α»c tiΓͺn cαΊ§n xΓ‘c Δα»nh ΔΓ’y lΓ dαΊ‘ng gΓ¬? Sα» dα»₯ng kα»Ή thuαΊt timming Δα» check vΓ nhαΊn ra nΓ³ dαΊ‘ng CL.TE

TiαΊΏp theo xΓ‘c Δα»nh trang web cΓ³ chαΊ·n endpoint /admin gα»m cαΊ§n cΓ³ Δiα»u kiα»n gΓ¬?

Δα» truy cαΊp Δược path nΓ y cαΊ§n request tα»« IP 127.0.0.1, vαΊy chΓΊng ta sαΊ½ thΓͺm mα»t header X-Forwarded-For

CΓ³ vαΊ» header trΓͺn khΓ΄ng cΓ³ trong config cα»§a server nΓͺn mα»i khΓ΄ng thα» fake Δược ip, chΓΊng ta chΓΊ Γ½ rαΊ±ng trang web nΓ y cΓ³ mα»t nΖ‘i cΓ³ thα» reflect Δược data lΓ endpoint /search.

ChΓΊng ta sαΊ½ tαΊ₯n cΓ΄ng vΓ o path nΓ y Δα» leak Δược header cαΊ§n thiαΊΏt ra, thα»±c hiα»n nhΖ° sau:

ChΓΊng ta thαΊ₯y rαΊ±ng khi request tiαΊΏp theo thΓ¬ header kia Δược leak ra vΓ chΓΊng ta sαΊ½ tαΊ₯n cΓ΄ng nhΖ° lab 6, chα» thay header nhΖ° trΓͺn Δα» bypass.

NgoΓ i ra chΓΊng ta cΕ©ng cΓ³ thα» sα» dα»₯ng mα»t vΓ i header khΓ‘c Δα» bypass access control nhΖ°:
VΓ¬ cΓ‘c tiΓͺu Δα» nΓ y Δược cho lΓ hoΓ n toΓ n αΊ©n Δα»i vα»i ngΖ°α»i dΓΉng nΓͺn chΓΊng thΖ°α»ng Δược cΓ‘c mΓ‘y chα»§ phα»₯ trợ hoΓ n toΓ n tin cαΊy. GiαΊ£ sα» bαΊ‘n cΓ³ thα» gα»i kαΊΏt hợp ΔΓΊng tiΓͺu Δα» vΓ giΓ‘ trα», Δiα»u nΓ y cΓ³ thα» cho phΓ©p bαΊ‘n bα» qua kiα»m soΓ‘t truy cαΊp.
X-SSL-CLIENT-CN: administrator
NhΖ° tiΓͺu Δα» cα»§a lab chΓΊng ta biαΊΏt rαΊ±ng α» lab nΓ y chΓΊng ta cαΊ§n lαΊ₯y thΓ΄ng tin cα»§a ngΖ°α»i khΓ‘c tα»« request vΓ dα»₯ nhΖ° cookie, tooken, ......
Sau mα»t lΓΊc xem xΓ©t thΓ¬ cΓ³ vαΊ» nhΖ° lab nΓ y giα»ng lab 7 cΓ³ mα»t nΖ‘i Δα» leak Δược data lΓ α» comment.

XΓ‘c Δα»nh Δược bΓ i nΓ y dαΊ‘ng CL.TE, khi nΓ y chΓΊng ta cαΊ§n exploit α» path comment Δα» cΓ³ thα» leak Δược data cα»§a request ngΖ°α»i dΓΉng khΓ‘c.
α» ΔΓ’y mΓ¬nh cΓ³ ΔoαΊ‘n gΓ³i tin nhΖ° α» dΖ°α»i chα» cΓ³ Δiα»u comment Δα» cuα»i vΓ¬ nΓ³ sαΊ½ nα»i vα»i gΓ³i tin cα»§a request tiαΊΏp theo, ΔαΊ·c biα»t phαΊ§n CL:920 Δα» Δα» dΓ i resp cΓ³ thα» trαΊ£ vα» Δα»§ session.
Sau khi gα»i Δợi mα»t lΓΊc thΓ¬ request victim sαΊ½ tα»i nhΖ° hΓ¬nh dΖ°α»i.

ΔαΊ§u tiΓͺn chΓΊng ta cαΊ§n xem lab nΓ y thuα»c dαΊ‘ng nΓ o ΔΓ£ vΓ o xem data Δược reflect α» ΔΓ’u.


Oke chΓΊng ta xΓ‘c Δα»nh rαΊ±ng hai dα»―a liα»u α» ΔΓ’u cΓ³ thα» thα»±c hiα»n khai thΓ‘c:
α» form cΓ³ mα»t trΖ°α»ng αΊ©n lΓ user-agent chΓΊng ta cΓ³ thα» thay Δα»i Δược
NΓ³ thuα»c dαΊ‘ng CL.TE

ΔΓ’y lΓ payload cuα»i cΓΉng bypass qua thαΊ» input vΓ nhΓΊng JS vΓ o code, tα»« ΔΓ’y chΓΊng ta build lαΊ‘i ΔoαΊ‘n HTTP chα»©a User-Agent. (CαΊ§n tΓ‘ch phαΊ§n header tiαΊΏp theo lΓ body bαΊ±ng cΓ‘ch thΓͺm mα»t giΓ‘ trα» x=1)


Using HTTP request smuggling to turn an on-site redirect into an open redirect
Nhiα»u α»©ng dα»₯ng thα»₯c hiα»n chuyα»n hΖ°α»ng tαΊ‘i chα» tα»« mα»t url tα»i mα»t url khΓ‘c vΓ cα»₯ thα» lΓ α» header Host chuyα»n hΖ°α»ng tα»i URL khΓ‘c.
VΓ dα»₯:
NhΖ° ΔoαΊ‘n gΓ³i tin HTTP α» trΓͺn Δược xem nhΖ° vΓ΄ hαΊ‘i nhΖ°ng Δiα»u gΓ¬ sαΊ½ xαΊ£y ra kαΊ» tαΊ₯n cΓ΄ng khai thΓ‘c lα» hα»ng HRS Δα» lΓ m request tiαΊΏp theo chuyα»n hΖ°α»ng tα»i domain cα»§a kαΊ» tαΊ₯n cΓ΄ng.
VΓ dα»₯ sau dΓΉng dαΊ‘ng CL.TE
NαΊΏu cuα»c tαΊ₯n cΓ΄ng nΓ y thΓ nh cΓ΄ng thΓ¬ request tiαΊΏp theo sαΊ½ nhΖ° sau:
Lab11: Exploiting HTTP request smuggling to perform web cache poisoning (Expert)
Lab12: Exploiting HTTP request smuggling to perform web cache deception (Expert)
Lab13: H2.CL request smuggling
TrΖ°α»c hαΊΏt cαΊ§n hiα»u sΖ‘ vα» HTTP/2 thΓ¬ cΓ‘c request tα»« http/2 khΓ΄ng cαΊ§n Δα»nh nghΔ©a rΓ΅ rΓ ng CL, cΓ²n Δα»i vα»i server cΓ³ hαΊ‘ cαΊ₯p tα»« 2 xuα»ng 1 thΓ¬ nΓ³ sαΊ½ lαΊ₯y CL Δα» Δo Δα» dΓ i nα»i dung cαΊ§n gα»i.
Khi α» Front-end (HTTP/2)
Back-end(HTTP/1)
SΖ‘ qua thαΊΏ thΓ΄i, bΓ’y giα» chΓΊng ta sαΊ½ Δi vΓ o lab nΓ y, nhΖ° tiΓͺu Δα» thΓ¬ lab nΓ y sα» dα»₯ng http/2 vΓ phΓa FE dΓΉng CL.


NhΖ° αΊ£nh thα»© 2 chΓΊng ta ΔΓ£ biαΊΏt rαΊ±ng nΓ³ dαΊ‘ng CL, bΓ’y giα» chΓΊng ta tΓ¬m Δược mα»t path resources cΓ³ chα»©a cΓ‘c image vΓ file js. α» ΔΓ’y mΓ¬nh test qua path /resources Δα» xem nhΖ° nΓ o.

PhαΊ§n Location header cα»§a res bα» thay Δα»i, nαΊΏu chΓΊng ta dΓΉng lα» hα»ng HRS Δα» chuyα»n hΖ°α»ng tα»i mα»t domain khΓ‘c thΓ¬ sao nhα».

ChΓΊng ta thαΊ₯y rαΊ±ng tα»i request thα»© 2 Location ΔΓ£ bα» Δα»i, bΓ’y giα» chΓΊng ta sαΊ½ tαΊ‘o mα»t server chα»©a mΓ£ Δα»c Δα» solve lab nΓ y.

Sau ΔΓ³ thay host α» http request smuggling thΓ nh server chΓΊng ta vα»«a tαΊ‘o vΓ gα»i nΓ³ lαΊ‘i.

α» lab nΓ y chΓΊng ta sαΊ½ khai thΓ‘c HRS thΓ΄ng qua CRLF injection. NαΊΏu cΓ‘c bαΊ‘n chΖ°a Δα»c CRLF injection thΓ¬ cΓ³ thα» Δα»c α» ΔΓ’y.
Δα»i vα»i lab nΓ y sαΊ½ cΓ³ hαΊ‘ cαΊ₯p xuα»ng trΖ°α»c khi gα»i tα»i back-end.

Xem qua thΓ¬ bΓ i nΓ y khΓ΄ng phαΊ£i dαΊ‘ng H2.CL hay H2.TE, nhΖ° tiΓͺu Δα» cΓ³ sα» dα»₯ng CRLF thΓ¬ Δα»i vα»i HTTP/2 chΓΊng ta sαΊ½ thΓͺm mα»t giΓ‘ trα» α» phαΊ§n request header


NhΖ° α» lab 13 ΔΓ£ cho thαΊ₯y rαΊ±ng α» Front-end thΓ¬ http/2 cΓ³ dαΊ‘ng khΓ‘c vΓ khi chΓΊng ta thΓͺm mα»t trΖ°α»ng header nΓ y dΓΉng CRLF vΓ o Δα» khi hαΊ‘ cαΊ₯p thΓ¬ nΓ³ hiα»u cΓ³ thΓͺm mα»t trΖ°α»ng TE: chunked vΓ gα»i tα»i back-end.
YΓͺu cαΊ§u cα»§a lab lΓ cαΊ§n lαΊ₯y giΓ‘ trα» session cα»§a victim, lΓΊc nΓ y qua mα»t lαΊ§n xem xΓ©t thΓ¬ cΓ³ chα» search thΓ¬ reflect data Δược.


ChΓΊng ta sαΊ½ lợi dΓΉng parameter search nΓ y Δα» reflect gΓ³i tin HTTP cα»§a victim ra, nhΖ° trΓͺn sau khi thΓͺm mα»t header nhΖ° sau:
name: foo
value: bar\r\nTransfer-Encoding: chunked
LΖ°u Γ½: Chα» \r\n cΓ³ thα» viαΊΏt α» ngoΓ i rα»i ΔΖ°a vΓ o hoαΊ·c khi viαΊΏt liα»n chα» cαΊ§n dΓΉng phΓm tαΊ―t Shift+Enter
BΓ’y giα» thΓͺm phαΊ§n body vΓ¬ sau khi hαΊ‘ cαΊ₯p gα»i tα»i Back-end thΓ¬ nΓ³ dΓΉng TE. LΓΊc nΓ y ΔoαΊ‘n body sαΊ½ nhΖ° sau (CαΊ§n cΓ³ cookie vΓ¬ nΓ³ phαΊ£i leak α» tΓ i khoαΊ£n chΓΊng ta)
Sau khi gα»i Δợi mα»t lΓΊc thΓ¬ victim sαΊ½ gα»i tα»i, nhΖ° Δα» bΓ i thΓ¬ victim sαΊ½ 15s gα»i mα»t request.


NhΖ° tiΓͺu Δα» thΓ¬ lab nΓ y cΓ³ thα» dΓΉng CRLF Δα» gαΊ―n mα»t request khΓ‘c vΓ o giΓ‘ trα» cα»§a header nΓ o ΔΓ³ trong HTTP/2 nαΊΏu nhΖ° α» Back-End khΓ΄ng hα» trợ Transfer-Encoding.
BΓ’y giα» hΓ£y tα»i vα»i lab, trΖ°α»c tiΓͺn hΓ£y xem yΓͺu cαΊ§u cα»§a lab nΓ y.

YΓͺu cαΊ§u chΓΊng ta lαΊ₯y Δược cookie admin vΓ try cαΊp Δα» xΓ³a tΓ i khoαΊ£n carlos. Γ tΖ°α»ng α» ΔΓ’y sαΊ½ vαΊ«n nhΖ° cΕ© nhΖ°ng cΓ‘ch thα»©c thα»±c hiα»n khΓ‘c so vα»i lab trΓͺn.

α» ΔΓ’y cΓ³ mα»t path /admin khi chΓΊng ta truy cαΊp thΓ¬ nΓ³ lΓ yΓͺu cαΊ§u phαΊ£i lΓ admin, thΓ¬ nhΖ° tiΓͺu Δα» thΓ¬ chΓΊng ta sαΊ½ khai thΓ‘c lα» hα»ng nΓ y theo cΓ‘ch split header HTTP/2 thΓ΄ng qua CRLF vΓ¬ mα»t phαΊ§n BE khΓ΄ng cΓ²n hα» trợ TE, nhΖ° trΓͺn lab ΔΓ£ nΓ³i rαΊ±ng Admin sαΊ½ request 10s mα»t lαΊ§n nΓͺn chα» cαΊ§n tαΊ‘o mα»t smuggling vΓ chα» request cα»§a admin thΓ¬ chΓΊng ta cΓ³ thα» lαΊ₯y Δược cookie cα»§a admin.

ΔαΊ§u tiΓͺn chΓΊng ta sαΊ½ sα» dα»₯ng mα»t path khΓ΄ng cΓ³ Δα» dα» thαΊ₯y status 302 khi admin truy cαΊp hΖ‘n.
Xem qua gΓ³i tin trΓͺn sαΊ½ chia thΓ nh 2 phαΊ§n request, sau khi hαΊ‘ cαΊ₯p thΓ¬ request ΔαΊ§u tiΓͺn sαΊ½ do chΓΊng ta request sαΊ½ trαΊ£ vα» notfound sau ΔΓ³ khi admin truy cαΊp thΓ¬ request cα»§a admin sαΊ½ thay thαΊΏ bαΊ±ng ΔoαΊ‘n http request smuggling cα»§a chΓΊng ta lα»ng vΓ o vΓ khi chΓΊng ta request thΓ¬ request cα»§a admin sαΊ½ Δược submit bα»i chΓΊng ta vΓ trαΊ£ vα» tΓ i khoαΊ£n admin.
NΓ³i dα»
hiα»u hΖ‘n khi hαΊ‘ cαΊ₯p thΓ¬ request smuggling chΓΊng ta lα»ng vΓ o name:foo thΓ¬ sαΊ½ Δược ΔΖ°a vΓ o hΓ ng Δợi Δα» xα» lΓ½ sau khi cΓ³ request tiαΊΏp theo sαΊ½ Δược xα» lΓ½.


Last updated