orw 2

[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] 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..