House of Orange

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

Basic Information

Code

Goal

  • malloc_printerr ํ•จ์ˆ˜ ์•…์šฉ

Requirements

  • ์ƒ์œ„ ์ฒญํฌ ํฌ๊ธฐ ๋ฎ์–ด์“ฐ๊ธฐ
  • Libc ๋ฐ ํž™ ๋ˆ„์ˆ˜

Background

์ด ์˜ˆ์ œ์—์„œ ํ•„์š”ํ•œ ๋ฐฐ๊ฒฝ:

๋ฌธ์ œ๋Š”, ์ด์ „ ๋ฒ„์ „์˜ libc์—์„œ malloc_printerr ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด _IO_list_all์— ์ €์žฅ๋œ _IO_FILE ๊ตฌ์กฐ์ฒด ๋ชฉ๋ก์„ ๋ฐ˜๋ณตํ•˜๊ณ  ์‹ค์ œ๋กœ ๊ทธ ๊ตฌ์กฐ์ฒด์˜ ๋ช…๋ น์–ด ํฌ์ธํ„ฐ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด ๊ณต๊ฒฉ์€ ๊ฐ€์งœ _IO_FILE ๊ตฌ์กฐ์ฒด๋ฅผ ์œ„์กฐํ•˜์—ฌ _IO_list_all์— ๊ธฐ๋กํ•˜๊ณ  malloc_printerr๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ _IO_FILE ๊ตฌ์กฐ์ฒด์˜ ์ ํ”„ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ ์ฃผ์†Œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Attack

๊ณต๊ฒฉ์€ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋นˆ ๋‚ด์—์„œ ์ƒ์œ„ ์ฒญํฌ๋ฅผ ์–ป๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ˜„์žฌ ์ƒ์œ„ ์ฒญํฌ ํฌ๊ธฐ๋ณด๋‹ค ํฌ์ง€๋งŒ mmp_.mmap_threshold(๊ธฐ๋ณธ๊ฐ’์€ 128K)๋ณด๋‹ค ์ž‘์€ ํฌ๊ธฐ๋กœ malloc์„ ํ˜ธ์ถœํ•˜์—ฌ ๋‹ฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ƒ์œ„ ์ฒญํฌ ํฌ๊ธฐ๊ฐ€ ์ˆ˜์ •๋  ๋•Œ๋งˆ๋‹ค ์ƒ์œ„ ์ฒญํฌ + ํฌ๊ธฐ๊ฐ€ ํŽ˜์ด์ง€ ์ •๋ ฌ๋˜๊ณ  prev_inuse ๋น„ํŠธ๊ฐ€ ํ•ญ์ƒ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋นˆ ๋‚ด์—์„œ ์ƒ์œ„ ์ฒญํฌ๋ฅผ ์–ป์œผ๋ ค๋ฉด, ์ƒ์œ„ ์ฒญํฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ฒญํฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ , ํ• ๋‹น๋œ ์ฒญํฌ์—์„œ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ํ†ตํ•ด ์ƒ์œ„ ์ฒญํฌ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ƒ์œ„ ์ฒญํฌ + ํฌ๊ธฐ๊ฐ€ ํŽ˜์ด์ง€ ์ •๋ ฌ๋˜๊ณ  prev_inuse ๋น„ํŠธ๊ฐ€ ์„ค์ •๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ƒˆ๋กœ์šด ์ƒ์œ„ ์ฒญํฌ ํฌ๊ธฐ๋ณด๋‹ค ํฐ ์ฒญํฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. free๋Š” ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋นˆ์œผ๋กœ ์ƒ์œ„ ์ฒญํฌ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”.

์ด์ œ ์ด์ „ ์ƒ์œ„ ์ฒญํฌ๊ฐ€ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋นˆ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์•ˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด(์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ์œ ๋ฐœํ•œ ์ทจ์•ฝ์ ์œผ๋กœ ์ธํ•ด ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Œ), libc ์ฃผ์†Œ๋ฅผ ๋ˆ„์ถœํ•˜๊ณ  _IO_list_all์˜ ์ฃผ์†Œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋นˆ ๊ณต๊ฒฉ์€ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ์•…์šฉํ•˜์—ฌ topChunk->bk->fwd = _IO_list_all - 0x10์„ ์ž‘์„ฑํ•จ์œผ๋กœ์จ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์ฒญํฌ๊ฐ€ ํ• ๋‹น๋˜๋ฉด ์ด์ „ ์ƒ์œ„ ์ฒญํฌ๊ฐ€ ๋ถ„ํ• ๋˜๊ณ , ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋นˆ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ **_IO_list_all**์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์ด์ „ ์ƒ์œ„ ์ฒญํฌ์˜ ํฌ๊ธฐ๋ฅผ 0x61๋กœ ์ค„์—ฌ ์ž‘์€ ๋นˆ์— ๋งž์ถ”๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋‘ ๊ฐ€์ง€ ๋ชฉ์ ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:

  1. ์ž‘์€ ๋นˆ 4์— ์‚ฝ์ž…: malloc์ด ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋นˆ์„ ์Šค์บ”ํ•  ๋•Œ ์ด ์ฒญํฌ๋ฅผ ๋ณด๊ณ  ์ž‘์€ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์€ ๋นˆ 4์— ์‚ฝ์ž…ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ฒญํฌ๊ฐ€ **_IO_list_all**์˜ FD ํฌ์ธํ„ฐ๊ฐ€ ์žˆ๋Š” ์ž‘์€ ๋นˆ 4 ๋ชฉ๋ก์˜ ๋จธ๋ฆฌ์— ์œ„์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  2. Malloc ์ฒดํฌ ํŠธ๋ฆฌ๊ฑฐ: ์ด ์ฒญํฌ ํฌ๊ธฐ ์กฐ์ž‘์€ malloc์ด ๋‚ด๋ถ€ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ํฌ์›Œ๋“œ ์ฒญํฌ์˜ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•  ๋•Œ, ์ด๋Š” 0์ด ๋˜์–ด ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  malloc_printerr๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์ž‘์€ ๋นˆ์˜ ์กฐ์ž‘์€ ์ฒญํฌ์˜ ํฌ์›Œ๋“œ ํฌ์ธํ„ฐ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. _IO_list_all๊ณผ์˜ ๊ฒน์นจ์€ ๊ฐ€์งœ _IO_FILE ๊ตฌ์กฐ์ฒด๋ฅผ ์œ„์กฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ์ฒด๋Š” _IO_write_base ๋ฐ _IO_write_ptr์™€ ๊ฐ™์€ ์ฃผ์š” ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋„๋ก ์‹ ์ค‘ํ•˜๊ฒŒ ์ œ์ž‘๋˜๋ฉฐ, libc์˜ ๋‚ด๋ถ€ ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๊ฐ’์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๊ฐ€์งœ ๊ตฌ์กฐ์ฒด ๋‚ด์— ์ ํ”„ ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋˜์–ด ์ž„์˜์˜ ์ฝ”๋“œ(์˜ˆ: system ํ•จ์ˆ˜)๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์†Œ์— ๋ช…๋ น์–ด ํฌ์ธํ„ฐ๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์„ ์š”์•ฝํ•˜๋ฉด:

  • ์ด์ „ ์ƒ์œ„ ์ฒญํฌ ์ถ•์†Œ: ์ด์ „ ์ƒ์œ„ ์ฒญํฌ์˜ ํฌ๊ธฐ๋ฅผ 0x61๋กœ ์กฐ์ •ํ•˜์—ฌ ์ž‘์€ ๋นˆ์— ๋งž์ถฅ๋‹ˆ๋‹ค.
  • ๊ฐ€์งœ _IO_FILE ๊ตฌ์กฐ์ฒด ์„ค์ •: ์ด์ „ ์ƒ์œ„ ์ฒญํฌ์™€ ๊ฐ€์งœ _IO_FILE ๊ตฌ์กฐ์ฒด๊ฐ€ ๊ฒน์น˜๋„๋ก ํ•˜๊ณ  ํ•„๋“œ๋ฅผ ์ ์ ˆํžˆ ์„ค์ •ํ•˜์—ฌ ์‹คํ–‰ ํ๋ฆ„์„ ํƒˆ์ทจํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋นˆ์— ํ˜„์žฌ ์žˆ๋Š” ์ด์ „ ์ƒ์œ„ ์ฒญํฌ์™€ ๊ฒน์น˜๋Š” ๊ฐ€์งœ _IO_FILE ๊ตฌ์กฐ์ฒด๋ฅผ ์œ„์กฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ์ฒด์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ”์ดํŠธ๋Š” ์‹คํ–‰๋  ๋ช…๋ น์–ด(์˜ˆ: โ€œ/bin/shโ€)์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ํฌํ•จํ•˜๋„๋ก ์‹ ์ค‘ํ•˜๊ฒŒ ์ œ์ž‘๋ฉ๋‹ˆ๋‹ค.

๊ฐ€์งœ _IO_FILE ๊ตฌ์กฐ์ฒด์˜ ์ฃผ์š” ํ•„๋“œ์ธ _IO_write_base ๋ฐ _IO_write_ptr๋Š” libc์˜ ๋‚ด๋ถ€ ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๊ฐ’์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๊ฐ€์งœ ๊ตฌ์กฐ์ฒด ๋‚ด์— ์ ํ”„ ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋˜์–ด ์ž„์˜์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์†Œ์— ๋ช…๋ น์–ด ํฌ์ธํ„ฐ๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Š” system ํ•จ์ˆ˜ ๋˜๋Š” ์…ธ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ณต๊ฒฉ์€ malloc ํ˜ธ์ถœ์ด ์กฐ์ž‘๋œ _IO_FILE ๊ตฌ์กฐ์ฒด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ํ•  ๋•Œ ์ ˆ์ •์— ๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ž„์˜์˜ ์ฝ”๋“œ ์‹คํ–‰์„ ํšจ๊ณผ์ ์œผ๋กœ ํ—ˆ์šฉํ•˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ์…ธ์ด ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์•…์„ฑ ํŽ˜์ด๋กœ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.

๊ณต๊ฒฉ ์š”์•ฝ:

  1. ์ƒ์œ„ ์ฒญํฌ ์„ค์ •: ์ฒญํฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ์ƒ์œ„ ์ฒญํฌ ํฌ๊ธฐ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ƒ์œ„ ์ฒญํฌ๋ฅผ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋นˆ์œผ๋กœ ๊ฐ•์ œ ์ด๋™: ๋” ํฐ ์ฒญํฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
  3. libc ์ฃผ์†Œ ๋ˆ„์ถœ: ์ทจ์•ฝ์ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋นˆ์—์„œ ์ฝ์Šต๋‹ˆ๋‹ค.
  4. ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋นˆ ๊ณต๊ฒฉ ์ˆ˜ํ–‰: ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ _IO_list_all์— ์”๋‹ˆ๋‹ค.
  5. ์ด์ „ ์ƒ์œ„ ์ฒญํฌ ์ถ•์†Œ: ์ž‘์€ ๋นˆ์— ๋งž๋„๋ก ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  6. ๊ฐ€์งœ _IO_FILE ๊ตฌ์กฐ์ฒด ์„ค์ •: ์ œ์–ด ํ๋ฆ„์„ ํƒˆ์ทจํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์งœ ํŒŒ์ผ ๊ตฌ์กฐ์ฒด๋ฅผ ์œ„์กฐํ•ฉ๋‹ˆ๋‹ค.
  7. ์ฝ”๋“œ ์‹คํ–‰ ํŠธ๋ฆฌ๊ฑฐ: ๊ณต๊ฒฉ์„ ์‹คํ–‰ํ•˜๊ณ  ์ž„์˜์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ฒญํฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ํž™ ๊ด€๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜, libc ์ •๋ณด ๋ˆ„์ˆ˜ ๋ฐ ํž™ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ์•…์šฉํ•˜์—ฌ free๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ ์‹คํ–‰์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์งœ _IO_FILE ๊ตฌ์กฐ์ฒด๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ์ œ์ž‘ํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ๋ฐฐ์น˜ํ•จ์œผ๋กœ์จ, ๊ณต๊ฒฉ์€ ํ‘œ์ค€ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์ž‘์—… ์ค‘์— ์ œ์–ด ํ๋ฆ„์„ ํƒˆ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ž„์˜์˜ ์ฝ”๋“œ ์‹คํ–‰์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ, ์ž ์žฌ์ ์œผ๋กœ ์…ธ์ด๋‚˜ ๋‹ค๋ฅธ ์•…์„ฑ ํ™œ๋™์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

References

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ