๐โSystem_Study/๐โDreamhack_Hacking
Return To Library NX๋ก ์ธํด ๊ณต๊ฒฉ์๊ฐ ๋ฒํผ์ ์ฃผ์
ํ ์
ธ ์ฝ๋๋ฅผ ์คํํ๊ธฐ๋ ์ด๋ ค์์ก์ง๋ง, ์ด์ ํ BOF๋ ๊ฐ๋ฅ! ๊ทธ๋์ ๊ณต๊ฒฉ์๋ค์ ์คํ ๊ถํ์ด ๋จ์์๋ ์ฝ๋ ์์ญ์ผ๋ก ๋ฐํ ์ฃผ์๋ฅผ ๋ฎ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ ๊ณ ์ํ์ฃ ํ๋ก์ธ์ค์ ์คํ ๊ถํ์ด ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ด๋๋ฆฌ์ ์ฝ๋ ์์ญ & ์ฐธ์กฐ lib์ ์ฝ๋ ์์ญ ํนํ ๊ณต๊ฒฉ์๋ค์ด ์ฃผ๋ชฉํ ๊ฒ์ ๋ค์ํ ํจ์๊ฐ ๊ตฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. ๋ช๋ช lib๋ ๊ณต๊ฒฉ์ ์ ์ฉํ ํจ์๋ค์ด ๊ตฌํ๋์ด ์์ต๋๋ค ์๋ก ๋ฆฌ๋
์ค์ C๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ ์ฐธ์กฐํ libc์ system/execve ๋ฑ ํ๋ก์ธ์ค ์คํ ๊ด๋ จ ํจ์๋ค์ด ๊ตฌํ๋จ Return To Libc(Return To Library) libc์ ํจ์๋ค๋ก libc์ ํจ์๋ค NX๋ฅผ ์ฐํํ๊ณ ์
ธ์ ํ๋ํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ ๊ฐ๋ฐ ..
๐โSystem_Study/๐โDreamhack_Hacking
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๐ ์ฌ๋ฌ ์ปดํ์ผ ์ธ์ด๋ค์ ์์ฃผ ์ฌ์ฉ๋๋ ํจ์๋ค์ ์ ์๋ฅผ ๋ฌถ์ด์ ํ๋์ lib ํ์ผ๋ก ์์ฑ ์ด๋ฅผ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ด ๊ณต์ ํด์ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ ํจ์๋ค ๋ฐ๋ณต์ ์ ์ ํ์ X ์ฆ, ์ฝ๋ ๊ฐ๋ฐ์ ํจ์จ์ฑ์ด ํฅ์๋๋ ์ฅ์ !! ๋ํ ๊ฐ ์ธ์ด์ ๋ฒ์ฉ์ ์ฌ์ฉ๋๋ ํจ์๋ค์ ํ์ค lib๊ฐ ์ ์๋์ด ๊ฐ๋ฐ์๋ค์ด ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ์ฃ ๋ํ์ ์ธ C์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ libc๋ ์ฐ๋ถํฌ์ ๊ธฐ๋ณธ ํ์ฌ๋ lib์
๋๋ค. ์ค์ตํ๊ฒฝ์์ /lib/x86_64-linux-gun/libc-2.27.so ๊ฐ ์์ฃ ๊ทธ๋ฆฌ๊ณ ๊ธฐํ ํจ์๋ค์ ์ฌ์ฉ์ ์์ด์ ์ ์ ์์ด ์ฌ์ฉํ ์ ์๋ ์ด์ ๋ ์ด ์ด์ ๋๋ฌธ์
๋๋ค. ๋งํฌ๐๏ธ ๋งํฌ(Link)๋ ๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ปดํ์ผ์ ๋ง์ง๋ง ๋จ๊ณ๋ก์จ.. ํ๋ก๊ทธ๋จ์์ ์ด๋ค lib์..
๐โSystem_Study/๐โDreamhack_Hacking
์์คํ
๋ณด์์ ์ง๋ ์๋
๊ฐ ๋ฐ์ ํด์จ ๊ณต๊ฒฉ ๊ธฐ๋ฒ๊ณผ ๋ณดํธ ๊ธฐ๋ฒ์ ๋ฐ์ ์์์ ๋ณด์๋ฉด.. ์ด๋ค ๋ณดํธ ๊ธฐ๋ฒ์ด ๋ฑ์ฅํ๋ฉด ์ฐํ ๊ธฐ์ ๋ ๋ฑ์ฅํฉ๋๋ค.. ์ด๋ ๊ฒ ์ด๋ค ๊ณต๊ฒฉ์ด ์ฌ์ง ๋ชจ๋ฅด๊ธฐ์ ์์คํ
๊ฐ๋ฐ์๋ค์ ์ฌ๋ฌ ๊ฒบ์ ๋ณดํธ ๊ธฐ๋ฒ์ ์ ์ฉํด ์์คํ
์ด ๊ณต๊ฒฉ๋นํ ์ ์๋ ํํ ์์ฒด↓ ์ด์ ์ ๊ธ์ ๋ณด์๋ฉด r2s๋ฅผ ํตํ ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ๊ธฐ์ ๋ ์ด๋ ต๊ฒ ํ๊ธฐ ์ํด์ ๊ณต๊ฒฉ์๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์์ ๋ฒํผ ์ฃผ์ ์๊ธฐ ํ๋ค๊ฒ, ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ถํ์ํ ์คํ ๊ถํ ์ ๊ฑฐ Exploit Tech: Return to Shellcode dystopia050119.tistory.com ์ด์ ๊ด๋ จ๋ ๋ณดํธ๊ธฐ๋ฒ์ผ๋ก ์ฐ๋ฆฌ๋ ASLR๊ณผ NX๋ฅผ ๋ฐฐ์๋ณผ๊ป์ ASLR Address Space Layout Randomization์ ์ฝ์ด ๋ฐ์ด๋๋ฆฌ๊ฐ ์คํ๋ ๋๋ง๋ค ์คํ/ํ/๊ณต์ l..
๐โSystem_Study/๐โDreamhack_Hacking
๋ฌธ์ ํ์ด ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ ๊ธฐ๋ฒ์ ๋จผ์ ๋ณด์๋ฉด canary์ ์ฉ๊ณผ NX๊ฐ ์์ฃ RELRO๋ ์ ๊ฒ ๋๊ฑด๊ฐ? Relro๋ ๋ค์์ ์์ธํ ์์ ํ ์๊ฐ์ด ์ค๊ฒ ์ฃ ๊ทธ๋ฌ๋ ์ด ๋ด์ฉ์ ํจ์คํ๊ณ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ๋ญ๊ฐ ์ทจ์ฝํ ์ฝ๋์ธ์ง ์ํ์ด ์ฝ๋ฉ๊ณผ ์ ์ฌํ๊ฒ ์ง์ ๊น์ง ํด๋ณผ๊น์ HTML ์ฝ์
๋ฏธ๋ฆฌ๋ณด๊ธฐํ ์ ์๋ ์์ค ์ด ์ฝ๋์
๋๋ค. ์ ๋ชฉ๊ณผ ์ฃผ์ ๊ฐ ์ฃผ์ ์ด๋ฏ๋ก ๋น์ฐํ BOF๊ฐ ์ ์ด๋ ๋ ๋ฒ ๋์ค๊ฒ ์ฃ ์ฝ๋๋ฅผ ๋ณด์๋ฉด... ์์งํ ์ case ๋ชจ๋ ์ทจ์ฝํ ์ฝ๋์ด๊ธด ํด์ ๋ญ๊ฐ ๋ฌธ์ ์ธ์ง ํ๋์ฉ ์์๋ณผ๊น์ ์ ์ฝ๋๋ BOF๋ฅผ ๋ฐ์์ํฌ ์ ์์ง๋ง ์น๋ช
์ ์ธ ์ฝ๋ ์คํ๊น์ง๋ ๋ถ๊ฐ๋ฅํ๋ฏ๋ก Canary๊ฐ์ ์์ฑํ๋๋ฐ.. ์๋ํ๋ฉด Box์ ๋ณ์๋ช
์ธ ๋ณ์ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 0x40์ด๋๊น ๊ทธ ์ด์์ผ๋ก ์
๋ ฅํ์๋ฉด ๋๊ฒ ์ฃ ๋ ๋ฒ์งธ ์ฝ๋๋ ์ฐ๋ฆฌ๊ฐ ์
๋ ฅ๊ฐ์ ์ธ์์ ๊ธธ์ด๋ฅผ..
๐โ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; } ์ ์ฝ๋๊ฐ ๋ฌธ์ ์์..