Basic Stack Binary Exploitation Methodology
Last updated
Last updated
AWS ํดํน ํ์ต ๋ฐ ์ค์ต:HackTricks Training AWS Red Team Expert (ARTE) GCP ํดํน ํ์ต ๋ฐ ์ค์ต: HackTricks Training GCP Red Team Expert (GRTE)
์ด๋ค ๊ฒ์ ์ ์ฉํ๊ธฐ ์ ์ ELF ๋ฐ์ด๋๋ฆฌ์ ๊ตฌ์กฐ ์ผ๋ถ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ํฅ๋ฏธ๋ก์ธ ์ ์์ต๋๋ค:
ELF Basic Information๋ค์ํ ๊ธฐ์ ์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ ๊ธฐ์ ์ด ์ธ์ ์ ์ฉํ ์ง ์ ์ ์๋ ์ฒด๊ณ๋ฅผ ๊ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋์ผํ ๋ณดํธ ๊ธฐ๋ฅ์ด ๋ค๋ฅธ ๊ธฐ์ ์ ์ํฅ์ ๋ฏธ์น ์ ์์์ ์ ์ํ์ญ์์ค. ๊ฐ ๋ณดํธ ๊ธฐ๋ฅ ์น์ ์์ ๋ณดํธ ๊ธฐ๋ฅ์ ์ฐํํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ง๋ง ์ด ๋ฐฉ๋ฒ๋ก ์์๋ ๋ค๋ฃจ์ง ์์ต๋๋ค.
ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ์ ์ดํ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค:
์คํ ์ค๋ฒํ๋ก์ฐ: ์คํ์์ ๋ฐํ ํฌ์ธํฐ ๋๋ EBP -> ESP -> EIP๋ฅผ ๋ฎ์ด์ฐ๊ธฐ.
์ค๋ฒํ๋ก์ฐ๋ฅผ ์ ๋ฐํ๊ธฐ ์ํด ์ ์ ์ค๋ฒํ๋ก์ฐ๋ฅผ ์ ์ฉํ ์ ์์
๋๋ ์์ ์ฐ๊ธฐ + ์คํํ ๋ด์ฉ์ด ์๋ ์์น๋ก ์ฐ๊ธฐ
ํฌ๋งท ๋ฌธ์์ด: printf
๋ฅผ ์
์ฉํ์ฌ ์์์ ๋ด์ฉ์ ์์์ ์ฃผ์์ ์ฐ๊ธฐ.
๋ฐฐ์ด ์ธ๋ฑ์ฑ: ์ ์ดํ ์ ์๋ ๋ฐฐ์ด์ ์ป๊ธฐ ์ํด ์๋ชป ์ค๊ณ๋ ์ธ๋ฑ์ฑ์ ์ ์ฉ.
์ค๋ฒํ๋ก์ฐ๋ฅผ ์ ๋ฐํ๊ธฐ ์ํด ์ ์ ์ค๋ฒํ๋ก์ฐ๋ฅผ ์ ์ฉํ ์ ์์
bof to WWW via ROP: ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ฅผ ์ ์ฉํ์ฌ ROP๋ฅผ ๊ตฌ์ฑํ๊ณ WWW๋ฅผ ์ป์ ์ ์์.
Write What Where to Execution ๊ธฐ์ ์ ๋ค์์์ ์ฐพ์ ์ ์์ต๋๋ค:
https://github.com/HackTricks-wiki/hacktricks/blob/kr/binary-exploitation/arbitrary-write-2-exec/README.md์ผ๋ฐ์ ์ผ๋ก ์ทจ์ฝ์ ์ ๋จ์ผ ์ ์ฉ๋ง์ผ๋ก๋ ์ฑ๊ณต์ ์ธ ์ ์ฉ์ ์คํํ๋ ๋ฐ ์ถฉ๋ถํ์ง ์์ ์ ์์์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ํนํ ์ผ๋ถ ๋ณดํธ ๊ธฐ๋ฅ์ ์ฐํํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋จ์ผ ์ทจ์ฝ์ ์ ๋์ผํ ์ด์ง ์คํ์์ ์ฌ๋ฌ ๋ฒ ์ ์ฉํ ์ ์๋ ์ต์ ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ํฅ๋ฏธ๋ก์ธ ์ ์์ต๋๋ค:
ROP ์ฒด์ธ์ main
ํจ์์ ์ฃผ์ ๋๋ ์ทจ์ฝ์ ์ด ๋ฐ์ํ๋ ์ฃผ์๋ฅผ ์ฐ๊ธฐ
์ ์ ํ ROP ์ฒด์ธ์ ์ ์ดํ๋ฉด ํด๋น ์ฒด์ธ์์ ๋ชจ๋ ์์ ์ ์ํํ ์ ์์
exit
์ฃผ์๋ฅผ GOT์ ์ฐ๊ธฐ (๋๋ ์ข
๋ฃ ์ ์ ์ด์ง ํ์ผ์์ ์ฌ์ฉ๋๋ ๋ค๋ฅธ ํจ์)ํ์ฌ ์ทจ์ฝ์ ์ผ๋ก ๋์๊ฐ๊ธฐ
.fini_array์์ ์ค๋ช
ํ๋๋ก ์ฌ๊ธฐ์ 2๊ฐ์ ํจ์๋ฅผ ์ ์ฅํ์ฌ ์ทจ์ฝ์ ์ ๋ค์ ํธ์ถํ๊ณ .fini_array
์์ ํจ์๋ฅผ ๋ค์ ํธ์ถํ๋**__libc_csu_fini
** ํจ์๋ฅผ ํธ์ถํ ์ ์์.
ret2win: ํธ์ถํด์ผ ํ๋ ์ฝ๋์ ํ๋๊ทธ๋ฅผ ์ป๊ธฐ ์ํด ํธ์ถํด์ผ ํ๋ ํจ์๊ฐ ์์ (ํน์ ๋งค๊ฐ๋ณ์์ ํจ๊ป).
PIE๊ฐ ์๋ bof์ ๊ฒฝ์ฐ ์ฐํํด์ผ ํจ
canary๊ฐ ์๋ bof์ ๊ฒฝ์ฐ ์ฐํํด์ผ ํจ
ret2win ํจ์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํธ์ถํ๋ ค๋ฉด ์ฌ๋ฌ ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํด์ผ ํ๋ ๊ฒฝ์ฐ:
์ถฉ๋ถํ ๊ฐ์ ฏ์ด ์๋ ๊ฒฝ์ฐ ROP ์ฒด์ธ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ค๋นํ ์ ์์
SROP (์ด ์์คํ ํธ์ถ์ ํธ์ถํ ์ ์๋ ๊ฒฝ์ฐ)์ ์ฌ์ฉํ์ฌ ๋ง์ ๋ ์ง์คํฐ๋ฅผ ์ ์ดํ ์ ์์
Write What Where๋ฅผ ํตํด ๋ค๋ฅธ ์ทจ์ฝ์ (bof๊ฐ ์๋)์ ์
์ฉํ์ฌ win
ํจ์๋ฅผ ํธ์ถํ ์ ์์.
ํฌ์ธํฐ ๋ฆฌ๋ค์ด๋ ํ : ์คํ์ ํธ์ถ๋ ํจ์ ๋๋ ํฅ๋ฏธ๋ก์ด ํจ์(system ๋๋ printf)์์ ์ฌ์ฉ๋ ๋ฌธ์์ด์ ํฌ์ธํฐ๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ ํด๋น ์ฃผ์๋ฅผ ๋ฎ์ด์ธ ์ ์์.
์ด๊ธฐํ๋์ง ์์ ๋ณ์: ์ ์ ์์.
(์คํ) ์ ธ์ฝ๋: ์คํ์ ์ ธ์ฝ๋๋ฅผ ์ ์ฅํ๊ณ ๋ฐํ ํฌ์ธํฐ๋ฅผ ๋ฎ๊ฑฐ๋ ๋ฎ์ ํ์ ์ ํํ์ฌ ์คํํ๋ ๋ฐ ์ ์ฉํจ:
์ผ๋ฐ bof์์ canary๊ฐ ์๋ ๊ฒฝ์ฐ ์ฐํ(์ ์ถ)ํด์ผ ํจ
ASLR๊ฐ ์๋ ๊ฒฝ์ฐ ret2esp/ret2reg์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ ํํ ์ ์์
์ด๋ ์ ธ์ฝ๋๋ฅผ ROP ์ฒด์ธ๊ณผ ํผํฉํ๋ ๊ฒ์ ๋๋ค.
Ret2syscall: ์์์ ๋ช
๋ น์ ์คํํ๊ธฐ ์ํด execve
๋ฅผ ํธ์ถํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. ํน์ ์์ค์ฝ์ ๋งค๊ฐ๋ณ์์ ํจ๊ป ํธ์ถํ๋ ๊ฐ์ ฏ์ ์ฐพ์ ์ ์์ด์ผ ํฉ๋๋ค.
SROP์ ret2execve๋ฅผ ์ค๋นํ๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค.
Ret2lib: ์ฃผ๋ก **libc
**์์ **system
**๊ณผ ๊ฐ์ ํจ์๋ฅผ ํธ์ถํ๋ ๋ฐ ์ ์ฉํ๋ฉฐ ์ผ๋ถ ์ค๋น๋ ์ธ์(์: '/bin/sh'
)๋ก ํธ์ถํฉ๋๋ค. ํธ์ถํ๋ ค๋ ํจ์๊ฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐ์ด๋๋ฆฌ๊ฐ ๋ก๋ํด์ผ ํฉ๋๋ค(libc ์ผ๋ฐ์ ์ผ๋ก).
์ ์ ์ผ๋ก ์ปดํ์ผ๋๊ณ PIE๊ฐ ์๋ ๊ฒฝ์ฐ, system
๋ฐ /bin/sh
์ ์ฃผ์๊ฐ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฏ๋ก ์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
ASLR๊ฐ ๋นํ์ฑํ๋์ด ์๊ณ ๋ก๋๋ libc ๋ฒ์ ์ ์๊ณ ์๋ ๊ฒฝ์ฐ, system
๋ฐ /bin/sh
์ ์ฃผ์๊ฐ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฏ๋ก ์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
ret2dlresolve
๋ฅผ ์ฌ์ฉํ์ฌ system
์ ์ฃผ์๋ฅผ ํด๊ฒฐํ๊ณ ํธ์ถํฉ๋๋ค
ASLR๋ฅผ ์ฐํํ๊ณ ๋ฉ๋ชจ๋ฆฌ์์ system
๋ฐ '/bin/sh'
์ ์ฃผ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
ASLR ๋ฐ PIE๊ฐ ๋ชจ๋ ํ์ฑํ๋์ด ์์ง๋ง libc๋ฅผ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ: ๋ค์์ ์ํํด์ผ ํฉ๋๋ค:
PIE ์ฐํ
์ฌ์ฉ๋ libc
๋ฒ์ ์ฐพ๊ธฐ (๋ช ๊ฐ์ง ํจ์ ์ฃผ์ ๋์ถ)
๊ณ์ํ๊ธฐ ์ํด ASLR๊ณผ ๊ด๋ จ๋ ์ด์ ์๋๋ฆฌ์ค ํ์ธ
Stack Pivoting / EBP2Ret / EBP Chaining: ์ ์ฅ๋ EBP๋ฅผ ํตํด ESP๋ฅผ ์ ์ดํ์ฌ ์คํ์์ RET๋ฅผ ์ ์ดํฉ๋๋ค.
์คํ ๋ฐ์ด ์ ์คํ ์ค๋ฒํ๋ก์ฐ์ ์ ์ฉ
EIP๋ฅผ ์ ์ดํ๋ ๋์ฒด ๋ฐฉ๋ฒ์ผ๋ก ์ ์ฉํ๋ฉฐ, EIP๋ฅผ ๋จ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ์์ ํ์ด๋ก๋๋ฅผ ๊ตฌ์ฑํ ๋ค์ EBP๋ฅผ ํตํด ๊ทธ๊ฒ์ผ๋ก ์ด๋ํ๋ ๋ฐฉ๋ฒ
ํฌ์ธํฐ ๋ฆฌ๋ค์ด๋ ํ : ํธ์ถ๋ ํจ์ ๋๋ ํฅ๋ฏธ๋ก์ด ํจ์(system ๋๋ printf)์์ ์ฌ์ฉ๋ ๋ฌธ์์ด๋ก ์ด์ด์ง๋ ํจ์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ์คํ์ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ ํด๋น ์ฃผ์๋ฅผ ๋ฎ์ด์ธ ์ ์์ต๋๋ค.
์ด๊ธฐํ๋์ง ์์ ๋ณ์: ์ ์ ์์ต๋๋ค