
[DreamHack System Hacking] __eviron
2022. 9. 21. 21:46
DreamHack/SystemHacking
๋ฌธ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค. // Name: environ.c // Compile: gcc -o environ environ.c #include #include #include #include #include void sig_handle() { exit(0); } void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); signal(SIGALRM, sig_handle); alarm(5); } void read_file() { char file_buf[4096]; int fd = open("/home/environ_exercise/flag", O_RDONLY); read(fd, file_buf, sizeof(file_buf) - 1); close(f..

[DreamHack System Hacking] Linux Library exploit > __environ
2022. 9. 21. 21:33
DreamHack/SystemHacking
ํ๋ก์ธ์ค๋ ํ๊ฒฝ ๋ณ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ , ํ์ํ ๋๋ง๋ค ๋ถ๋ฌ์ ์ฌ์ฉํ๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์์์ ํ๊ฒฝ ๋ณ์ ํฌ์ธํฐ์ ๊ด๋ จ๋ ๊ณต๊ฒฉ์ ๋ํด ์์๋ณด๊ณ ์ ํ๋ค. ์ด์ ์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ด๋ ์์ญ์ ์ ์ฅํ๊ณ , ์ด๋ป๊ฒ ์ฐธ์กฐํ๋์ง ์๊ณ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋จผ์ ์์๋ณด์. ์ค์ต ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค. // Name: environ.c // Compile: gcc -o environ environ.c #include #include #include #include #include void sig_handle() { exit(0); } void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); signal(SIGALRM, sig_handle); alarm(5); } vo..

[DreamHack System Hacking] Linux Library exploit > overwrite _rtld_global
2022. 9. 21. 13:32
DreamHack/SystemHacking
ํ๋ก๊ทธ๋จ์์ ๋ฆฌํด ๋ช
๋ น์ด๋ฅผ ์ํํ๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ก๋์์ ๋ค์ํ ํจ์๋ฅผ ํธ์ถํ๋ฉด์ ์ ์ ์ข
๋ฃํ๋ค. ์ฝ๊ณ ์ธ ์ ์๋ ์์ญ์ ์กด์ฌํ๋ ํจ์ ํฌ์ธํฐ๋ฅผ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ์์ ์ฃผ์ ์ฐ๊ธฐ ์ทจ์ฝ์ ์ด ์๋ค๋ฉด ํด๋น ํฌ์ธํฐ๋ฅผ ๋ฎ์ด์จ์ ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ฆ์ ์กฐ์ํ ์ ์๋ค. _rtld_global ๋ฎ์ด์ฐ๊ธฐ ์ค์ต ์์ // Name: ow_rtld.c // Compile: gcc -o ow_rtld ow_rtld.c #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int main() { long addr; long data; int idx; init(); printf("stdout: %p\n", stdout); whil..

[DreamHack System Hacking] Linux Library exploit > _rtld_global
2022. 9. 20. 20:52
DreamHack/SystemHacking
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ ๋ถ์ํ๋ฉด์ ์ด๋ค ๋ฐฉ์์ผ๋ก ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํ๋์ง ์์๋ณด์. _rtld_global ์ค์ต ์์ // Name: rtld.c // Compile: gcc -o rtld rtld.c int main() { return 0; } ๋ค์์ ์ฝ๋๋ ์ข
๋ฃํ๋ ๊ณผ์ ์ ์์๋ณด๊ธฐ ์ํ ์์ ์ฝ๋์ด๋ค. _rtld_global __Gl_exit ์์ ์ปดํ์ผ ํ ์์ ์ฝ๋๋ ๋ณ๋ค๋ฅธ ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํ๋ค. ๋๋ฒ๊น
์ ํตํด ๋ ์์ธํ ์์๋ณด์. main ํจ์ ๋ด์ ๋ฆฌํดํ๋ ๋ช
๋ น์ด์ ๋ธ๋ ์ดํฌ ํฌ์ธํธ๋ฅผ ์ค์ ํ๋ค. step into (si)๋ฅผ ํตํด ๋ค์ ์ฝ๋๋ฅผ ํ์ธํ๋ค. ๋๋ฒ๊น
๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณด๋ฉด, main ํจ์ ๋ด์์ ๋ฆฌํด ๋ช
๋ น์ด๋ฅผ ์คํํ์ ๋ ์คํ ์ต์๋จ์ ์๋ __libc_start_main+231 ..

[DreamHack System Hacking] master_canary
2022. 9. 19. 22:05
DreamHack/SystemHacking
๋ฌธ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค. // gcc -o master master.c -pthread #include #include #include #include #include char *global_buffer; void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60); } void get_shell() { system("/bin/sh"); } void *thread_routine() { char buf[256]; global_buffer = b..

[DreamHack System Hacking] Master Canary - (2)
2022. 9. 19. 21:54
DreamHack/SystemHacking
๋ฌธ์ ์ฝ๋ // Name: mc_thread.c // Compile: gcc -o mc_thread mc_thread.c -pthread -no-pie #include #include #include #include void giveshell() { execve("/bin/sh", 0, 0); } void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int read_bytes (char *buf, int len) { int idx = 0; int read_len = 0; for (idx = 0; idx < len; idx++) { int ret; ret = read(0, buf+idx, 1); if (ret < 0) { return rea..

[DreamHack System Hacking] Master Canary - (1)
2022. 9. 19. 18:44
DreamHack/SystemHacking
์ค์ต ์์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค. // Name: mc_thread.c // Compile: gcc -o mc_thread mc_thread.c -pthread -no-pie #include #include #include #include void giveshell() { execve("/bin/sh", 0, 0); } void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void thread_routine() { char buf[256]; int size = 0; printf("Size: "); scanf("%d", &size); printf("Data: "); read(0, buf, size); } int main() { pthread_..

[DreamHack System Hacking] Master Canary
2022. 9. 19. 17:06
DreamHack/SystemHacking
Thread Local Storage Thread Local Storage (TLS)๋ ๋ช
์นญ ๊ทธ๋๋ก ์ค๋ ๋์ ์ ์ฅ ๊ณต๊ฐ์ ์๋ฏธํ๋ค. ELF ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ดํด๋ณด๋ฉด, ๊ฐ๊ฐ์ ๋ชฉ์ ์ ๊ฐ์ง ์น์
์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ค. ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํ .text, ์ด๊ธฐํ๋์ง ์์ ์ ์ญ ๋ณ์๋ฅผ ์ํ .data๋ฑ์ ์์๋ก ๋ค ์ ์๋ค. TLS ์์ญ์ ์ด์ ๋ฌ๋ฆฌ ์ค๋ ๋์ ์ ์ญ ๋ณ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ณต๊ฐ์ผ๋ก, ๋ก๋(Loader)์ ์ํด ํ ๋น๋๋ค. ๋ค์์ ๋ก๋์์ TLS ์์ญ์ ํ ๋นํ๊ณ ์ด๊ธฐํํ๋ ํจ์์ธ init_tls์ ์ฝ๋์ด๋ค. static void * init_tls (void) { /* Construct the static TLS block and the dtv for the initial thread. For some pla..