์์คํ ๋ณด์ ์์ ์ค ์งํํ ๊ณผ์ ์ ๋๋ค.
์ค์ต
overflow.c ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ , ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ์ฌ Segmentation Fault(์ธ๊ทธ๋ฉํ ์ด์ ํดํธ) ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ์ต์ ์ ๋ ฅ ๊ธธ์ด๋ฅผ ์ฐพ๊ณ , ์ด๋ฅผ GDB ๋๋ฒ๊ฑฐ๋ก ๋ถ์ํ๋ค. ์ด ๊ณผ์ ์์ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ ๋ฐ์ ์ ํ์ ์คํ ์ํ๋ฅผ ๋น๊ตํ์ฌ ๋น์ ์์ ์ธ ์คํ ํ๋ฆ์ ์์ธ์ ํ์ ํด๋ณด์.
overflow.c
|
๋ถ์ ๊ณผ์
์ด๊ธฐ ์ธํ
1. overflow.c ์์ค์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ฌธ์ ์์ ์ฃผ์ด์ง ๋ช ๋ น์ด๋ก ์ปดํ์ผ์ ํด์ฃผ๊ธฐ.
2. Gdb๋ฅผ ์คํํ์ฌ ํ๋ก๊ทธ๋จ์ ๋ก๋ํ๊ณ , list main์ผ๋ก ์์ค์ฝ๋์ ๋ผ์ธ์ ํ์ธํ๊ธฐ.
1) 19๊ฐ ์ ๋ ฅํ์ ๊ฒฝ์ฐ
- Breakpoint ์ค์
- ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ๋ ์์ ์ง์ ์ gets() ํจ์๊ฐ ์์นํ ๋ค์ ๋ผ์ธ ๋ฒํธ์ธ 6์ผ๋ก breakpoint๋ฅผ ์ง์ ํ๋ค.
- ํ๋ก๊ทธ๋จ ์คํ
- run์ผ๋ก ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ , 19๊ฐ์ A๋ฅผ ์ ๋ ฅํ๋ค.
- breakpoint์์ ์ค๋จ์ด ๋๋ฉด, info registers ๋ช
๋ น์ด๋ก ํ์ฌ ๋ ์ง์คํฐ์ ์ํ๋ฅผ ํ์ธ.
- ์ ๋ ฅ ๊ธธ์ด 19 (`AAAAAAAAAAAAAAAAAAA`)์ผ ๋, ebp๋ `0xffffd1f8`๋ก ์ค์ ๋๊ณ , esp๋ `0xffffd1e8`๋ก ์ค์ ๋จ.
- ๋ค์ x/16xw $esp ๋ช
๋ น์ด๋ก ์คํ ์ํ๋ฅผ ํ์ธํ๋ค.
- buf๋ 16๋ฐ์ดํธ์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ฏ๋ก, buf[16], buf[17], buf[18]์ด ๋ฎ์ด์จ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด ๋ ebp์ ๊ฐ์ ์ฌ์ ํ `0xffffd1f8`๋ก ์ ์ฅ๋๋ค.
- ์ด ๊ฒฝ์ฐ, ๋ฎ์ด์ฐ๋ ๋ฐ์ดํฐ๊ฐ ๋ฆฌํด ์ฃผ์์ ์ ์ฅ๋ ebp ๊ฐ์ ๋๋ฌํ์ง ์์ผ๋ฏ๋ก Segmentation Fault๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ๋ํ ๋ฆฌํด ์ฃผ์ (์คํ ํ๋ ์ ์์ ์ ์ฅ๋ ebp ์์ ์์นํ ๊ฐ)๋ `0xf7de5ed5`๋ก ์ ์์ ์ธ ์ฃผ์์์ ์ ์ ์๋ค.
- continue๋ฅผ ํ์ ๋ ๋ฌธ์ ์์ด ์ข ๋ฃ๋๋ ๊ฒ์ผ๋ก ๋ณด์ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ ๋ฐ์ํ์ง๋ง, ๋ฎ์ด์ฐ๋ ๋ฐ์ดํฐ๊ฐ ๋ฆฌํด ์ฃผ์์ ์ ์ฅ๋ ebp ๊ฐ์ ๋๋ฌํ์ง ์์ผ๋ฏ๋ก Segmentation Fault๊ฐ ๋ฐ์ํ์ง ์์์์ ์ ์ ์๋ค.
2) 20๊ฐ ์ ๋ ฅํ์ ๊ฒฝ์ฐ
- breakpoint ์ค์
- ๋ผ์ธ ๋ฒํธ์ธ 6์ผ๋ก breakpoint๋ฅผ ์ง์ ํด์ค๋ค.
- ํ๋ก๊ทธ๋จ ์คํ
- run์ผ๋ก ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ , 20๊ฐ์ A๋ฅผ ์ ๋ ฅํ๋ค.
- breakpoint์์ ์ค๋จ์ด ๋๋ฉด, info registers ๋ช
๋ น์ด๋ก ํ์ฌ ๋ ์ง์คํฐ์ ์ํ๋ฅผ ํ์ธํ๋ค
- ์ ๋ ฅ ๊ธธ์ด 20 (`AAAAAAAAAAAAAAAAAAAA`)์ผ ๋, ebp๋ `0xffffd1f8`๋ก ์ค์ ๋๊ณ , esp๋ `0xffffd1e8`๋ก ์ค์ ๋๋ค.
- ๋ค์ x/16xw $esp ๋ช
๋ น์ด๋ก ์คํ ์ํ๋ฅผ ํ์ธํ๋ค.
- buf[16], buf[17], buf[18], buf[19]์ด ๋ฎ์ด์ด๋ค.
- ์ด ๊ฒฝ์ฐ ebp๊ฐ ๋ฎ์ด์ฐ์ฌ์ ธ `0x41414141`๊ฐ ๋๋ค. (ASCII๋ก 'AAAA').
- ๋ฆฌํด ์ฃผ์๋ ์ ์์ ์ธ ์ฃผ์ `0xf7de5ed5`๊ฐ ์๋ `0x41414141`์ ๊ด๋ จ๋ ์๋ชป๋ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ค.
- ๋ฐ๋ผ์ ebp๊ฐ ๋ฎ์ด์ฐ์ฌ์ง๊ณ , continue๋ฅผ ํ์ ๋ ํจ์๊ฐ ์๋ชป๋ ์ฃผ์์ธ `0x41414141` ๋ก ๋ฆฌํดํ๋ ค ํ๋ฉด์ Segmentation Fault๊ฐ ๋ฐ์ํ๋ค.
๊ฒฐ๋ก
getsํจ์๊ฐ ๋ฒํผ ํฌ๊ธฐ๋ฅผ ์ด๊ณผํ๋ ์ ๋ ฅ์ ๋ฐ์์ ๋ ์คํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฎ์ด์์ฐ๊ฒ ๋๋ค. printfํจ์ ํธ์ถ ์ง์ ์ break point๋ฅผ ์ค์ ํ์ฌ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ฅผ ํ์ธํ ์ ์๋ค!!!! ์คํ ๋ฉ๋ชจ๋ฆฌ์ ๋ฆฌํด ์ฃผ์๊ฐ ๋ฎ์ด์์์ง ๊ฒฝ์ฐ Segmentation Fault๊ฐ ๋ฐ์ํ๋ค.
์์ ๊ฐ์ด19๋ฐ์ดํธ์ ์ ๋ ฅ์ ๊ฒฝ์ฐ, ๋ฒํผ ํฌ๊ธฐ์ธ 16๋ฐ์ดํธ๋ฅผ ์ด๊ณผํ์ฌ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ ๋ฐ์ํ์ง๋ง, ebp์ ๋ฆฌํด ์ฃผ์๊ฐ ๋ฎ์ด์ฐ์ฌ์ง์ง ์์ Segmentation Fault๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ฐ๋ผ์ ์ต์ 20๋ฐ์ดํธ์ ์ ๋ ฅ์ด ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ฅผ ์ผ์ผ์ผ ๋น์ ์์ ์ธ ์คํ ํ๋ฆ์ ์ ๋ฐํ๊ฒ ๋๋ค๋๊ฑธ ์ ์ ์์๋ค.