Page cover

๐Ÿ˜žPwn06 - Ez_Fmt_str

Challenge

3 file mร  mรฌnh nhแบญn ฤ‘ฦฐแปฃc:

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

Script

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

ฤoแบกn trรชn ฤ‘รฃ chแบทn chแบฏc format quan trแปng nhฦฐ:| %s | %p | %x | ==> Vแบญy nรชn chแป‰ cรฒn %n vร  %c dรนng ฤ‘แปƒ ghi ฤ‘รจ

ฤแปƒ 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:

Phแบงn nร y tรดi sแบฝ giแบฃi thรญch 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ร :

triangle-exclamation

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:

triangle-exclamation

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:

triangle-exclamation

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:

Thay ฤ‘แป•i ฤ‘แป‹a chแป‰ แปŸ mร u xanh thร nh main+100(nแบฟu ko sแบฝ bแป‹ ngแบฏt) vร  mร u ฤ‘แป sแบฝ thร nh %19$p

Payload ฤ‘แปƒ thแปฑc hiแป‡n phแบงn nร y:

triangle-exclamation

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:

triangle-exclamation

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