π°[Dice CTF 2023] Writeup Web
web/recursive-csp
Mα» ΔαΊ§u bΓ i nΓ y chΓΊng ta Δược cho biαΊΏt flag nαΊ±m α» cookie admin, lα» hα»ng mΓ¬nh biαΊΏt chαΊ―c chαΊ―n lΓ XSS

Quan trα»ng lΓ m sao Δα» inject Δược js chαΊ‘y α» ΔΓ’y mα»i quan trα»ng, α» ΔΓ’y mΓ¬nh nhαΊn ra source cΓ³ ΔoαΊ‘n /?source

ChΓΊng ta sαΊ½ truy cαΊp vΓ o source xem cΓ³ gΓ¬:

MΓ¬nh ΔΓ£ phΓ’n tΓch ΔoαΊ‘n code trΓͺn bαΊ±ng nhα»―ng dΓ²ng comment, α» ΔΓ’y chΓΊng ta sαΊ½ lΖ°u Γ½ tα»i CSP
α» ΔΓ’y cΓ³ mα»t dΓ²ng α» CSP script-src 'nonce-$nonce' 'unsafe-inline';
MΓ¬nh cΓ³ search thΓ¬ chα» unsafe-inline thΓ¬ nαΊΏu inject xss vΓ o nΓ³ vαΊ«n hoαΊ‘t Δα»ng nhΖ°ng mαΊ₯u chα»t lΓ crc32b nΓ³ Δược mΓ£ hΓ³a vα»i $name mΓ¬nh ΔΖ°a vΓ o Γ½ lΓ payload sαΊ½ kiα»u nhΖ° nΓ y:
Khi ΔΓ³ crc32b nΓ³ sαΊ½ mΓ£ hΓ³a payload trΓͺn thΓ nh mα»t none khΓ‘c vΓ check xem nΓ³ cΓ³ khα»p nhau hay khΓ΄ng? NαΊΏu khΓ΄ng khα»p nhau thΓ¬ ΔoαΊ‘n payload trΓͺn khΓ΄ng thα» hoαΊ‘t Δα»ng vΓ ngược lαΊ‘i.
Sau mα»t lΓΊc suy nghΔ©a mΓ¬nh thΓ¬ lΓ m cΓ‘ch nΓ o ΔΓ³ Δα» ΔoαΊ‘n payload cΓ³ nonce = hash("crc32b", "payload")
Tool brute force sαΊ½ nhΖ° nΓ y:
Flag=diceCTF{h0pe_that_d1dnt_take_too_l0ng}
web/scorescope
ΔΓ’y lΓ mα»t bΓ i mΓ¬nh thαΊ₯y khΓ‘ dα», khi vΓ o trang web chΓΊng ta sαΊ½ cΓ³ mα»t giao diα»n nhΖ° nΓ y:

ΔΓ’y lΓ trang web giα»ng vα»i cΓ‘c trang web yΓͺu cαΊ§u chΓΊng ta submit bΓ i lΓͺn Δα» check, nhiα»m vα»₯ chΓΊng ta sαΊ½ phαΊ£i vượt qua hαΊΏt tαΊ₯t cαΊ£ cΓ‘c test case
Code cα»§a template.py sαΊ½ nhΖ° sau:
Oke khΓ‘ nhiα»u yΓͺu cαΊ§u Δα» chΓΊng ta giαΊ£i ra, file trΓͺn cΓ³ mα»t vΓ i case gαΊ§n nhΖ° khΓ΄ng thα» solve.
ChΓΊng ta sαΊ½ upload file xem thα» nhΖ° nΓ o:

Upload template.py lΓͺn khΓ΄ng sα»a thΓ¬ bΓ‘o 22 cases Δα»u khΓ΄ng thα» pass.
MΓ¬nh sαΊ½ chα»nh lαΊ‘i case ΔαΊ§u tiΓͺn vα»i sum cα»§a a+b:


NαΊΏu chΓΊng ta thα» inject mα»t ΔoαΊ‘n python (Kα»Ή thuαΊt PyJail)
NhΖ°ng mΓ khΓ΄ng Δược, nΓ³ cαΊ₯m

α» ΔΓ’y nαΊΏu thαΊΏ chΓΊng ta sαΊ½ xem trong __main__ cΓ³ gΓ¬ bαΊ±ng cΓ‘ch raise ra Exception cα»§a vars(__main__)

VΓ¬ chΓΊng ta khΓ΄ng thα» print ra Δược nΓͺn chα» cΓ³ cΓ‘ch vα»©t exception ra ngoΓ i bαΊ±ng kiα»u nΓ y Δα» xem nΓ³ cΓ³ thΓ΄ng tin gΓ¬ cΓ³ thα» khai thΓ‘c.

α» ΔΓ’y chΓΊng ta chΓΊ Γ½ tα»i mαΊ£ng test nΓ³ cΓ³ 22 trΖ°α»ng hợp giα»ng nhΖ° trΓͺn web vαΊy chΓΊng ta sαΊ½ lΓ m cΓ‘ch nΓ o ΔΓ³ overwrite nΓ³ Δi thΓ¬ chΓΊng ta cΓ³ thα» pass tαΊ₯t cαΊ£ mα»i case:

Mα»t lΓΊc suy nghΔ© nαΊΏu cho tαΊ₯t cαΊ£ bαΊ±ng true thΓ¬ sao, mΓ¬nh nghΔ© nΓ³ sαΊ½ Δược nhΖ°ng mΓ¬nh nhαΊn ra test cases lΓΊc nΓ y nΓ³ khΓ΄ng hiα»n cΓ‘c cases sai nα»―a mΓ chα» hiα»n thα» 1/22 cases ΔΓ£ passed vαΊy *22 lΓͺn thα» xem sao:

VαΊy lΓ exploit thΓ nh cΓ΄ng// Flag: dice{still_more_secure_than_gradescope}
Last updated
