✏️[Root me] Writeup Sever Side

Mở Δ‘αΊ§u

ĐÒy lΓ  trang write up về challenges root me về sever side. MαΊ·c dΓΉ hiện tαΊ‘i cΓ³ rαΊ₯t nhiều người write up về root me nhΖ°ng mΓ¬nh vαΊ«n muα»‘n lΓ m vΓ  write up lαΊ‘i để mα»™t phαΊ§n nhα»› kiαΊΏn thα»©c. NΓ³ mang theo kiểu note lΓ  chΓ­nh. [Mα»©c Δ‘α»™ Medium trở lΓͺn _ Π½ΠΎ Π½Π΅ всС]

JSON Web Token (JWT) - Introduction

Khi vΓ o trang web chΓΊng ta sαΊ½ cΓ³ mα»™t form Δ‘Δƒng nhαΊ­p nhΖ° sau:

Ở Δ‘Γ’y chΓΊng ta sαΊ½ login nhΖ° lΓ  khΓ‘ch, sau khi login được tΓ i khoαΊ£n khΓ‘ch chΓΊng ta sαΊ½ check cookie xem cΓ³ gΓ¬.

Ở Δ‘Γ’y mΓ¬nh nhαΊ­n ra cookie cΓ³ sα»­ dα»₯ng jwt, thΓ¬ mΓ¬nh thα»­ decode xem nΓ³ nhΖ° nΓ o.

Ở Δ‘Γ’y mΓ¬nh check tool jwt nhΖ°ng khΓ΄ng thể cΓ³ được secret nΓ o nΓͺn mΓ¬nh set lαΊ‘i jwt bαΊ±ng cΓ‘ch khΓ΄ng sα»­ dα»₯ng algorithm

ĐoαΊ‘n code trΓͺn sαΊ½ nhΖ° nΓ y:

Thay thαΊΏ cookie hiện tαΊ‘i ta cΓ³ flag

JSON Web Token (JWT) - Weak secret

Ở bΓ i nΓ y nhΖ° tiΓͺu đề thΓ¬ lΓ  weak secret mΓ¬nh cΓ³ thαΊ» brute foce được secret.

ChΓΊng ta truy cαΊ­p /token cΓ³ mΓ£ token nhΖ° trΓͺn:

MΓ¬nh dΓΉng tool jwt để brute foce secret mΓ£ trΓͺn:

Ở Δ‘Γ’y mΓ¬nh cΓ³ được secret bαΊ―t Δ‘αΊ§u encode mα»™t token vα»›i role:admin

Oke bay giờ post nΓ³ lΓͺn vΓ  thΓͺm Authorization để xΓ‘c nhαΊ­n lΓ  xong.

JWT - Revoked token

Ở bΓ i nΓ y cho sαΊ΅n code để phΓ’n tΓ­ch.

ChΓΊng ta sαΊ½ phΓ’n tΓ­ch Δ‘oαΊ‘n code nΓ y nhΖ° sau:

  1. ĐoαΊ‘n code trΓͺn cΓ³ 3 hΓ m quan trọng Δ‘Γ³ lΓ :

** -> nhΖ° Δ‘Γ£ nΓ³i ở trΓͺn rαΊ±ng token sαΊ½ cΓ³ hαΊ‘n lΓ  3p nhΖ°ng cΓ³ Δ‘iều lΓ  khi token được tαΊ‘o ra Δ‘Γ£ bα»‹ add vΓ o blacklist.

ChΓΊ Γ½ cΓ‘ch tαΊ‘o token JWT header.payload.signature

Ở Δ‘Γ’y cαΊ§n chΓΊ Γ½ tα»›i cΓ‘ch tαΊ‘o ra signature:

Ở Δ‘Γ’y theo gợi Γ½ ở metarial trang root-me cho thΓ¬ cΓ³ thể bypass bαΊ±ng cΓ‘ch dΓΉng kΓ½ tα»± non-alphabet nhΖ°ng ở Δ‘Γ’y chΓΊng ta thαΊ₯y rαΊ±ng signature được base64urlEncode() . ThΓ¬ trong base64 thường cΓ³ dαΊ₯u = kαΊΏt thΓΊc ở cuα»‘i mΓ  mΓ¬nh nhαΊ­n ra dΓΉ bαΊ‘n thΓͺm hay bα»›t dαΊ₯u = thΓ¬ nΓ³ vαΊ«n decode ra mα»™t giΓ‘ trα»‹.

VΓ­ dα»₯ nhΖ°: aG9haG9uZ2Rv= vΓ  aG9haG9uZ2Rv đều decode ra hoahongdo

Oke bΓ’y giờ thΓͺm Authorization header vΓ  thΓͺm dαΊ₯u = ở cuα»‘i JWT hoαΊ·c mα»™t non-alphabet nhΖ° tiαΊΏng Nga(Π»), tiΓͺng Trung...

PHP - assert()

BΓ i nΓ y cΓ³ lα»— hα»•ng LFI nhΓ¬n qua khi mΓ¬nh thα»­ xem đọc được file passwd khΓ΄ng thΓ¬ nΓ³ hiện ra nhΖ° nΓ y:

Ở Δ‘Γ’y hiện ra hai hΓ m assert() vΓ  strpos(). Trong Δ‘Γ³ hΓ m assert() kiểm tra Δ‘αΊ§u vΓ o vΓ  trαΊ£ về giΓ‘ trα»‹ bool. NαΊΏu kαΊΏt quαΊ£ lΓ  fallse thΓ¬ nΓ³ sαΊ½ thα»±c hiện nΓ©m lα»—i ra. CΓ²n hΓ m strpos() dΓΉng để tΓ¬m vα»‹ trΓ­ xuαΊ₯t hiện Δ‘αΊ§u tiΓͺn cα»§a chuα»—i con trong chuα»—i cha.

Đối vα»›i hΓ m assert() thΓ¬ cΓ³ hai tham sα»‘ assert(mixed $assertion, Throwable $exception = ?): bool nαΊΏu mΓ  nΓ³ check $assertion false thΓ¬ sαΊ½ nΓ©m ra $exception, cΓ²n Δ‘α»‘i vα»›i hΓ m cΕ©ng thể strpos( $str, $char, $position) .

ChΓΊ Γ½ rαΊ±ng khi Δ‘ΓΊng tra truyền ../../../etc/passwd thΓ¬ thαΊ₯y rαΊ±ng chΓΊng ta cΓ³ thể inject được dΓ²ng code.

Code PHP ở dΓ²ng cΓ³ thể lΓ :

assert("strpos('includes/$file.php', '..') === false") or die("Detected hacking attempt!");

Payload lΓΊc nΓ y sαΊ½ lΓ : ','')+or+die(show_source('.passwd'));//

LΓΊc Δ‘Γ³ Δ‘oαΊ‘n code:

Show_source file .passwd

PHP - Apache configuration

Last updated