๐Pwn06 - Ez_Fmt_str
Challenge
Challenge3 file mร mรฌnh nhแบญn ฤฦฐแปฃc:

Patched nรณ trฦฐแปc tiรชn.

Script
Script 

Ta xem qua source cแปงa nรณ thรฌ nรณ tแปซ chแปi nhแปฏng kรญ tแปฑ sau ฤรขy:


ฤแป lร m ฤฦฐแปฃc cรกc dแบกng bร i format strings nhฦฐ nร y thรฌ cแบงn phแบฃi leak ฤฦฐแปฃc stack, leak ฤฦฐแปฃc libc
Cแปฅ thแป thรฌ tรดi sแบฝ follow nรณ nhฦฐ sau
Bฦฐแปc 1: Xรกc ฤแปnh con trแป trแบฃ vแป


Xem kฤฉ hฦกn thรฌ ta thแบฅy ฤฦฐแปฃc 2 con trแป cแบงn thiแบฟt cho viแปc khai thรกc nร y nรณ แป vแป trรญ offset thแปฉ 21(0x78), 36(0xf0) vร 49(0x158).
Bฦฐแปc 2: Leak ฤแปa chแป stack vร libc
ฤแป leak ฤฦฐแปฃc 1 ฤแปa chแป nร o ฤรณ ra bรชn ngoร i ta buแปc phแบฃi sแปญ dแปฅng %p. Mร %p ฤang bแป restrict bแปi hร m restrict vแบญy tรดi sแบฝ chแปn cรกch ghi ฤรจ nhฦฐ sau:

Nhฦฐng ฤแป ghi ฤรจ ฤฦฐแปฃc thรฌ ta phแบฃi cรณ ฤแปa chแป cแปงa stack:
Do ฤแปa chแป cแปงa stack chแป khรกc nhau แป cรกc 2 bytes cuแปi. Vแบญy nรชn tรดi sแบฝ brute force 1 chรบt.
Biแบฟt ฤฦฐแปฃc 2 bytes cuแปi thรดng qua format %c

Vแบญy payload ฤแป tรดi leak sแบฝ lร :
ฤoแบกn payload trรชn sแบฝ leak ra 1 byte cuแปi cรนng cแปงa ฤแปa chแป trรชn stack.
Tiแบฟp ฤแบฟn lร guessing nhฦฐng tรดi sแบฝ guessing phแบงn input:


Bรขy giแป tรดi sแบฝ ghi ฤรจ con trแป ฤแบฑng sau input (cแปฅ thแป lร input + 0x20 - trรกnh trฦฐแปng hแปฃp bแป lแปi vร thay ฤแปi ฤแบงu vร o) vร o offset 21 trฦฐแปc vร tiแบฟn hร nh ghi byte "1" vร o offset 49. Sau ฤรณ leak ra offset (input + 0x20) vร kiแปm tra xem nรณ cรณ bแบฑng byte "1" hay khรดng. Nแบฟu bแบฑng thรฌ in ra guess byte ฤรณ. Phแบงn nร y sแบฝ lร m ฤiแปu ฤรณ:

Vร tรดi ฤรฃ biแบฟt ฤฦฐแปฃc 2 bytes cuแปi
![]()
ฤแป รฝ 1 xรญu nแปฏa thรฌ bแบกn cรณ thแป tรฌm kiแบฟm ra con trแป trแบฃ vแป แป hร m printf:

Nรณ nแบฑm ngay trรชn input (guess_byte-0x8).
Vร cรณ 1 bแป ฤรดi con trแป biแบฟn mรดi trฦฐแปng nแปฏa nhฦฐ แบฃnh sau:

Thแปฉ tแปฑ cแปงa 2 con trแป nร y lแบงn lฦฐแปฃt lร : offset 0xf8 (37) vร 0x168 (51)
Kแบฟt hแปฃp 2 ฤiแปu trรชn, tรดi sแบฝ tแบกo ra 3 payload cรณ chแปฉc nฤng nhแบฃy qua hร m restricted_filter vร ghi ฤรจ con trแป %p vร o trong payload ฤแป cรณ thแป leak ra ฤแปa chแป nhฦฐ sau:

Sau khi payload trรชn ฤฦฐแปฃc thแปฑc hiแปn, nรณ sแบฝ thแปฑc hiแปn leak ra ฤแปa chแป แป offset 49 vร thay ฤแปi main+117 thร nh main+100
Vร pรขy giแป printf sแบฝ ฤฦฐแปฃc gแปi 1 lแบงn nแปฏa vร leak ra ฤแปa chแป cแปงa stack:


Thรชm 4 dรฒng nร y vร o sแบฝ giรบp tรดi lแบฅy ra ฤฦฐแปฃc ฤแปa chแป cแปงa stack.
OKE, vแบญy tรดi ฤรฃ leak ฤฦฐแปฃc ฤแปa chแป cแปงa stack, ฤแปa chแป tiแบฟp theo tรดi muแปn leak ฤรณ lร ฤแปa chแป cแปงa libc.
Lร m tฦฐฦกng tแปฑ vแปi cรกch leak cแปงa stack

Tรดi sแบฝ tiแบฟn hร nh leak ra ฤแปa chแป cแปงa offset 19.
Payload cแปงa tรดi sแบฝ kแบฟt hแปฃp nhฦฐ sau:

Payload ฤแป thแปฑc hiแปn phแบงn nร y:
Giแบฃi thรญch 1 chรบt:
แป dรฒng 6: tรดi sแปญ dแปฅng
guess_byte+6vรฌ offset thแปฉ 6 cแปงa nรณ ban ฤแบงu lร %10$p(sแป 0 lร offset 6 ฤรณ) nรชn tรดi ghi luรดn vร o ฤแบฅy ฤแป trรกnh phแบฃi ghi quรก nhiแปu dแปฏ liแปu lรชn server vร sau khi payload ฤฦฐแปฃc printf, nรณ sแบฝ chuyแปn thร nh %19$pljust(0x20, b"\0")sแบฝ padding cho payload cแปงa tรดi trรกnh trฦฐแปng hแปฃp lแปn xแปn dแปฏ liแปu do thแปซa hoแบทc thiแบฟu byte.stack-8ฤฦฐแปฃc thรชm vร o ฤแป khi rip = ret cแปงa printf nรณ sแบฝ lร con trแปmain+100vแปซa ฤฦฐแปฃc ghi vร o offset 37 nแบฟu khรดng nรณ sแบฝ vแบซn giแปฏ nguyรชn lรmain+117vร sau ฤรณ lแบกi exit nhฦฐ แบฃnh bรชn dฦฐแปi.

Sau khi leak ฤฦฐแปฃc 2 ฤแปa chแป quan trแปng lร buffer(con trแป input) vร ฤแปa chแป libc thรฌ tรดi sแบฝ tiแบฟn hร nh ghi cรกc rop vร o ฤแป thแปฑc thi.
RCE
Sau khi leak xong ฤแปa chแป libc thรฌ tรดi nhแบญn ฤฦฐแปฃc chuแปi stack sau ฤรขy:

Tรดi sแบฝ sแปญ dแปฅng 2 con trแป nร y ฤแป thao tรกc:

Giแบฃi thรญch:
trฦฐแปc tiรชn thรฌ khi nhแบญn vร o bแบฑng hร m fgets, nรณ sแบฝ ฤแบฉy con trแป แป ฤแปa chแป address lรชn trฦฐแปc tแบกi vแป trรญ offset 10 (
input+0x20), sau ฤรณ tฤng 2 bytes/lแบงn vร ghi tแปng cแปng 3 lแบงn 2 byte vร 1 lแบงn 2 bytes 0sau ฤรณ nรณ sแบฝ ghi giรก trแป cแปงa value lแบงn lฦฐแปฃt 2 bytes vร o offset thแปฉ 10(
input+0x20)
Payload nร y sแบฝ tแบกo ra 2 con trแป(nhฦฐ แบฃnh bแบกn thแบฅy แป trรชn) vร sau ฤรณ chแปnh sแปญa nรณ thร nh cรกc giรก trแป ROP.
Sau khi ghi thรฌ ta sแบฝ ฤฦฐแปฃc chuแปi rop nhฦฐ nร y:

Nhฦฐng bรขy giแป con trแป return cแปงa printf khรดng trแป ฤแบฟn chuแปi rop mร chรบng ta vแปซa ghi, vแบญy nรชn tรดi sแบฝ chแปnh sแปญa vร cho nรณ trแบฃ vแป rop gadget: add rsp, 0x68 ; ret
Phแบงn nร y sแบฝ giรบp bแบกn sแปญa nรณ:
Vร hร m generate payload cแปงa nรณ lร :
Tแปng kแบฟt lแบกi thรฌ tรดi cรณ payload nhฦฐ sau:
Vร tรดi nhแบญn ฤฦฐแปฃc:

Code chแบกy 1 vร i lแบงn cรณ thแป bแป lแปi, nhฦฐng vแบซn sแบฝ ra. ๐ซค
1 vร i thแปฉ thรบ vแป mร tรดi nhแบญn ฤฦฐแปฃc:
ฤรณ lร viแปc cรณ thแป ฤiแปu khiแปn cรกc con trแป mรดi trฦฐแปng, nรณ khรดng phแบฃi lร cแป ฤแปnh.
Khi cรณ 1 hร m nhแบญp dแปฏ liแปu vร 1 hร m in dแปฏ liแปu(lแป hแปng) thรฌ ta cรณ thแป chรจn thรชm bแบฅt cแปฉ ฤแปa chแป nร o ฤแบฑng sau chuแปi format sau ฤรณ chuแปi format cรณ thแป sแปญa ฤแปi chรญnh ฤแปa chแป mร ta vแปซa nhแบญp vร o ฤรณ.
Hoแบทc ta cรณ thแป chแปnh sแปญa giรก trแป trong cรกc ฤแปa chแป sau ฤรณ cรณ thแป dรนng
%{offset}$cฤแป leak ra, sau ฤรณ so sรกnh giรก trแป chแปnh sแปญa chรบng ฤแป kiแปm tra tรญnh ฤรบng ฤแบฏn
Reading funny!!!
Last updated
