๐โSystem_Study/๐โDreamhack_Hacking
Return Address OverWrite ์นด๋๋ฆฌ ์ฐํ์ ์
ธ ์ฝ๋๋ฅผ ์ด์ฉํด ์
ธ์ ํ๋ํ๋ ๋ฐฉ๋ฒ // Name: r2s.c // Compile: gcc -o r2s r2s.c -zexecstack #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int main() { char buf[0x50]; init(); printf("Address of the buf: %p\n", buf); printf("Distance between buf and $rbp: %ld\n", (char*)__builtin_frame_address(0) - buf); printf("[1] Leak the canary\n"); pri..
๐โSystem_Study/๐โDreamhack_Hacking
์คํ ์นด๋๋ฆฌ(Stack Canary) ์คํ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ก๋ถํฐ ๋ฐํ ์ฃผ์๋ฅผ ๋ณดํธํ๋ ๊ธฐ๋ฒ ํจ์์ ํ๋กค๋ก๊ทธ์์ ์คํ ๋ฒํผ์ ๋ฐํ ์ฃผ์ ์ฌ์ด์ ์์์ ๊ฐ์ ์ฝ์
ํ๊ณ , ํจ์์ ์ํ๋ก๊ทธ์์ ํด๋น ๊ฐ์ ๋ณ์กฐ๋ฅผ ํ์ธํ๋ ๋ณดํธ ๊ธฐ๋ฒ์
๋๋ค. ์นด๋๋ฆฌ ๊ฐ์ ๋ณ์กฐ๊ฐ ํ์ธ๋๋ฉด ํ๋ก์ธ์ค ๊ฐ์ ์ข
๋ฃ! BOF๋ก RET๋ฅผ ๋ฎ์ผ๋ ค๋ฉด ๋ฐ๋์ ์นด๋๋ฆฌ๋ฅผ ๋จผ์ ๋ฎ์ด์ผํ๋ฏ๋ก ์นด๋๋ฆฌ ๊ฐ์ ๋ชจ๋ฅด๋ ๊ณต๊ฒฉ์๋ ๋ฐํ ์ฃผ์๋ฅผ ๋ฎ์ ๋ ์นด๋๋ฆฌ ๊ฐ์ ๋ณ์กฐํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌํ๋ค๋ฉด ๋ณ์กฐ๊ฐ ํ์ธ๋์ด ๊ณต๊ฒฉ์๋ ์คํ ํ๋ฆ์ ํ๋ํ์ง ๋ชปํ๊ฒ๋ฉ๋๋ค. TMI. ์นด๋๋ฆฌ๋ผ๋ ์ด๋ฆ์ ์ ๋ ์นด๋๋ฆฌ ๋ณดํธ ๊ธฐ๋ฒ์ ์ด๋ฆ์ ์นด๋๋ฆฌ์(Canary)๋ผ๋ ์์์ ์ ๋๋์์ต๋๋ค. 19์ธ๊ธฐ, 20์ธ๊ธฐ์๋ ์ผ์ฐํํ์ ๋๋์ ์ธก์ ๊ธฐ์ ์ด ๋ถ์กฑํ๊ณ , ํ๊ด์์ ์ ์ถ๋ ์ผ์ฐํํ์์ ๊ด๋ถ๊ฐ ์ค๋
์ฌํ๋ ..
๐โSystem_Study/๐โDreamhack_Hacking
basic_exploitation_001 ๋ฌธ์ ํ์ด ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.. ๋ฐ๋ก NX๊ฐ ์ ์ฉ๋ ์ฝ๋๋ผ๋ ๊ฒ์ด์ฃ ์ฐธ๊ณ ๋ก 32-little endian linux์ด๊ณ ์ ๊ทธ๋ผ ๋ค์ด๊ฐ๊ธฐ ์์จ์ NX์ ๋ํด ์์๋ด์ผ๊ฒ ์ฃ ? NX(Bit | MS : DEP) NX-Bit(Never eXecute Bit; ์คํ ๋ฐฉ์ง ๋นํธ) - ํ๋ก์ธ์ค ๋ช
๋ น์ด๋ ์ฝ๋ ๋๋ ๋ฐ์ดํฐ ์ ์ฅ์ ์ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ ๋ถ๋ฆฌ CPU์ ๊ธฐ์ - NX ํน์ฑ์ผ๋ก ์ง์ ๋ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ญ์ ๋ฐ์ดํฐ ์ ์ฅ์ ์ํด์๋ง ์ฌ์ฉ๋จ - ํ๋ก์ธ์ค ๋ช
๋ น์ด๊ฐ ๊ทธ๊ณณ์ ์์ฃผํ์ง ์๊ฒ ์คํ์์ผ์ค DEP(Data Execution Prevention) - MS windows OS์ ํฌํจ๋ ๋ณด์ ๊ธฐ๋ฅ์ด๋ฉฐ, ์
์์ ์ฝ๋ ์คํ ๋ฐฉ์ง๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ ํ์ธ ๊ธฐ์ - DEP๋ ..
๐โSystem_Study/๐โDreamhack_Hacking
basic_exploitation_000 ๋ฌธ์ ํ์ด(pwntools์ shellcode) ๋ฐ์ ๋งํฌ๋ ์์ผ๋ก ๊ธฐ์ฌ๋ ๋ฌธ์ ํ์ด์์ ํฐ ๋์์ด ๋ ๊ฑฐ์์ ์ถ๊ฐ๋ก ํ์ํ ์ ๋ณด๋ ์ฐจ์ฐจ ๊ธฐ์ฌํ ๊ป์ Memory Corruption: Stack Buffer Overflow ์คํ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ(Stack Buffer Overflow) ์ธ๊ณ ์ต์ด์ ์์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋ชจ๋ฆฌ์ค ์๋ ์ด ๊ณต๊ฒฉ์ ํตํด ์ ํ๋จ ๋ณด์ ๊ณต๋ถ๋ฅผ ๋ชจ๋ฅด๋ ๊ฐ๋ฐ์๋ ์๋งํผ ์ ๋ช
ํ๊ณ ์ญ์ฌ๊ฐ ์ค๋๋ ์ทจ์ฝ์ ์
๋๋ค. ์ด๋ ๊ฒ dystopia050119.tistory.com //file name : basic_exploitation_000.c //Complie : gcc -o basic_exploitation_000 basic_exploitation_000.c #inc..
๐โSystem_Study/๐โDreamhack_Hacking
์๋ก ์ด์ ์คํ ์ค๋ฒ ํ๋ก์ฐ๋ฅผ ํ์ฉํ RET๋ฅผ ๋ณ์กฐํด ์
ธ์ ํ๋ํ๋.. ๊ทธ๋ฐ ์๊ฒ์์ ํด๋ด
์๋ค ์๋๋ ์์ ์์ // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return ..
๐โSystem_Study/๐โDreamhack_Hacking
๋ฌธ์ ํ์ด ๋๋ฌด ์ง์ณ์.. ๋ฌธ์ ํ์ด๋ ํ๋๋ง ํ ๊น์? get_shell ํจ์๋ฅผ ํ์ฉ // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0; } ์ ์ฝ๋๊ฐ ๋ฌธ์ ์์..
๐โSystem_Study/๐โDreamhack_Hacking
์คํ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ(Stack Buffer Overflow) ์ธ๊ณ ์ต์ด์ ์์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋ชจ๋ฆฌ์ค ์๋ ์ด ๊ณต๊ฒฉ์ ํตํด ์ ํ๋จ ๋ณด์ ๊ณต๋ถ๋ฅผ ๋ชจ๋ฅด๋ ๊ฐ๋ฐ์๋ ์๋งํผ ์ ๋ช
ํ๊ณ ์ญ์ฌ๊ฐ ์ค๋๋ ์ทจ์ฝ์ ์
๋๋ค. ์ด๋ ๊ฒ ์ค๋ ์ญ์ฌ๋ฅผ ์๋ํ๋ ์ด ์ทจ์ฝ์ ์ ์์ง๋ ๋ง์ SW์์ ๋ฐ๊ฒฌ๋ฉ๋๋ค. CVE details์ ๋ฐ๋ฅด๋ฉด ์คํ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ฅผ ํฌํจํ ์ค๋ฒํ๋ก์ฐ ์ทจ์ฝ์ ์ ๋ง์ด ๋์์(4์) ๊ทธ๋ผ ์คํ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ๋ ์์ธ์ด ๋ฌด์์ธ์ง, ๊ทธ๋ฆฌ๊ณ ์ด ์ทจ์ฝ์ ์ด ์ด๋ค ๋ฌธ์ ๋ก ์ด์ด์ง์ง ๊ณต๋ถ ใฑ BOF์ ํ์ํ ์ฉ์ด ๊ฐ๋จ ์ ๋ฆฌ ๋ฒํผ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ sfp๋ ์คํ ๋ฒ ์ด์ค ๊ฐ์ ์๋ฏธ - sfp๋ ์คํ ์ฃผ์๊ฐ์ ๊ณ์ฐํ ๋ ํ์ฌ ์คํ๊ฐ์ ๊ธฐ์ค ํ์ํ ํ๋ ์ ํฌ์ธํฐ ๊ฐ ์ง์ (4 or 8byte) rbp(or ebp)๋ ํ ..
๐โSystem_Study/๐โDreamhack_Hacking
ํจ์ ํธ์ถ ๊ท์ฝ๐ค ํจ์์ ํธ์ถ ๋ฐ ๋ฐํ์ ์ฝ์ ํ ํจ์์์ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถ ์, ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ฆ์ ๋ค๋ฅธ ํจ์๋ก ์ด๋ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํธ์ถ๋ ํจ์๊ฐ ๋ฐํ๋๋ฉด ๋ค์ ์๋์ ํจ์๋ก ๋์์ ๊ธฐ์กด์ ์คํ ํ๋ฆ์ ์ด์ด๊ฐ์ฃ . ํจ์ ํธ์ถ ์ ๋ฐํ๋ ์ดํ๋ฅผ ์ํด ํธ์ถ์(Caller)์ ์ํ(Stack frame) ๋ฐ ๋ฐํ ์ฃผ์(Return Address)๋ฅผ ์ ์ฅํด์ผ ํจ! ๋ํ, ํธ์ถ์๋ ํผํธ์ถ์(Callee)๊ฐ ์๊ตฌํ ์ธ์๋ฅผ ์ ๋ฌํ๋ฉฐ, ํผํธ์ถ์์ ์คํ์ด ์ข
๋ฃ ์ ๋ฐํ ๊ฐ์ ์ ๋ฌ ๋ฐ์์ผํจ ํจ์ ํธ์ถ ๊ท์ฝ ์ ์ฉ์ ์ผ๋ฐ์ ์ผ๋ก ์ปดํ์ผ์ ๋ชซ์ด๋ฉฐ, ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ง๊ฒ ํธ์ถ ๊ท์ฝ์ ์๋ง๊ฒ ์ ์ฉ์ ์ปดํ์ผํฉ๋๋ค. ํธ์ถ ๊ท์ฝ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ผ๋ฉฐ, ์ฝ๋์ ๋ช
์๊ฐ ์๋์ด ์๋ค๋ฉด ์ปดํ์ผ์์ ์ง์ํ๋ ํธ์ถ ๊ท์ฝ ์ค CUP์ ์ํคํ
์ฒ์ ..