Server-side template injection(SSTI)
Last updated
Last updated
Template engines (cΓ΄ng cα»₯ giΓΊp chΓΊng ta tΓ‘ch mΓ£ HTML thΓ nh cΓ‘c phαΊ§n nhα» hΖ‘n mΓ chΓΊng ta cΓ³ thα» sα» dα»₯ng lαΊ‘i trΓͺn nhiα»u tαΊp tin HTML) Δược sα» dα»₯ng rα»ng rΓ£i bα»i cΓ‘c α»©ng dα»₯ng web nhαΊ±m trΓ¬nh bΓ y dα»― liα»u thΓ΄ng qua cΓ‘c trang web vΓ emails. Viα»c nhΓΊng cΓ‘c ΔαΊ§u vΓ o tα»« phΓa ngΖ°α»i dΓΉng theo cΓ‘ch khΓ΄ng an toΓ n vΓ o trong templates dαΊ«n ΔαΊΏn Server-Side Template Injection - mα»t lα» hα»ng nghiΓͺm trα»ng thΖ°α»ng xuyΓͺn dα» dΓ ng bα» nhαΊ§m lαΊ«n vα»i Cross-Site Scripting (XSS).
SSTI
lΓ khi kαΊ» tαΊ₯n cΓ΄ng cΓ³ thα» sα» dα»₯ng template syntax gα»c Δα» ΔΖ°a payload Δα»c hαΊ‘i vΓ o template, sau ΔΓ³ payload nΓ y Δược thα»±c thi phΓa server.
Template engines Δược thiαΊΏt kαΊΏ Δα» tαΊ‘o cΓ‘c trang web bαΊ±ng cΓ‘ch kαΊΏt hợp cΓ‘c template cα» Δα»nh vα»i dα»― liα»u dα»
thay Δα»i. CΓ‘c cuα»c tαΊ₯n cΓ΄ng SSTI
cΓ³ thα» xαΊ£y ra khi ΔαΊ§u vΓ o của ngΖ°α»i dΓΉng Δược nα»i trα»±c tiαΊΏp vΓ o mα»t template, thay vΓ¬ Δược chuyα»n vΓ o dΖ°α»i dαΊ‘ng dα»― liα»u. Δiα»u nΓ y cho phΓ©p kαΊ» tαΊ₯n cΓ΄ng ΔΖ°a vΓ o cΓ‘c template tΓΉy Γ½ Δα» thao tΓΊng template engine, thΖ°α»ng cho phΓ©p chΓΊng kiα»m soΓ‘t hoΓ n toΓ n server. NhΖ° tΓͺn gợi Γ½, payload SSTI Δược thα»±c hiα»n vΓ ΔΓ‘nh giΓ‘ phΓa server, cΓ³ khαΊ£ nΔng khiαΊΏn chΓΊng trα» nΓͺn nguy hiα»m hΖ‘n nhiα»u so vα»i client-side template injection.
HαΊu quαΊ£ nΓ³ mang lαΊ‘i vΓ΄ cΓΉng lα»n cΓ³ thα» khiαΊΏn cΓ‘c trang web phαΊ£i Δα»i mαΊ·t vα»i nhiα»u cuα»c tαΊ₯n cΓ΄ng khΓ‘c nhau tΓΉy thuα»c vΓ o emplate engine Δược Δα» cαΊp vΓ α»©ng dα»₯ng sα» dα»₯ng nΓ³ chΓnh xΓ‘c nhΖ° thαΊΏ nΓ o. Trong mα»t sα» trΖ°α»ng hợp hiαΊΏm gαΊ·p, nhα»―ng lα» hα»ng nΓ y khΓ΄ng gΓ’y rủi ro bαΊ£o mαΊt thα»±c sα»±. Tuy nhiΓͺn, hαΊ§u hαΊΏt thα»i gian, tΓ‘c Δα»ng của viα»c SSTI cΓ³ thα» rαΊ₯t thαΊ£m khα»c.
α» mα»©c nghiΓͺm trα»ng nhαΊ₯t của quy mΓ΄, kαΊ» tαΊ₯n cΓ΄ng cΓ³ khαΊ£ nΔng thα»±c thi mΓ£ tα»« xa(RCE), chiαΊΏm toΓ n quyα»n kiα»m soΓ‘t server vΓ sα» dα»₯ng nΓ³ Δα» thα»±c hiα»n cΓ‘c cuα»c tαΊ₯n cΓ΄ng khΓ‘c vΓ o cΖ‘ sα» hαΊ‘ tαΊ§ng nα»i bα».
Ngay cαΊ£ trong trΖ°α»ng hợp khΓ΄ng thα» thα»±c thi mΓ£ tα»« xa ΔαΊ§y Δủ, kαΊ» tαΊ₯n cΓ΄ng vαΊ«n cΓ³ thα» thΖ°α»ng xuyΓͺn sα» dα»₯ng tΓnh nΔng chΓ¨n template phΓa server lΓ m cΖ‘ sα» cho nhiα»u cuα»c tαΊ₯n cΓ΄ng khΓ‘c, cΓ³ khαΊ£ nΔng giΓ nh Δược quyα»n truy cαΊp Δα»c vΓ o dα»― liα»u nhαΊ‘y cαΊ£m vΓ cΓ‘c tα»p tΓΉy Γ½ trΓͺn server.
CΓ‘c lα» hα»ng SSTI phΓ‘t sinh khi ΔαΊ§u vΓ o của ngΖ°α»i dΓΉng Δược nα»i vΓ o cΓ‘c template thay vΓ¬ Δược chuyα»n vΓ o dΖ°α»i dαΊ‘ng dα»― liα»u.
CΓ‘c template tΔ©nh chα» cung cαΊ₯p trΓ¬nh giα»― chα» Δα» hiα»n thα» nα»i dung Δα»ng thΖ°α»ng khΓ΄ng dα» bα» SSTI. VΓ dα»₯ Δiα»n hΓ¬nh lΓ mα»t email chΓ o ΔΓ³n tα»«ng ngΖ°α»i dΓΉng bαΊ±ng tΓͺn của hα», chαΊ³ng hαΊ‘n nhΖ° ΔoαΊ‘n trΓch sau ΔΓ’y tα»« template Twig:
Δiα»u nΓ y khΓ΄ng dα» bα» SSTI vΓ¬ tΓͺn của ngΖ°α»i dΓΉng chα» Δược chuyα»n vΓ o template dΖ°α»i dαΊ‘ng dα»― liα»u.
Tuy nhiΓͺn, vΓ¬ cΓ‘c template chα» ΔΖ‘n giαΊ£n lΓ cΓ‘c chuα»i, cΓ‘c nhΓ phΓ‘t triα»n web ΔΓ΄i khi trα»±c tiαΊΏp nα»i ΔαΊ§u vΓ o của ngΖ°α»i dΓΉng vΓ o cΓ‘c template trΖ°α»c khi kαΊΏt xuαΊ₯t. HΓ£y lαΊ₯y mα»t vΓ dα»₯ tΖ°Ζ‘ng tα»± nhΖ° vΓ dα»₯ trΓͺn, nhΖ°ng lαΊ§n nΓ y, ngΖ°α»i dΓΉng cΓ³ thα» tΓΉy chα»nh cΓ‘c phαΊ§n của email trΖ°α»c khi gα»i. VΓ dα»₯: hα» cΓ³ thα» chα»n tΓͺn Δược sα» dα»₯ng:
Trong vΓ dα»₯ nΓ y, thay vΓ¬ mα»t giΓ‘ trα» tΔ©nh Δược chuyα»n vΓ o template, mα»t phαΊ§n của template tα»± Δα»ng Δược tαΊ‘o bαΊ±ng cΓ‘ch sα» dα»₯ng $_GET
tham sα» name
. VΓ¬ cΓΊ phΓ‘p template Δược xα» lΓ½ phΓa server, Δiα»u nΓ y cΓ³ khαΊ£ nΔng cho phΓ©p kαΊ» tαΊ₯n cΓ΄ng ΔαΊ·t payload SSTI bΓͺn trong name
tham sα» nhΖ° sau:
CΓ‘c lα» hα»ng bαΊ£o mαΊt nhΖ° thαΊΏ nΓ y ΔΓ΄i khi do vΓ΄ tΓ¬nh gΓ’y ra do thiαΊΏt kαΊΏ template kΓ©m bα»i nhα»―ng dev khΓ΄ng cΓ³ kiαΊΏn thα»©c bαΊ£o mαΊt vΓ update kiαΊΏn thα»©c. Giα»ng nhΖ° trong vΓ dα»₯ trΓͺn, bαΊ‘n cΓ³ thα» thαΊ₯y cΓ‘c thΓ nh phαΊ§n khΓ‘c nhau, mα»t sα» thΓ nh phαΊ§n chα»©a ΔαΊ§u vΓ o của ngΖ°α»i dΓΉng, Δược nα»i vΓ nhΓΊng vΓ o mα»t template. Theo mα»t sα» cΓ‘ch, Δiα»u nΓ y tΖ°Ζ‘ng tα»± nhΖ° cΓ‘c lα» hα»ng SQL injection xαΊ£y ra trong nhα»―ng dΓ²ng code chủ quan, thiαΊΏu hiα»u biαΊΏt của nhα»―ng dev web.
Viα»c xΓ‘c Δα»nh cΓ‘c lα» hα»ng SSTI vΓ tαΊ‘o ra mα»t cuα»c tαΊ₯n cΓ΄ng thΓ nh cΓ΄ng thΖ°α»ng bao gα»m quy trΓ¬nh sau ΔΓ’y.
CΓ‘c lα» hα»ng SSTI thΖ°α»ng khΓ΄ng Δược chΓΊ Γ½ khΓ΄ng phαΊ£i vΓ¬ chΓΊng phα»©c tαΊ‘p mΓ vΓ¬ chΓΊng chα» thα»±c sα»± rΓ΅ rΓ ng Δα»i vα»i nhα»―ng pentest Δang tΓ¬m kiαΊΏm chΓΊng mα»t cΓ‘ch rΓ΅ rΓ ng. NαΊΏu bαΊ‘n cΓ³ thα» phΓ‘t hiα»n ra rαΊ±ng cΓ³ mα»t lα» hα»ng bαΊ£o mαΊt, thΓ¬ viα»c khai thΓ‘c nΓ³ cΓ³ thα» dα» dΓ ng mα»t cΓ‘ch ΔΓ‘ng ngαΊ‘c nhiΓͺn.
NhΖ° vα»i bαΊ₯t kα»³ lα» hα»ng nΓ o, bΖ°α»c ΔαΊ§u tiΓͺn Δα» khai thΓ‘c lΓ cΓ³ thα» tΓ¬m thαΊ₯y nΓ³. CΓ³ lαΊ½ cΓ‘ch tiαΊΏp cαΊn ban ΔαΊ§u ΔΖ‘n giαΊ£n nhαΊ₯t lΓ fuzz template bαΊ±ng cΓ‘ch ΔΖ°a vΓ o mα»t chuα»i cΓ‘c kΓ½ tα»± ΔαΊ·c biα»t thΖ°α»ng Δược sα» dα»₯ng trong cΓ‘c template expressions, chαΊ³ng hαΊ‘n nhΖ° ${{<%[%'"}}%\
. NαΊΏu mα»t exception Δược ΔΖ°a ra, Δiα»u nΓ y cho thαΊ₯y rαΊ±ng template syntax Δược ΔΖ°a vΓ o cΓ³ khαΊ£ nΔng Δược server xα» lΓ½ theo mα»t cΓ‘ch nΓ o ΔΓ³. ΔΓ’y lΓ mα»t dαΊ₯u hiα»u cho thαΊ₯y cΓ³ thα» tα»n tαΊ‘i lα» hα»ng Δα»i vα»i SSTI.
CΓ‘c lα» hα»ng SSTI xαΊ£y ra trong hai bα»i cαΊ£nh(context) riΓͺng biα»t, mα»i bα»i cαΊ£nh Δα»u yΓͺu cαΊ§u phΖ°Ζ‘ng phΓ‘p phΓ‘t hiα»n riΓͺng. BαΊ₯t kα» kαΊΏt quαΊ£ của cΓ‘c nα» lα»±c lΓ m mα» của bαΊ‘n lΓ gΓ¬, Δiα»u quan trα»ng lΓ bαΊ‘n cΕ©ng nΓͺn thα» cΓ‘c cΓ‘ch tiαΊΏp cαΊn theo ngα»― cαΊ£nh cα»₯ thα» sau ΔΓ’y.
HαΊ§u hαΊΏt cΓ‘c template languages cho phΓ©p bαΊ‘n tα»± do nhαΊp nα»i dung bαΊ±ng cΓ‘ch sα» dα»₯ng trα»±c tiαΊΏp cΓ‘c thαΊ» HTML hoαΊ·c bαΊ±ng cΓ‘ch sα» dα»₯ng cΓΊ phΓ‘p gα»c của template, cΓΊ phΓ‘p nΓ y sαΊ½ Δược hiα»n thα» thΓ nh HTML α» mαΊ·t sau trΖ°α»c khi phαΊ£n hα»i HTTP Δược gα»i.
VΓ dα»₯: trong Freemarker, dΓ²ng render('Hello ' + username)
nΓ y sαΊ½ hiα»n thα» thΓ nh mα»t cΓ‘i gΓ¬ ΔΓ³ nhΖ° Hello Carlos
.
Δiα»u nΓ y ΔΓ΄i khi cΓ³ thα» bα» khai thΓ‘c cho XSS vΓ trΓͺn thα»±c tαΊΏ thΖ°α»ng bα» nhαΊ§m vα»i mα»t lα» hα»ng XSS ΔΖ‘n giαΊ£n. Tuy nhiΓͺn, bαΊ±ng cΓ‘ch ΔαΊ·t cΓ‘c phΓ©p toΓ‘n lΓ m giΓ‘ trα» của tham sα», chΓΊng tΓ΄i cΓ³ thα» kiα»m tra xem ΔΓ’y cΓ³ phαΊ£i lΓ nΖ‘i cΓ³ thα» khai thΓ‘c Δα» thα»±c hiα»n mα»t cuα»c tαΊ₯n cΓ΄ng SSTI hay khΓ΄ng?
VΓ dα»₯: hΓ£y xem xΓ©t mα»t template cΓ³ chα»©a ΔoαΊ‘n code dα» bα» tαΊ₯n cΓ΄ng sau:
Trong quΓ‘ trΓ¬nh kiα»m tra, chΓΊng tΓ΄i cΓ³ thα» fuzz SSTI bαΊ±ng cΓ‘ch GET mα»t URL chαΊ³ng hαΊ‘n nhΖ°:
NαΊΏu kαΊΏt quαΊ£ ΔαΊ§u ra chα»©a Hello 49
, Δiα»u nΓ y cho thαΊ₯y phΓ©p toΓ‘n Δang Δược thα»±c hiα»n vΓ xα» lΓ½ α» phΓa server => cΓ³ thα» exploit SSTI.
LΖ°u Γ½ rαΊ±ng cΓΊ phΓ‘p cα»₯ thα» cαΊ§n thiαΊΏt Δα» ΔΓ‘nh giΓ‘ thΓ nh cΓ΄ng phΓ©p toΓ‘n sαΊ½ khΓ‘c nhau tΓΉy thuα»c vΓ o template enginer nΓ o Δang Δược sα» dα»₯ng.
Trong cΓ‘c trΖ°α»ng hợp khΓ‘c, lα» hα»ng bα» lα» do ΔαΊ§u vΓ o của ngΖ°α»i dΓΉng Δược ΔαΊ·t trong mα»t biα»u thα»©c template, nhΖ° chΓΊng ta ΔΓ£ thαΊ₯y trΖ°α»c ΔΓ³ vα»i vΓ dα»₯ email của mΓ¬nh. Δiα»u nΓ y cΓ³ thα» α» dαΊ‘ng tΓͺn biαΊΏn do ngΖ°α»i dΓΉng kiα»m soΓ‘t Δược ΔαΊ·t bΓͺn trong mα»t tham sα», chαΊ³ng hαΊ‘n nhΖ°:
Khi ΔΓ³ payload khai thΓ‘c sau url lΓ :
VΓ dα»₯, Δiα»u nΓ y sαΊ½ Δược hiα»n thα» trong ΔαΊ§u ra thΓ nh Hello Carlos
.
Ngα»― cαΊ£nh nΓ y dα» bα» bα» qua trong quΓ‘ trΓ¬nh ΔΓ‘nh giΓ‘ vΓ¬ nΓ³ khΓ΄ng dαΊ«n ΔαΊΏn XSS rΓ΅ rΓ ng vΓ hαΊ§u nhΖ° khΓ΄ng thα» phΓ’n biα»t Δược vα»i mα»t tra cα»©u hashmap. Mα»t phΖ°Ζ‘ng phΓ‘p kiα»m tra viα»c SSTI trong ngα»― cαΊ£nh nΓ y lΓ trΖ°α»c tiΓͺn phαΊ£i thiαΊΏt lαΊp rαΊ±ng tham sα» khΓ΄ng chα»©a lα» hα»ng XSS trα»±c tiαΊΏp bαΊ±ng cΓ‘ch ΔΖ°a HTML tΓΉy Γ½ vΓ o giΓ‘ trα»:
Trong trΖ°α»ng hợp khΓ΄ng cΓ³ XSS, Δiα»u nΓ y thΖ°α»ng sαΊ½ dαΊ«n ΔαΊΏn mα»t mα»₯c nhαΊp trα»ng trong ΔαΊ§u ra ( Hello
khΓ΄ng cΓ³ tΓͺn ngΖ°α»i dΓΉng), thαΊ» Δược mΓ£ hΓ³a hoαΊ·c thΓ΄ng bΓ‘o lα»i. BΖ°α»c tiαΊΏp theo lΓ cα» gαΊ―ng thoΓ‘t ra khα»i cΓ’u lα»nh bαΊ±ng cΓ‘ch sα» dα»₯ng cΓΊ phΓ‘p tαΊ‘o khuΓ΄n mαΊ«u phα» biαΊΏn vΓ cα» gαΊ―ng ΔΖ°a HTML tΓΉy Γ½ vΓ o sau nΓ³:
NαΊΏu Δiα»u nΓ y lαΊ‘i dαΊ«n ΔαΊΏn lα»i hoαΊ·c ΔαΊ§u ra trα»ng, thΓ¬ bαΊ‘n ΔΓ£ sα» dα»₯ng cΓΊ phΓ‘p tα»« ngΓ΄n ngα»― tαΊ‘o khuΓ΄n mαΊ«u sai hoαΊ·c nαΊΏu khΓ΄ng cΓ³ cΓΊ phΓ‘p kiα»u mαΊ«u nΓ o cΓ³ vαΊ» hợp lα», thΓ¬ khΓ΄ng thα» tiΓͺm mαΊ«u phΓa mΓ‘y chủ. NgoΓ i ra, nαΊΏu ΔαΊ§u ra Δược hiα»n thα» chΓnh xΓ‘c, cΓΉng vα»i HTML tΓΉy Γ½, thΓ¬ ΔΓ’y lΓ dαΊ₯u hiα»u chΓnh cho thαΊ₯y cΓ³ lα» hα»ng chΓ¨n mαΊ«u phΓa mΓ‘y chủ: Hello Carlos<tag>
Note: TΓ³m lαΊ‘i nαΊΏu XSS thΓ¬ bαΊ‘n phαΊ£i cα» gαΊ―ng break out khα»i chuα»i;
Khi bαΊ‘n ΔΓ£ phΓ‘t hiα»n ra trang web cΓ³ thα» dΓnh lα» hα»ng SSTI, sau ΔΓ³ xΓ‘c Δα»nh template engine.
MαΊ·c dΓΉ cΓ³ rαΊ₯t nhiα»u template languages, nhiα»u ngΓ΄n ngα»― trong sα» chΓΊng sα» dα»₯ng cΓΊ phΓ‘p rαΊ₯t giα»ng nhau Δược chα»n cα»₯ thα» Δα» khΓ΄ng xung Δα»t vα»i cΓ‘c kΓ½ tα»± HTML. Do ΔΓ³, viα»c tαΊ‘o cΓ‘c payload thΔm dΓ² Δα» kiα»m tra template engine nΓ o Δang Δược sα» dα»₯ng cΓ³ thα» tΖ°Ζ‘ng Δα»i ΔΖ‘n giαΊ£n.
Chα» cαΊ§n submit invalid syntax thΖ°α»ng lΓ Δủ vΓ¬ thΓ΄ng bΓ‘o lα»i kαΊΏt quαΊ£ sαΊ½ cho bαΊ‘n biαΊΏt chΓnh xΓ‘c template engine lΓ gΓ¬ vΓ ΔΓ΄i khi lΓ phiΓͺn bαΊ£n nΓ o. VΓ dα»₯: biα»u thα»©c khΓ΄ng hợp lα» <%=foobar%>
kΓch hoαΊ‘t phαΊ£n hα»i sau tα»« template engine - ERB dα»±a trΓͺn Ruby:
NαΊΏu khΓ΄ng, bαΊ‘n sαΊ½ cαΊ§n tα»± check hay lΓ fuzz Δα» cΓ³ build payload dΓ nh riΓͺng cho ngΓ΄n ngα»― khΓ‘c nhau vΓ nghiΓͺn cα»©u cΓ‘ch chΓΊng Δược run bα»i template engines.
NΓͺn lΖ°u Γ½ rαΊ±ng cΓΉng mα»t payload ΔΓ΄i khi cΓ³ thα» trαΊ£ vα» phαΊ£n hα»i thΓ nh cΓ΄ng bαΊ±ng nhiα»u template languages. VΓ dα»₯: tαΊ£i trα»ng {{7*'7'}}
trαΊ£ vα» 49
trong Twig vΓ 7777777
trong Jinja2. Do ΔΓ³, Δiα»u quan trα»ng lΓ khΓ΄ng Δi ΔαΊΏn kαΊΏt luαΊn dα»±a trΓͺn mα»t phαΊ£n hα»i thΓ nh cΓ΄ng duy nhαΊ₯t.
Sau khi phΓ‘t hiα»n ra rαΊ±ng tα»n tαΊ‘i mα»t lα» hα»ng tiα»m αΊ©n vΓ xΓ‘c Δα»nh thΓ nh cΓ΄ng template enginers, chΓΊng ta cΓ³ thα» bαΊ―t ΔαΊ§u cα» gαΊ―ng tΓ¬m cΓ‘ch khai thΓ‘c lα» hα»ng ΔΓ³.
Hα»c basic syntax rΓ΅ rΓ ng lΓ quan trα»ng, cΓΉng vα»i cΓ‘c chα»©c nΔng chΓnh vΓ xα» lΓ½ cΓ‘c biαΊΏn. Ngay cαΊ£ nhα»―ng viα»c ΔΖ‘n giαΊ£n nhΖ° hα»c cΓ‘ch embed cΓ‘c native code blocks vΓ o template ΔΓ΄i khi cΕ©ng cΓ³ thα» nhanh chΓ³ng dαΊ«n ΔαΊΏn viα»c khai thΓ‘c. VΓ dα»₯: khi bαΊ‘n biαΊΏt rαΊ±ng Python-based Mako template engine
Δang Δược sα» dα»₯ng, viα»c thα»±c thi mΓ£ tα»« xa (RCE
) cΓ³ thα» ΔΖ‘n giαΊ£n nhΖ° sau:
NgoΓ i viα»c cung cαΊ₯p cΓ‘c nguyΓͺn tαΊ―c cΖ‘ bαΊ£n vα» cΓ‘ch tαΊ‘o vΓ sα» dα»₯ng template, tΓ i liα»u nΓ y cΕ©ng cΓ³ thα» cung cαΊ₯p mα»t sα» loαΊ‘i phαΊ§n "BαΊ£o mαΊt". TΓͺn của phαΊ§n nΓ y sαΊ½ khΓ‘c nhau, nhΖ°ng nΓ³ thΖ°α»ng sαΊ½ phΓ‘c thαΊ£o tαΊ₯t cαΊ£ nhα»―ng Δiα»u nguy hiα»m tiα»m αΊ©n mΓ mα»i ngΖ°α»i nΓͺn trΓ‘nh thα»±c hiα»n vα»i template. ΔΓ’y cΓ³ thα» lΓ mα»t nguα»n tΓ i nguyΓͺn vΓ΄ giΓ‘, thαΊm chΓ hoαΊ‘t Δα»ng nhΖ° mα»t loαΊ‘i bαΊ£ng gian lαΊn vα» nhα»―ng hΓ nh vi mΓ bαΊ‘n nΓͺn tΓ¬m kiαΊΏm trong quΓ‘ trΓ¬nh kiα»m tra, cΕ©ng nhΖ° cΓ‘ch khai thΓ‘c chΓΊng.
Ngay cαΊ£ khi khΓ΄ng cΓ³ phαΊ§n "BαΊ£o mαΊt" chuyΓͺn dα»₯ng, nαΊΏu mα»t Δα»i tượng hoαΊ·c chα»©c nΔng tΓch hợp cα»₯ thα» cΓ³ thα» gΓ’y rủi ro bαΊ£o mαΊt, thΓ¬ hαΊ§u nhΖ° luΓ΄n cΓ³ mα»t cαΊ£nh bΓ‘o nΓ o ΔΓ³ trong tΓ i liα»u. CαΊ£nh bΓ‘o cΓ³ thα» khΓ΄ng cung cαΊ₯p nhiα»u chi tiαΊΏt, nhΖ°ng Γt nhαΊ₯t cαΊ£nh bΓ‘o nΓͺn gαΊ―n cα» phαΊ§n tΓch hợp sαΊ΅n cα»₯ thα» nΓ y lΓ nα»i dung cαΊ§n Δiα»u tra.
VΓ dα»₯, trong ERB, tΓ i liα»u tiαΊΏt lα» rαΊ±ng bαΊ‘n cΓ³ thα» liα»t kΓͺ tαΊ₯t cαΊ£ cΓ‘c thΖ° mα»₯c vΓ sau ΔΓ³ Δα»c cΓ‘c tα»p tΓΉy Γ½ nhΖ° sau:
Mα»t khΓa cαΊ‘nh quan trα»ng khΓ‘c của viα»c khai thΓ‘c cΓ‘c lα» hα»ng server-side template injection lΓ cΓ³ α»n trong viα»c tΓ¬m kiαΊΏm cΓ‘c tΓ i nguyΓͺn bα» sung trα»±c tuyαΊΏn. Khi bαΊ‘n cΓ³ thα» xΓ‘c Δα»nh template engine Δang Δược sα» dα»₯ng, bαΊ‘n nΓͺn duyα»t web Δα» tΓ¬m bαΊ₯t kα»³ lα» hα»ng nΓ o mΓ nhα»―ng ngΖ°α»i khΓ‘c cΓ³ thα» ΔΓ£ phΓ‘t hiα»n ra(Cα»₯ thα» lΓ hΓ£y search nΓ³ α» trΓͺn mαΊ‘ng). Do viα»c sα» dα»₯ng rα»ng rΓ£i mα»t sα» template engine, ΔΓ΄i khi cΓ³ thα» tΓ¬m thαΊ₯y cΓ‘c khai thΓ‘c Δược ghi chΓ©p ΔαΊ§y Δủ mΓ bαΊ‘n cΓ³ thα» Δiα»u chα»nh Δα» khai thΓ‘c trang web mα»₯c tiΓͺu của riΓͺng mΓ¬nh.
TαΊ‘i thα»i Δiα»m nΓ y, bαΊ‘n cΓ³ thα» ΔΓ£ tΓ¬nh cα» phΓ‘t hiα»n ra mα»t cΓ‘ch khai thΓ‘c khαΊ£ thi bαΊ±ng cΓ‘ch sα» dα»₯ng tΓ i liα»u. NαΊΏu khΓ΄ng, bΖ°α»c tiαΊΏp theo lΓ khΓ‘m phΓ‘ mΓ΄i trΖ°α»ng vΓ cα» gαΊ―ng khΓ‘m phΓ‘ tαΊ₯t cαΊ£ cΓ‘c Δα»i tượng mΓ bαΊ‘n cΓ³ quyα»n truy cαΊp.
Nhiα»u template engines hiα»n thα» mα»t sα» loαΊ‘i Δα»i tượng "self" hoαΊ·c "enviroment", hoαΊ‘t Δα»ng giα»ng nhΖ° mα»t khΓ΄ng gian tΓͺn chα»©a tαΊ₯t cαΊ£ cΓ‘c Δα»i tượng, phΖ°Ζ‘ng thα»©c vΓ thuα»c tΓnh Δược cΓ΄ng cα»₯ mαΊ«u hα» trợ. NαΊΏu mα»t Δα»i tượng nhΖ° vαΊy tα»n tαΊ‘i, bαΊ‘n cΓ³ thα» sα» dα»₯ng nΓ³ Δα» tαΊ‘o danh sΓ‘ch cΓ‘c Δα»i tượng nαΊ±m trong phαΊ‘m vi. VΓ dα»₯: Java-based templating languages, ΔΓ΄i khi bαΊ‘n cΓ³ thα» liα»t kΓͺ tαΊ₯t cαΊ£ cΓ‘c biαΊΏn trong mΓ΄i trΖ°α»ng bαΊ±ng cΓ‘ch sα» dα»₯ng phΓ©p nα»i xαΊ‘ sau:
Δiα»u nΓ y cΓ³ thα» tαΊ‘o thΓ nh cΖ‘ sα» Δα» tαΊ‘o mα»t danh sΓ‘ch rΓΊt gα»n cΓ‘c Δα»i tượng vΓ phΖ°Ζ‘ng phΓ‘p cΓ³ khαΊ£ nΔng thΓΊ vα» Δα» Δiα»u tra thΓͺm. NgoΓ i ra, Δα»i vα»i ngΖ°α»i dΓΉng Burp Suite Professional, Intruder cung cαΊ₯p mα»t danh sΓ‘ch tα»« tΓch hợp sαΊ΅n cho brute force cΓ‘c biαΊΏn.
Δiα»u quan trα»ng cαΊ§n lΖ°u Γ½ lΓ cΓ‘c trang web sαΊ½ chα»©a cαΊ£ cΓ‘c Δα»i tượng tΓch hợp sαΊ΅n do template cung cαΊ₯p vΓ cΓ‘c Δα»i tượng tΓΉy chα»nh, dΓ nh riΓͺng cho trang web do nhΓ phΓ‘t triα»n web cung cαΊ₯p. BαΊ‘n nΓͺn ΔαΊ·c biα»t chΓΊ Γ½ ΔαΊΏn cΓ‘c Δα»i tượng khΓ΄ng chuαΊ©n nΓ y vΓ¬ chΓΊng ΔαΊ·c biα»t cΓ³ khαΊ£ nΔng chα»©a thΓ΄ng tin nhαΊ‘y cαΊ£m hoαΊ·c cΓ‘c phΖ°Ζ‘ng phΓ‘p cΓ³ thα» khai thΓ‘c. VΓ¬ cΓ‘c Δα»i tượng nΓ y cΓ³ thα» khΓ‘c nhau giα»―a cΓ‘c mαΊ«u khΓ‘c nhau trong cΓΉng mα»t trang web, hΓ£y lΖ°u Γ½ rαΊ±ng bαΊ‘n cΓ³ thα» cαΊ§n nghiΓͺn cα»©u hΓ nh vi của mα»t Δα»i tượng trong ngα»― cαΊ£nh của tα»«ng mαΊ«u riΓͺng biα»t trΖ°α»c khi tΓ¬m cΓ‘ch khai thΓ‘c nΓ³.
MαΊ·c dΓΉ viα»c tiΓͺm mαΊ«u phΓa mΓ‘y chủ cΓ³ khαΊ£ nΔng dαΊ«n ΔαΊΏn viα»c thα»±c thi mΓ£ tα»« xa vΓ chiαΊΏm toΓ n bα» mΓ‘y chủ, nhΖ°ng trΓͺn thα»±c tαΊΏ, Δiα»u nΓ y khΓ΄ng phαΊ£i lΓΊc nΓ o cΕ©ng cΓ³ thα» ΔαΊ‘t Δược. Tuy nhiΓͺn, chα» vΓ¬ bαΊ‘n ΔΓ£ loαΊ‘i trα»« viα»c thα»±c thi mΓ£ tα»« xa, Δiα»u ΔΓ³ khΓ΄ng nhαΊ₯t thiαΊΏt cΓ³ nghΔ©a lΓ khΓ΄ng cΓ³ khαΊ£ nΔng xαΊ£y ra mα»t kiα»u khai thΓ‘c khΓ‘c. BαΊ‘n vαΊ«n cΓ³ thα» tαΊn dα»₯ng cΓ‘c lα» hα»ng chΓ¨n mαΊ«u phΓa mΓ‘y chủ cho cΓ‘c khai thΓ‘c mα»©c Δα» nghiΓͺm trα»ng cao khΓ‘c, chαΊ³ng hαΊ‘n nhΖ° truyα»n tαΊ£i thΖ° mα»₯c , Δα» cΓ³ quyα»n truy cαΊp vΓ o dα»― liα»u nhαΊ‘y cαΊ£m.
BΖ°α»c ΔαΊ§u tiΓͺn lΓ xΓ‘c Δα»nh cΓ‘c Δα»i tượng - object vΓ phΖ°Ζ‘ng thα»©c mΓ bαΊ‘n cΓ³ quyα»n truy cαΊp. Mα»t sα» Δα»i tượng cΓ³ thα» ngay lαΊp tα»©c nhαΊ£y ra nhΖ° thΓΊ vα». BαΊ±ng cΓ‘ch kαΊΏt hợp kiαΊΏn ββthα»©c của riΓͺng bαΊ‘n vΓ thΓ΄ng tin Δược cung cαΊ₯p trong tΓ i liα»u, bαΊ‘n sαΊ½ cΓ³ thα» tαΊp hợp mα»t danh sΓ‘ch rΓΊt gα»n cΓ‘c Δα»i tượng mΓ bαΊ‘n muα»n Δiα»u tra kα»Ή lΖ°α»‘ng hΖ‘n.
Khi nghiΓͺn cα»©u tΓ i liα»u vα» cΓ‘c Δα»i tượng, hΓ£y ΔαΊ·c biα»t chΓΊ Γ½ ΔαΊΏn cΓ‘c phΖ°Ζ‘ng thα»©c mΓ cΓ‘c Δα»i tượng nΓ y cαΊ₯p quyα»n truy cαΊp cΕ©ng nhΖ° Δα»i tượng nΓ o chΓΊng trαΊ£ vα». BαΊ±ng cΓ‘ch Δi sΓ’u vΓ o tΓ i liα»u, bαΊ‘n cΓ³ thα» khΓ‘m phΓ‘ sα»± kαΊΏt hợp của cΓ‘c Δα»i tượng vΓ phΖ°Ζ‘ng phΓ‘p mΓ bαΊ‘n cΓ³ thα» xΓ’u chuα»i lαΊ‘i vα»i nhau. Viα»c kαΊΏt hợp cΓ‘c Δα»i tượng vΓ phΖ°Ζ‘ng phΓ‘p phΓΉ hợp vα»i nhau ΔΓ΄i khi cho phΓ©p bαΊ‘n cΓ³ quyα»n truy cαΊp vΓ o chα»©c nΔng nguy hiα»m vΓ dα»― liα»u nhαΊ‘y cαΊ£m mΓ ban ΔαΊ§u cΓ³ vαΊ» ngoΓ i tαΊ§m vα»i.
VΓ dα»₯: Trong template engine Velocity dα»±a trΓͺn Java, bαΊ‘n cΓ³ quyα»n truy cαΊp vΓ o mα»t Object ClassTool
cΓ³ tΓͺn lΓ $class
. NghiΓͺn cα»©u tΓ i liα»u cho thαΊ₯y rαΊ±ng bαΊ‘n cΓ³ thα» xΓ’u chuα»i $class.inspect()
phΖ°Ζ‘ng thα»©c vΓ thuα»c $class.type
tΓnh Δα» cΓ³ Δược cΓ‘c tham chiαΊΏu ΔαΊΏn cΓ‘c Δα»i tượng-Object tΓΉy Γ½. TrΖ°α»c ΔΓ’y, Δiα»u nΓ y ΔΓ£ Δược khai thΓ‘c Δα» thα»±c thi cΓ‘c lα»nh shell trΓͺn hα» thα»ng ΔΓch nhΖ° sau:
Theo mαΊ·c Δα»nh, mα»t sα» template engines chαΊ‘y trong mΓ΄i trΖ°α»ng an toΓ n, bα» khΓ³a Δα» giαΊ£m thiα»u cΓ‘c rủi ro liΓͺn quan nhiα»u nhαΊ₯t cΓ³ thα». MαΊ·c dΓΉ Δiα»u nΓ y gΓ’y khΓ³ khΔn cho viα»c khai thΓ‘c cΓ‘c template nhΖ° vαΊy Δα» thα»±c thi mΓ£ tα»« xa (RCE), nhΖ°ng cΓ‘c Objects do nhΓ phΓ‘t triα»n tαΊ‘o connect vα»i template cΓ³ thα» mang lαΊ‘i bα» mαΊ·t tαΊ₯n cΓ΄ng sΓ’u hΖ‘n.
Tuy nhiΓͺn, trong khi tΓ i liα»u quan trα»ng thΖ°α»ng Δược cung cαΊ₯p cho template dα»±ng sαΊ΅n, cΓ‘c Δα»i tượng dΓ nh riΓͺng cho trang web gαΊ§n nhΖ° chαΊ―c chαΊ―n khΓ΄ng Δược ghi lαΊ‘i. Do ΔΓ³, tΓ¬m ra cΓ‘ch khai thΓ‘c chΓΊng sαΊ½ yΓͺu cαΊ§u bαΊ‘n Δiα»u tra hΓ nh vi của trang web theo cΓ‘ch thủ cΓ΄ng Δα» xΓ‘c Δα»nh bα» mαΊ·t tαΊ₯n cΓ΄ng vΓ xΓ’y dα»±ng cΓ‘ch khai thΓ‘c tΓΉy chα»nh của riΓͺng bαΊ‘n cho phΓΉ hợp.
CΓ‘ch tα»t nhαΊ₯t Δα» ngΔn viα»c server-side template injection lΓ khΓ΄ng cho phΓ©p bαΊ₯t kα»³ ngΖ°α»i dΓΉng nΓ o sα»a Δα»i hoαΊ·c gα»i template mα»i. Tuy nhiΓͺn, Δiα»u nΓ y ΔΓ΄i khi khΓ΄ng thα» trΓ‘nh khα»i do yΓͺu cαΊ§u kinh doanh.
Mα»t trong nhα»―ng cΓ‘ch ΔΖ‘n giαΊ£n nhαΊ₯t Δα» trΓ‘nh tαΊ‘o ra cΓ‘cserver-side template injection lΓ luΓ΄n sα» dα»₯ng mα»t cΓ΄ng cα»₯ tαΊ‘o template "Γt logic", chαΊ³ng hαΊ‘n nhΖ° Mustache, trα»« khi thα»±c sα»± cαΊ§n thiαΊΏt. TΓ‘ch logic khα»i bαΊ£n trΓ¬nh bΓ y cΓ ng nhiα»u cΓ ng tα»t cΓ³ thα» lΓ m giαΊ£m ΔΓ‘ng kα» khαΊ£ nΔng bαΊ‘n tiαΊΏp xΓΊc vα»i cΓ‘c cuα»c tαΊ₯n cΓ΄ng dα»±a trΓͺn mαΊ«u nguy hiα»m nhαΊ₯t.
Mα»t biα»n phΓ‘p khΓ‘c lΓ chα» thα»±c thi mΓ£ của ngΖ°α»i dΓΉng trong mΓ΄i trΖ°α»ng sandbox nΖ‘i cΓ‘c mΓ΄-Δun vΓ chα»©c nΔng nguy hiα»m tiα»m αΊ©n ΔΓ£ bα» xΓ³a hoΓ n toΓ n. ThαΊt khΓ΄ng may, sandbox khΓ΄ng ΔΓ‘ng tin cαΊy vα»n ΔΓ£ khΓ³ vΓ dα» bα» bα» qua.
Cuα»i cΓΉng, mα»t cΓ‘ch tiαΊΏp cαΊn bα» sung khΓ‘c lΓ chαΊ₯p nhαΊn rαΊ±ng viα»c thα»±c thi mΓ£ tΓΉy Γ½ lΓ tαΊ₯t yαΊΏu nhΖ°ng khΓ΄ng thα» trΓ‘nh khα»i vΓ Γ‘p dα»₯ng sandbox của riΓͺng bαΊ‘n bαΊ±ng cΓ‘ch triα»n khai template environment của bαΊ‘n trong bα» chα»©a Docker bα» khΓ³a.