House of Force
Reading time: 4 minutes
tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
Basic Information
Code
- ์ด ๊ธฐ์ ์ ํจ์น๋์์ต๋๋ค (์ฌ๊ธฐ) ๊ทธ๋ฆฌ๊ณ ์ด ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค:
malloc(): corrupted top size
- ์ํ์ ๋ค๋ฉด ์ฌ๊ธฐ์ ์ฝ๋๋ฅผ ์๋ํด ๋ณด์ค ์ ์์ต๋๋ค.
Goal
- ์ด ๊ณต๊ฒฉ์ ๋ชฉํ๋ ํน์ ์ฃผ์์ ์ฒญํฌ๋ฅผ ํ ๋นํ ์ ์๋ ๊ฒ์ ๋๋ค.
Requirements
- ์๋จ ์ฒญํฌ ํค๋์ ํฌ๊ธฐ๋ฅผ ๋ฎ์ด์ธ ์ ์๋ ์ค๋ฒํ๋ก์ฐ (์: -1).
- ํ ํ ๋น์ ํฌ๊ธฐ๋ฅผ ์ ์ดํ ์ ์์ด์ผ ํฉ๋๋ค.
Attack
๊ณต๊ฒฉ์๊ฐ ์ฃผ์ P์ ์ฒญํฌ๋ฅผ ํ ๋นํ์ฌ ์ฌ๊ธฐ์ ๊ฐ์ ๋ฎ์ด์ฐ๊ณ ์ ํ๋ค๋ฉด, ๊ทธ๋ ์๋จ ์ฒญํฌ ํฌ๊ธฐ๋ฅผ -1
๋ก ๋ฎ์ด์ฐ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค (์๋ง๋ ์ค๋ฒํ๋ก์ฐ๋ฅผ ํตํด). ์ด๋ malloc์ด ์ด๋ค ํ ๋น์ ์ํด mmap์ ์ฌ์ฉํ์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ์๋จ ์ฒญํฌ๋ ํญ์ ์ถฉ๋ถํ ๊ณต๊ฐ์ ๊ฐ์ง ๊ฒ์
๋๋ค.
๊ทธ๋ฐ ๋ค์, ์๋จ ์ฒญํฌ์ ์ฃผ์์ ํ ๋นํ ๋์ ๊ณต๊ฐ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ด๋ ํด๋น ํฌ๊ธฐ๋ก malloc์ด ์ํ๋์ด ์๋จ ์ฒญํฌ๋ฅผ ๊ทธ ์์น๋ก ์ด๋์ํค๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฐจ์ด/ํฌ๊ธฐ๋ฅผ ์ฝ๊ฒ ๊ณ์ฐํ ์ ์์ต๋๋ค:
// From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5
/*
* The evil_size is calulcated as (nb is the number of bytes requested + space for metadata):
* new_top = old_top + nb
* nb = new_top - old_top
* req + 2sizeof(long) = new_top - old_top
* req = new_top - old_top - 2sizeof(long)
* req = target - 2sizeof(long) - old_top - 2sizeof(long)
* req = target - old_top - 4*sizeof(long)
*/
๋ฐ๋ผ์ target - old_top - 4*sizeof(long)
์ ํฌ๊ธฐ๋ฅผ ํ ๋นํ๋ฉด(4๊ฐ์ long์ ์๋จ ์ฒญํฌ์ ๋ฉํ๋ฐ์ดํฐ์ ํ ๋น๋ ์ ์ฒญํฌ์ ๋ฉํ๋ฐ์ดํฐ ๋๋ฌธ์
๋๋ค) ์๋จ ์ฒญํฌ๊ฐ ์ฐ๋ฆฌ๊ฐ ๋ฎ์ด์ฐ๊ณ ์ ํ๋ ์ฃผ์๋ก ์ด๋ํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์, ๋์ ์ฃผ์์์ ์ฒญํฌ๋ฅผ ์ป๊ธฐ ์ํด ๋ ๋ค๋ฅธ malloc์ ์ํํฉ๋๋ค.
References & Other Examples
- https://github.com/shellphish/how2heap/tree/master
- https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_force/
- https://heap-exploitation.dhavalkapil.com/attacks/house_of_force
- https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c
- https://guyinatuxedo.github.io/41-house_of_force/house_force_exp/index.html
- https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_force/#hitcon-training-lab-11
- ์ด ์๋๋ฆฌ์ค์ ๋ชฉํ๋ ret2win์ผ๋ก, ret2win ํจ์์ ์ฃผ์์ ์ํด ํธ์ถ๋ ํจ์์ ์ฃผ์๋ฅผ ์์ ํด์ผ ํฉ๋๋ค.
- ์ด ๋ฐ์ด๋๋ฆฌ๋ ์๋จ ์ฒญํฌ ํฌ๊ธฐ๋ฅผ ์์ ํ ์ ์๋ ์ค๋ฒํ๋ก์ฐ๊ฐ ์์ผ๋ฉฐ, ์ด๋ -1 ๋๋ p64(0xffffffffffffffff)๋ก ์์ ๋ฉ๋๋ค.
- ๊ทธ๋ฐ ๋ค์, ๋ฎ์ด์ธ ํฌ์ธํฐ๊ฐ ์กด์ฌํ๋ ์์น์ ์ฃผ์๋ฅผ ๊ณ์ฐํ๊ณ , ํ์ฌ ์๋จ ์ฒญํฌ์ ์์น์์ ๊ทธ๊ณณ๊น์ง์ ์ฐจ์ด๋ฅผ
malloc
์ผ๋ก ํ ๋นํฉ๋๋ค. - ๋ง์ง๋ง์ผ๋ก, ์ด ์ํ๋ ๋์์ ํฌํจํ ์ ์ฒญํฌ๊ฐ ํ ๋น๋๋ฉฐ, ์ด๋ ret2win ํจ์์ ์ํด ๋ฎ์ด์์์ง๋๋ค.
- https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp
Input your name:
์๋ ํ์์ ์ฃผ์๋ฅผ ๋์ถํ ์ ์๋ ์ด๊ธฐ ์ทจ์ฝ์ ์ด ์์ต๋๋ค.- ๊ทธ๋ฐ ๋ค์
Org:
๋ฐHost:
๊ธฐ๋ฅ์์ org name์ ์์ฒญํ ๋s
ํฌ์ธํฐ์ 64B๋ฅผ ์ฑ์ธ ์ ์์ผ๋ฉฐ, ์คํ์์ ์ด๋ v2์ ์ฃผ์ ๋ค์ ์์นํ๊ณ , ๊ทธ ๋ค์๋ ์ง์ ๋ host name์ด ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์, strcpy๊ฐ s์ ๋ด์ฉ์ 64B ํฌ๊ธฐ์ ์ฒญํฌ์ ๋ณต์ฌํ๋ฏ๋ก, host name์ ๋ฃ์ ๋ฐ์ดํฐ๋ก ์๋จ ์ฒญํฌ์ ํฌ๊ธฐ๋ฅผ ๋ฎ์ด์ธ ์ ์์ต๋๋ค. - ์ด์ ์์์ ์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํด์ง๋ฉด,
atoi
์ GOT๊ฐ printf์ ์ฃผ์๋ก ๋ฎ์ด์์์ก์ต๋๋ค. ๊ทธ ํ%24$p
๋กIO_2_1_stderr
์ ์ฃผ์๋ฅผ ๋์ถํ ์ ์์์ต๋๋ค. ์ด libc ๋์ถ๋ก ์ธํด ๋ค์atoi
์ GOT๋ฅผsystem
์ ์ฃผ์๋ก ๋ฎ์ด์ฐ๊ณ/bin/sh
๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ์ฌ ํธ์ถํ ์ ์์์ต๋๋ค. - ์ด ๋ค๋ฅธ ๊ธ์์ ์ ์๋ ๋์ ๋ฐฉ๋ฒ์
free
๋ฅผputs
๋ก ๋ฎ์ด์ฐ๊ณ , ๋์ค์ ํด์ ๋ ํฌ์ธํฐ์atoi@got
์ ์ฃผ์๋ฅผ ์ถ๊ฐํ์ฌ ๋์ถ๋๋๋ก ํ ๋ค์, ์ด ๋์ถ๋ก ๋ค์atoi@got
๋ฅผsystem
์ผ๋ก ๋ฎ์ด์ฐ๊ณ/bin/sh
๋ก ํธ์ถํ๋ ๊ฒ์ ๋๋ค. - https://guyinatuxedo.github.io/41-house_of_force/bkp16_cookbook/index.html
- ํฌ์ธํฐ๋ฅผ ์ง์ฐ์ง ์๊ณ ํด์ ๋ ์ฒญํฌ๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ UAF๊ฐ ์์ต๋๋ค. ์ผ๋ถ ์ฝ๊ธฐ ๋ฉ์๋๊ฐ ์๊ธฐ ๋๋ฌธ์, ์ฌ๊ธฐ์์ GOT์ free ํจ์์ ๋ํ ํฌ์ธํฐ๋ฅผ ์์ฑํ์ฌ libc ์ฃผ์๋ฅผ ๋์ถํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฝ๊ธฐ ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
- ๊ทธ๋ฐ ๋ค์, House of force๊ฐ ์ฌ์ฉ๋์ด(UAF๋ฅผ ์
์ฉํ์ฌ) ๋จ์ ๊ณต๊ฐ์ ํฌ๊ธฐ๋ฅผ -1๋ก ๋ฎ์ด์ฐ๊ณ , free hook์ ๋๋ฌํ ์ ์์ ๋งํผ ํฐ ์ฒญํฌ๋ฅผ ํ ๋นํ ๋ค์, free hook์ ํฌํจํ ๋ ๋ค๋ฅธ ์ฒญํฌ๋ฅผ ํ ๋นํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์, hook์
system
์ ์ฃผ์๋ฅผ ์์ฑํ๊ณ , ์ฒญํฌ์"/bin/sh"
๋ฅผ ์์ฑํ ํ, ํด๋น ๋ฌธ์์ด ๋ด์ฉ์ ๊ฐ์ง ์ฒญํฌ๋ฅผ ํด์ ํฉ๋๋ค.
tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.