πŸ”°[WRECK CTF 2022] Writeup Web

Mở Δ‘αΊ§u

GiαΊ£i nΓ y mΓ¬nh lΓ m khi chỉ cΓ²n 3 tiαΊΏng nα»―a kαΊΏt thΓΊc nΓͺn khΓ‘ tiαΊΏc 3 bΓ i chΖ°a kα»‹p lΓ m....CΓ³ taast cαΊ£ 8 bΓ i web mΓ¬nh solve được 5/8 vΓ  mα»™t bΓ i lΓ m được sau khi giαΊ£i kαΊΏt thΓΊc. DΖ°α»›i Δ‘Γ’y lΓ  write up cα»§a mΓ¬nh. Γ€ Δ‘Γ’y lΓ  toΓ n bα»™ source code mαΊ£ng web: LINK

Web/souce

NhΖ° tΓͺn bΓ i vΓ  nΓ³ khΓ‘ dα»…, khi vΓ o trang web nΓ³ sαΊ½ nhΖ° thαΊΏ nΓ y....

TiαΊΏp theo mΓ¬nh source code nΓ³ lΓͺn

CΓ³ ngay 1/3 flag khi nΓ y mΓ¬nh thαΊ₯y hai file trΓͺn khΓ‘ Δ‘Γ‘ng nghi nhΖ°ng mΓ¬nh chαΊ―c flag sαΊ½ nαΊ±m trong hai file style.css vΓ  script.js

flag{bd6a9e3f1690f7abb8445c0e}

Web/password-1

Khi nghΔ© tα»›i password mΓ¬nh nghΔ© tα»›i lα»— hα»•ng sqli nhΖ°ng bΓ i nΓ y cΓ³ source nΓͺn chΓΊng ta sαΊ½ xem xΓ©t source

Ở Δ‘Γ’y chỉ cΓ³ hai file, ở Δ‘Γ’y chΓΊng ta sαΊ½ xΓ©t file app.py

Ở Δ‘Γ’y biαΊΏn hash chα»©a mα»™t chuα»—i, Δ‘Γ’y lΓ  mΓ£ SHA256, mα»™t loαΊ‘i mΓ£ hΓ³a mα»™t chiều, oke tiαΊΏp theo nαΊΏu giΓ‘ trα»‹ nhαΊ­p vΓ o input trΓͺn được mΓ£ hΓ³a sha256 bαΊ±ng hash thΓ¬ sαΊ½ cΓ³ flag, Δ‘Ζ‘n giαΊ£n lΓ  vαΊ­y....

NhΖ°ng khΓ΄ng... nhΖ° trΓͺn mΓ¬nh Δ‘Γ£ nΓ³i mΓ£ hΓ³a SHA256 lΓ  mΓ£ hΓ³a mα»™t chiều nΓͺn Δ‘iều nΓ y coi nhΖ° khΓ΄ng thể...Oke sau khi xem tiαΊΏp code mΓ¬nh nhαΊ­n ra cΓ³ lα»— hα»•ng.

MΓ¬nh sαΊ½ giαΊ£i thΓ­ch ở Δ‘Γ’y thΓ¬ @server cΓ³ thể trỏ tα»›i hay gọi lΓ  get tα»›i /api/output vΓ  xα»­ lΓ½ ngay tα»›i hΓ m flag vΓ  in ra flag.

Web/password-2

BΓ i nΓ y cΕ©ng cΓ³ source nα»‘t nΓͺn chΓΊng ta lαΊ‘i phΓ’n tΓ­ch code

NhΓ¬n vΓ o Δ‘oαΊ‘n code nΓ y sau khi password được nhαΊ­p thΓ¬ prepare sαΊ½ xα»­ lΓ½ Δ‘oαΊ‘n query nhΖ°ng vαΊ₯n đề ở Δ‘Γ’y lΓ  password được chΓ¨n vΓ o query để so sΓ‘nh khi Δ‘Γ³ cΓ³ thể break out query trΓͺn vα»›i cΓΊ phΓ‘p nhΖ° 'or'1'='1

Web/note-1

BΓ i nΓ y khΓ‘ thΓΊ vα»‹, khi vΓ o trang web chΓΊng ta thαΊ₯y mα»™t mα»™t input để chΓΊng ta ghi bαΊ₯t cα»© thα»© gΓ¬ vΓ o vΓ  note lαΊ‘i.....

Oke bΓ’y giờ vαΊ«n cαΊ§n thα»±c hiện nhΖ° mα»™t người bΓ¬nh thường thΓ΄i note lαΊ‘i vΓ  nΓ³ lΓ  private mΓ  nΓͺn khΓ΄ng ai cΓ³ thể đọc được...

ChΓΊng ta chΓΊ Γ½ rαΊ±ng trΓͺn url cΓ³ mα»™t Δ‘oαΊ‘n mΓ£ sau /view/ nhΓ¬n cΓ³ vαΊ» lΓ  hex nhΖ°ng khΓ΄ng chαΊ―c...

Khi mΓ¬nh check thΓ¬ nΓ³ k ra mα»™t chuα»— gΓ¬ cαΊ£ thΓ¬ mΓ¬nh dΓΉng crackstation để check thΓ¬ nΓ³ ra nhΖ° nΓ y

Oke xΓ‘c Δ‘α»‹nh được rΓ΅ loαΊ‘i mΓ£ hΓ³a vΓ  mΓ¬nh thα»­ dΓΉng mα»™t sα»‘ khΓ‘c mΓ£ hΓ³a SHA256 thay thαΊΏ cho Δ‘oαΊ‘n mΓ£ trΓͺn vΓ  xuαΊ₯t hiện mα»™t note cα»§a người khΓ‘c.

Oke mΓ¬nh xΓ‘c Δ‘α»‹nh Δ‘Γ’y lΓ  lα»— hα»•ng Access control vulnerabilities and privilege escalation(_MΓ¬nh cΓ³ viαΊΏt bΓ y nΓ y ở Research vul) khi Δ‘Γ³ chΓΊng ta cΓ³ thể xem được note cα»§a người khΓ‘c mΓ  khΓ΄ng bα»‹ cαΊ£n trở.

Ở Δ‘Γ’y mΓ¬nh dΓΉng tool burp suite để quΓ©t. Γ€ trΖ°α»›c khi quΓ©t thΓ¬ cΓ³ Δ‘oαΊ‘n code cα»§a bΓ i nhΖ° sau.

Ở Δ‘Γ’y hαΊ±ng sα»‘ state được gΓ‘n mα»™t Object cΓ³ key lΓ  id vΓ  value lΓ  0 sau Δ‘Γ³ Γ³ mΓ£ hΓ³a sha256, bỏ qua Δ‘oαΊ‘n dΖ°α»›i thΓ¬ bαΊ‘n cα»© hiểu Δ‘oan giαΊ£n nΓ³ sαΊ½ mΓ£ hΓ³a 256 sau Δ‘Γ³ nΓ³ được +1 vΓ  được set vΓ o note

Sau khi post note lΓͺn thΓ¬ khi Δ‘Γ³ hαΊ±ng sα»‘ note sαΊ½ check xem cΓ³ nα»™i dung khΓ΄ng, nαΊΏu k cΓ³ thΓ¬ trαΊ£ vα»… chuα»—i rα»—ng, cΓ³ thΓ¬ trαΊ£ về chuα»—i được nhαΊ­p vΓ  vαΊ«n add note vΓ o id vΓ  trαΊ£ về trang /view/id.

Oke được rα»“i bΓ’y giờ tα»›i burp thΓ¬ chΓΊng ta dΓΉng payload lΓ  sα»‘ tα»« 0 tα»›i 100 vΓ  payload process lΓ  mΓ£ hΓ³a sha256. VΓ  grep-extract lΓ  nhΖ° nΓ y khΓ΄ng thΓ¬ sαΊ½ filter kαΊΏt quαΊ£ sau khi quΓ©t xong...tΓΉy!

Sau khi quΓ©t thΓ¬ flag nαΊ±m ở id lΓ  0, thΓ¬ bΓ i nΓ y khΓ‘ Δ‘Γ‘nh lα»«a chΓΊng ta nαΊΏu chΓΊng ta bỏ Δ‘i sα»‘ 0 thΓ¬ sαΊ½ khΓ΄ng thαΊ₯y được flag.

Web/blog

Oke bài này có source code mình sẽ check.

Ở Δ‘Γ’y chΓΊng ta sαΊ½ xΓ©t file blog.py

Lα»— hα»•ng SSTI xuαΊ₯t hiện ở Δ‘Γ’y - nhΓΊng vΓ o title vΓ  ta cΓ³ thể đọc được secret-key.

NhΓ¬n vΓ o dΓ²ng code nΓ y chΓΊng ta thαΊ₯y rαΊ±ng flag nαΊ±m ở config...

Exploit

BÒy giờ chúng ta sẽ check phần titke của trang web

ChΓΊng ta cΓ³ thể thαΊ₯y sau khi submit thΓ¬ SSTI bα»‹ khai thΓ‘c, nhΖ° ở trΓͺn chΓΊng ta Δ‘Γ£ biαΊΏn flag ở nαΊ±m ở config vΓ  biαΊΏn secret_key vΓ  payload lΓΊc nΓ y lΓ :

Oke thΓ nh cΓ΄ng vαΊ­y chΓΊng ta Δ‘Γ£ cΓ³ flag: flag{I'm_not_real_:)}

Web/note-2

Oke bài này khÑ là thú vị, trong bài này có 2 link, nó vẫn là private note và có một link submit cho Admin bot => mình nghĩ tới XSS;

Vào link đầu và trang note, mình thử note "Shang" và source code nó ra và nhận ra rằng.../

NhαΊ­n ra rαΊ±ng input Δ‘αΊ§u vΓ o mΓ¬nh cΓ³ thể break out Δ‘oαΊ‘n js Δ‘Γ³ Δ‘i bαΊ±ng cΓ‘ch ";alert(1)//

Oke vαΊ­y lΓ  khai thΓ‘c thΓ nh cΓ΄ng XSS, bΓ’y giờ chΓΊng ta cαΊ§n xΓ’y dα»±ng payload để submit lΓͺn trang cα»§a mΓ¬nh vΓ  lαΊ₯y được {id} được mΓ£ hΓ³a sau /view cα»§a admin thΓ¬ sαΊ½ cΓ³ flag...NhαΊ―c lαΊ‘i trang nΓ y k cΓ³ cookie nΓͺn cΓ‘i cαΊ§n lαΊ₯y lΓ  id trΓͺn thanh url.

Oke sau một lúc research thì mình có đoẑn đầu của payload như này: ";});

  • MΓ¬nh giαΊ£i thΓ­ch Δ‘oαΊ‘n Δ‘αΊ§u payload nΓ y xΓ­u nhΓ©

  • CΓ‘c bαΊ‘n cΓ³ thể xem mΓ¬nh Δ‘Γ£ break out ra khỏi event khi click vΓ o button(chΓΊ Γ½ dαΊ₯u ngoαΊ·c mΓ¬nh trỏ vΓ o), khi Δ‘Γ³ mΓ¬nh viαΊΏt mα»™t dΓ²ng code JS mα»›i vΓ  chαΊ―c chαΊ―n rαΊ±ng Δ‘oαΊ‘n cuα»‘i payload cα»§a mΓ¬nh sαΊ½ lΓ : ;//";

  • Ở Δ‘Γ’y cΓ‘c bαΊ‘n chỉ cαΊ§n hiểu rαΊ±ng // lΓ  cmt trong JS

TiαΊΏp theo chΓΊng ta sαΊ½ xΓ’y dα»±ng phαΊ§n giα»―a payload, vΓ¬ chΓΊng ta cαΊ§n lαΊ₯y id cα»§a admin(Lα»— hα»•ng XSS nhΓ©) - trang nΓ y khΓ΄ng hề cΓ³ cookie. VαΊ­y lΓ m sao để lαΊ₯y id cα»§a admin?

ChΓΊng ta sαΊ½ sα»­ dα»₯ng document.body.innerHTML - nΓ³ dΓΉng để load hay lΓ  in ra source code cα»§a trang, kiểu nhΖ° nΓ y:

Để nΓ³ gọn lαΊ‘i chΓΊng encodeURIComponent (nΓ³ sαΊ½ encode gαΊ§n hαΊΏt trα»« mα»™t vΓ i kΓ½ tα»± Δ‘αΊ·c biệt) để mαΊ₯t khoαΊ£ng trαΊ―ng vΓ  biαΊΏn nΓ³ thΓ nh mα»™t chuα»—i để chΓΊng ta dα»… encode b64 hΖ‘n =>tΓ³m lαΊ‘i để gọn nΓ³ Δ‘i.

Ở Δ‘Γ’y mΓ¬nh dΓΉng nα»‘i chuα»—i .concat vΓ¬ dαΊ₯u + cΓ³ thể bα»‹ filter Δ‘i...

BΓ’y giờ Δ‘oαΊ‘n payload hoΓ n chỉ sαΊ½ lΓ  nhΖ° nΓ y:

Khi cΓ‘i nΓ y được gα»­i Δ‘i vΓ  trang được load thΓ¬ sα»± kiện trΓͺn sαΊ½ thα»±c thi Δ‘oαΊ‘n mΓ£ trong, nΓ³ rΓ΅ ra lΓ  khi admin nhαΊ₯n vΓ o thΓ¬ Δ‘oαΊ‘n mΓ£ được tα»± load mΓ  admin khΓ΄ng cαΊ§n phαΊ£i αΊ₯n xem note private.

Ở Δ‘Γ’y mΓ¬nh dΓΉng Burp collaborator client để thay cho server request, dΓΉng burp suite để lαΊ₯y link Δ‘α»‹a chỉ cα»§a trang khi mΓ¬nh submit payload kiểu nhΖ° nΓ y:

ĐÒy lΓ  Δ‘α»‹a chỉ trang mΓ¬nh vα»«a submit cΓ³ chα»©a Δ‘oαΊ‘n payload trΓͺn, vΓ  gα»­i link nΓ y cho con bot cα»§a admin.

Đợi mα»™t lΓΊc con bot admin sαΊ½ trαΊ£ về mα»™t Δ‘oαΊ‘n base64 nhΖ° sau:

Sau Δ‘Γ³ decode nΓ³ ra sαΊ½ cΓ³ được id cα»§a admin cαΊ§n lαΊ₯y flag.

Submit lΓͺn cΓ³ ngay flag

Flag: flag{context_dependent_sanitization}

CαΊ£m Ζ‘n mọi người Δ‘Γ£ đọc write up, trΓͺn Δ‘Γ’y lΓ  mα»™t sα»‘ bΓ i mΓ¬nh lΓ m ra trong thời gian thi, mαΊ·c dΓΉ cΓ’u viαΊΏt chΖ°a được tα»‘t nhΖ°ng mΓ¬nh Δ‘Γ£ cα»‘ gαΊ―ng viαΊΏt ra nhα»―ng gΓ¬ mΓ¬nh biαΊΏt. Mong cΓ‘c bαΊ‘n thΓ΄ng cαΊ£m!!!

Last updated