๐ŸฅUbuntu rar - FUSec 2023

Tรดi nhแบญn ฤ‘ฦฐแปฃc vร i thรดng tin sau vแป file:

ELF 64-bit
No canary vร  no pie

Tรดi nghฤฉ khแบฃ nฤƒng cao lร  Buffer Overflow

Sau khi chแบกy chฦฐฦกng trรฌnh tรดi thแบฅy chฦฐฦกng trรฌnh sแบฝ zip cรกc sแป‘ trรนng nhau vร  liแปn kแป nhau lแบกi vร  ฤ‘ฦฐa ra kรญch thฦฐแป›c + vร i thรดng tin ฤ‘แบฑng sau khรกc.

Vรญ dแปฅ nhฦฐ ฤ‘รขy

Analysis

main()

compress_buffer()

compress_single_byte()

hex_dump()

Chฦฐฦกng trรฌnh cรฒn 1 hร m to_byte() nแปฏa nhฦฐng sau khi ฤ‘แปc hแบฟt chฦฐฦกng trรฌnh tรดi thแบฅy nรณ lร  hร m trฦก :v

Nhรฌn vร o thแบฑng oแปŸ ฤ‘รขy, chแบฏc hแบณn bแบกn cลฉng nhรฌn ra lร  nรณ bแป‹ overflow rแป“i :>>

ฤแปƒ mร  o += 2 thรฌ bแบกn phแบฃi hoร n thร nh viแป‡c thแปฑc thi hร m compress_single_byte . Overview tiแบฟp hร m compress_single_byte . Thรฌ bแบกn cรณ thแปƒ thแบฅy hร m nร y xแปญ lรญ cรกc kรญ tแปฑ trรนng lแบทp, nรณ kแบฟt thรบc khi gแบทp kรญ tแปฑ khรกc vแป›i kรญ tแปฑ liแปn trฦฐแป›c vร  return vแป kรญch thฦฐแป›c cแปงa chuแป—i lแบทp ฤ‘รณ.

Vแบญy nแบฟu pรขy giแป tรดi nhแบญp nhฦฐ nร y "abababababab" thรฌ sao?

Rรต rร ng lร  tรดi nhแบญp vร o 13 kรญ tแปฑ nhฦฐng nhแบญn tแป›i 27 kรญ tแปฑ ==> phแบงn output[o] ฤ‘รฃ xแบฃy ra overflow nแบฟu tรดi nhแบญp "ab"*120.

Exploit

Setup payload:

Phแบงn khoanh ฤ‘แป: ฤแป‹a chแป‰ cแปงa output

Phแบงn khoanh vร ng: ฤแป‹a chแป‰ cแปงa buffer

2 phแบงn khoanh xanh: ฤ‘แป‹a chแป‰ return pointer

Tiแบฟn hร nh ghi ฤ‘รจ:

Kแบฟt quแบฃ:

Nhรฌn trรชn kia bแบกn cรณ thแปƒ hรฌnh dung ฤ‘รณ giแป‘ng nhฦฐ 1 cรขu lแป‡nh hex $rsp.Thรฌ cรณ thแปƒ thแบฅy phแบงn output cแปงa tรดi ฤ‘รฃ bแป‹ ngแบฏt quรฃng, vร  nรณ ฤ‘รฃ tiแบฟn hร nh ghi ฤ‘รจ tiแบฟp xuแป‘ng dฦฐแป›i vร o phแบงn buffer ban ฤ‘แบงu.

Vแบญy ฤ‘iแปu gรฌ ฤ‘รฃ xแบฃy ra?

Sau khi ฤ‘แปƒ รฝ kฤฉ hฦกn thรฌ tรดi thแบฅy thแบฑng o ฤ‘รฃ bแป‹ ghi ฤ‘รจ ---> sแปฑ thay ฤ‘แป•i index ---> ghi ฤ‘รจ khรดng ฤ‘รบng รฝ muแป‘n. ฤรณ lร  lรญ do nรณ nhแบฃy xuแป‘ng dฦฐแป›i phแบงn buffer vร  ghi ฤ‘รจ tiแบฟp.

Chแป‰nh 1 xรญu แปŸ payload:

Chฦฐa cแบงn quan tรขm 5 dรฒng ฤ‘แบงu, hรฃy nhรฌn tแปซ dรฒng thแปฉ 6. Tรดi ฤ‘รฃ chแป‰nh kรญch thฦฐแป›c cแปงa payload nร y sao cho: dร i 240 bytes buffer vร  dร i 248 bytes output.

bytes thแปฉ 249 chรญnh lร  bytes ghi ฤ‘รจ biแบฟn o, vร  tรดi sแบฝ ghi ฤ‘รจ nรณ thร nh index cแปงa ret pointer ฤ‘แปƒ ghi ฤ‘รจ nรชn nรณ.

stack trฦฐแป›c khi ghi ฤ‘รจ o
stack sau khi ghi ฤ‘รจ o

Biแบฟn o bรขy giแป cรณ giรก trแป‹ lร  hex 0x106 == vแป‹ trรญ cแปงa <main+204>

Bรขy giแป tรดi cรณ thแปƒ return vแป mแป™t chแป— tรนy รฝ. Do trรชn file elf cรณ gadget quan trแปng nhฦฐ pop rdi nhฦฐng khรดng cรกc hร m system, sh nรชn tรดi sแบฝ phแบฃi dรนng kฤฉ thuแบญt ret2plt mแปฅc ฤ‘รญch ฤ‘แปƒ leak libc address sau ฤ‘รณ dรนng nรณ ฤ‘แปƒ khai thรกc.

ฤรขy lร  thแปฉ bแบกn cแบงn

Xแปญ lรญ byte leak vร  rแป“i hรฃy lร m tiแบฟp tฦฐฦกng tแปฑ nhฦฐ trรชn sau khi return vแป main 1 lแบงn nแปฏa.

Oke
Done

QUOTE: Khi lร m bร i overflow, thรฌ phแบฃi biแบฟt ฤ‘ฦฐแปฃc lร  nรณ overflow chแปฉ ฤ‘แปซng cแบฏm ฤ‘แบงu vร o over - Sifu

Last updated