๐ROP ์๋ฆฌ์ฆ๐
[ROP ์๋ฆฌ์ฆ (1)] ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋งํฌ <-์ฌ๊ธฐ!
[ROP ์๋ฆฌ์ฆ (3)] Return to Library ๊ฐ๋ ๋ฐ ์ค์ต
[ROP ์๋ฆฌ์ฆ (4)] ๋๋ฆผํต(Dreamhack) - rop
ROP(Return Oriented Programming) ์๋ฆฌ์ฆ ์ฒซ ์์์ด๋ค!
์ค๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ๋
๊ณผ PLT์ GOT์ ๋ํ์ฌ ์ดํด๋ณด๋๋ก ํ๊ฒ ๋ค.
๐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (Library)
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ง๊ทธ๋๋ก ๋์๊ด์ด๋ค. ์ฆ, ์ปดํจํฐ ์ธ๊ณ์ ๋์๊ด์ด๋ผ๊ณ ํ ์ ์๋ค. ๋์๊ด์๋ ๋ฌผ๋ก ์์ค๋ ์์ง๋ง, ๋๋ถ๋ถ ์ด๋ค ๊ฒ์ ๋ํ ์ ๋ฌธ์ ์ธ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ฑ
์ด ๋ง๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋์ ๋์๊ด์ ์ฑ
์ ์ ๋ณด๋ฅผ ํ์ฉํ๋ค.
์ปดํจํฐ ๊ณผํ์์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํจ์๋ค์ ์ ์ (ex: printf, scanf, strlen ...์ ์ ์) ๋ฅผ ๋ชจ์๋ ๊ณณ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ฆ ์ฐ๋ฆฌ๋ ๋์๊ด์์ ์ฑ
์ ๋น๋ฆด๊ฑด๋ฐ, ์ฑ
์ด๋ฆ์ printf์ด๊ณ ์ฑ
๋ด์ฉ์ printf์ ์ ์์ธ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๋ printf๋ฅผ ์ง์ ์ ์ํ์ง ์์๋ ํญ์ printf๋ฅผ ์ ์ฌ์ฉํ๋ค! ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ด ํจ์์ ๋ด์ฉ์ ์ฐธ๊ณ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
C๋ฅผ ๋น๋กฏํ ์ฌ๋ฌ ์ปดํ์ผ ์ธ์ด๋ค์, ์์ฃผ ์ฌ์ฉํ๋ ํจ์๋ค์ ์ ์๋ฅผ ๋ชจ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ๋ง๋ค๊ณ , ์ด๋ฅผ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ด ์ฐธ๊ณ ํ ์ ์๋๋ก ํ๋ค. ์ฆ ์ธ์ด๋ง๋ค ๋์๊ด์ด ์๋ ๊ฒ์ด๋ค!
(๋๋ฌ์ ์ฃผ์)
์๋ฅผ๋ค์ด ๋ฟก์น๊ฐ ๋ฟก๋ฟก์ด์กฑ ๋์๊ด์ ๊ฐ์ '๋ฐฉ๊ท์ ์ดํด'์ด๋ผ๋ ์ฑ
์ ๋น๋ ค์ ๋ฐฉ๊ท๋ฅผ ๊ผ๋ค๊ณ ํด๋ณด์! ์ด๋ฅผ ๋ค๋ฅด๊ฒ ์๊ฐํ๋ฉด '๋ฟก์น'๋ผ๋ 'ํ๋ก๊ทธ๋จ'์ด '๋ฟก๋ฟก์ด'๋ผ๋ '์ธ์ด'์ '๋ผ์ด๋ธ๋ฌ๋ฆฌ'์ ๊ฐ์ '๋ฐฉ๊ท'๋ผ๋ 'ํจ์์ ์ ์'๋ฅผ ๊ฐ์ ธ์จ ๊ฒ์ด๋ค!
์ด์ฒ๋ผ ๊ฐ ์ธ์ด์์ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ ํจ์๋ค์ ๋ชจ์์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค์๋๋ฐ ์๋ฅผ๋ค์ด C์ ํ์ค์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ libc์ด๋ค. ๋ฆฌ๋
์ค์๋ libc๊ฐ ์๋๋ฐ, /lib/x86_64-linux-gnu/libc-2.27.so ์ฌ๊ธฐ๋ก ๋ค์ด๊ฐ๋ฉด ๋๋ค.
[Computer Science/System] - [System] ์ปดํ์ผ ๊ณผ์ ์ ๋งํฌ(Link)์ ์ค๋ธ์ ํธ ํ์ผ(Object File) <- ์ด ๊ธ์์ ๋งํฌ์ ์ค๋ธ์ ํธ ํ์ผ์ ๋ํ์ฌ ๊ฐ๋จํ๊ฒ๋ ๋ค๋ค์๋ค. ์ด ๊ธ์ ์ํ๋ฉด, ์ปดํ์ผ์ ์์ค์ฝ๋๋ฅผ ์คํํ ์ ์๊ฒ ๊ธฐ๊ณ์ด๋ก ๋ฐ๊พธ๋ ์ผ๋ จ์ ๊ณผ์ ์ ์๊ธฐํ๋๋ฐ, ์ปดํ์ผ ๊ณผ์ ๋ด์์๋ '๋งํฌ'๋ ๊ฒ๋ ์์๋ค. ์ด๋ ๋งํฌ๋ ์ฌ๋ฌ ์ค๋ธ์ ํธ ํ์ผ(๋งํฌ๋๊ธฐ ์ ์ ๊ธฐ๊ณ์ด ํ์ผ)๋ค์ ๋ชจ์ ์คํํ ์ ์๊ฒ ๋ฐ๊ฟ์ฃผ๋ ๊ฑฐ๋ผ๊ณ ํ๋ค. A๋ผ๋ ํ์ผ์์ printf๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์๋ฐ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก printf๊ฐ ๋ค์ด์๋ ๋ค๋ฅธ ์ค๋ธ์ ํธ ํ์ผ์ด๋ A๋ ํฉ์ณ์ฃผ๋ฉด ๋งํน์ด ๋์ด์ ์คํํ ์ ์๊ฒ๋๋ ๊ฒ์ด๋ค.
์ค๋ธ์ ํธ ํ์ผ์ด ์คํ ๊ฐ๋ฅํ์์์๋ ์คํ์ด ์๋๋ ์ด์ ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ค์ ์ ์๊ฐ ์ด๋์๋์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค
๋งํฌ๋ฅผ ๊ฑฐ์น๊ณ ๋๋ฉด ํ๋ก๊ทธ๋จ์์ puts๋ฅผ ํธ์ถํ ๋, puts์ ์ ์๊ฐ ์๋ libc์์ puts์ ์ฝ๋๋ฅผ ์ฐพ๊ณ , ํด๋น ์ฝ๋๋ฅผ ์คํํ๊ฒ ๋๋ค. (์ฐธ๊ณ ๋ก libc๋ ๋ฐ๋ก ์ปดํ์ผ ํ ํ์ ์๋ค. gcc๊ฐ ์์์ ๋คํด์ค๋ค!!
์ด์ ์ฐ๋ฆฌ๋ ๋งํฌ์ ๊ฐ๋
์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ๋ค์ ์ธ ์ ์๋ค!
์ ์ ๋งํฌ๋ ๋์๊ด์ ๊ฐ์ ์ฑ
๋ด์ฉ์ ๋ค ์๊ธฐํ์ฌ ๋จธ๋ฆฌ์์ ์ฐ๊ฒจ๋ฃ๋ ๊ฒ์ด๊ณ , ๋์ ๋งํฌ๋ ํ์ํ ๋๋ง๋ค ๋์๊ด์์ ์ฑ
์ ๋น๋ฆฌ๋ ๊ฒ์ด๋ค!! [Computer Science/System] - [System] ์ปดํ์ผ ๊ณผ์ ์ ๋งํฌ(Link)์ ์ค๋ธ์ ํธ ํ์ผ(Object File) <- ์ ์ ๋งํฌ, ๋์ ๋งํฌ ๋ด์ฉ ์ฐธ๊ณ
๋์ ๋งํฌ์์๋ ‘๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ’๊ฐ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ๋งคํ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์คํ ์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ์๋ฅผ ํธ์ถํ๋ฉด ๋งคํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํธ์ถํ ํจ์์ ์ฃผ์๋ฅผ ์ฐพ๊ณ , ๊ทธ ํจ์๋ฅผ ์คํํ๊ฒ ๋๋ค. ์ด ๊ณผ์ ์ ์ฌ๋์ด ๋์๊ด์ ๋ฐฉ๋ฌธํด์ ์ํ๋ ์ฑ
์ ์์น๋ฅผ ์ฐพ๊ณ , ๊ทธ ์ฑ
์์ ์ ๋ณด๋ฅผ ์ต๋ํ๋ ๊ณผ์ ๊ณผ ์ ์ฌํ๋ค!
์ผ์ชฝ์ ์ ์ ๋งํฌ๋ฅผ ํตํด, ์ค๋ฅธ์ชฝ์ ๋์ ๋งํฌ๋ฅผ ํตํด puts ํจ์๋ฅผ ํธ์ถํ๋ ๊ณผ์ ์ด๋ค.
์ผ์ชฝ์๋ ๊ทธ๋ฅ puts์ ์์น๊ฐ ๋ฐ๋ก ์ด๋ํ์ง๋ง, ์ค๋ฅธ์ชฝ์์๋ puts@plt๋ผ๊ณ puts๊ฐ ์๋ ์ด๋ค ํ
์ด๋ธ์์ ์๋ฅผ ์ฐพ์์ ํธ์ถํ๋ค!!
๋ค์ ํธ
Reference
https://learn.dreamhack.io/66#9
'๐ฅ๏ธ Computer Science > System' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ปดํจํฐ ๊ตฌ์กฐ] ALU (1) | 2023.04.21 |
---|---|
[System/Assembly] ๋ฒ์ฉ ๋ ์ง์คํฐ ํธํํ (0) | 2023.04.03 |
[System] ์ปดํ์ผ ๊ณผ์ ์ ๋งํฌ(Link)์ ์ค๋ธ์ ํธ ํ์ผ(Object File) (0) | 2023.04.01 |
[System] ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ (x64, x32, 64bit, 32bit) (0) | 2023.03.29 |
[Pwnable] ์์คํ ์ฝ(syscall), ์ ธ, ์ปค๋๋ชจ๋ vs ์ ์ ๋ชจ๋ (0) | 2023.03.26 |