system hacking ๐Ÿ“ฑ/shellocde 5

shellcode (0x2f ์—†์• ๊ธฐ)

๊ฐ„ํ˜น๊ฐ€๋‹ค ๋””๋ ‰ํ„ฐ๋ฆฌ๋ช…/ํŒŒ์ผ๋ช…์— ์‰˜์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด๋†“๊ณ  argv[0]๋‚˜ ์Šคํƒ์˜ ๋๋ถ€๋ถ„์„ ํ™œ์šฉํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด๋…ผ 25byte ์‰˜์ฝ”๋“œ๋กœ๋Š” ์‹คํ–‰์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ ๊ทธ๋Ÿด๊นŒ์š”? 0x2f๋•Œ๋ฌธ์ธ๋ฐ์š”, 0x2f์€ /(์Šฌ๋ž˜์‰ฌ)๋กœ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ ์“ฐ์ด๋Š” ๋ฌธ์ž์ฃ  ๋ฌผ๋ก  ๊ธฐ์กด ์‰˜์ฝ”๋“œ์— ๋งž์ถ”์–ด์„œ ๋ถ„๋ฆฌ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๊ฒ ๋„ค์š”,,, ์ƒ๊ฐ๋งŒํ•ด๋„ ๊ท€์ฐฎ,,, ... 0x2f ... 0x2f ... ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” 0x2f ์—†์ด ์ž‘๋™๋˜๋Š” ์‰˜์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด "/bin//sh"๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ์ฝ”๋“œ์—์„œ 0x2f๊ฐ€ ํฌํ•จ๋˜๋„ค์š”. ๊ทธ๋Ÿผ 0x2f๋ถ€๋ถ„์„ 0x2e+1๋กœ ๋ฐ”๊พธ๋Š” ์‹์œผ๋กœ ์ฝ”๋”ฉ์„ ํ•ด ๋ด…์‹œ๋‹ค. eax ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ํ†ตํ•ด ์—ฐ์‚ฐ ์ˆ˜ํ–‰ ํ›„ ์Šคํƒ์— push ํ•ด์ค๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ์ž˜ ์‹คํ–‰ ๋ฉ๋‹ˆ๋‹ค. ์ •๋ง 0x2f๊ฐ€ ์—†์–ด์กŒ๋‚˜ ํ™•..

shellcode (4)

์ง€๊ธˆ๊นŒ์ง€ shellcode์˜ ์›๋ฆฌ, ์ œ์ž‘์— ๊ด€ํ•œ ์ „๋ฐ˜์ ์ธ ๊ณผ์ •๋“ค์„ ํ•จ๊ป˜ ์ง„ํ–‰ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ตœ์ข…์ ์œผ๋กœ /bin/sh, shell์„ ์‹คํ–‰์‹œํ‚ค๋Š” shellcode๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ ๋งˆ๋ฌด๋ฆฌ๋ฅผ ํ•ด๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค. eds000n.github.io/syscalls-x86.html Linux Syscall Reference eds000n.github.io systemcall 11๋ฒˆ execve์˜ ์ธ์ž๋ฅผ ์šฐ์„  ์‚ดํŽด๋ด…์‹œ๋‹ค. reg eax ebx ecx edx type 0xd *filename *argv[ ] *envp[ ] value 11(syscall ๋ฒˆํ˜ธ) "/bin/sh"์˜ ์ฃผ์†Œ ๋ฐฐ์—ด ["/bin/sh", NULL] ์˜ ์ฃผ์†Œ ๋ฐฐ์—ด [NULL] ์˜ ์ฃผ์†Œ filename (ebx) ์‹คํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ,..

shellcode (3)

์ง€๋‚œ๋ฒˆ ๋งŒ๋“ค์—ˆ๋˜ shellcode์—์„œ 0x00์„ ์ œ๊ฑฐํ•ด ๋ด…์‹œ๋‹ค. ํฌ๊ฒŒ ๋‘๊ฐ€์ง€์˜ ๋ถ€๋ถ„์—์„œ ๋„๋ฐ”์ดํŠธ๊ฐ€ ํฌํ•จ๋˜๋„ค์š”. mov {reg}, {value} mov {reg}, 0 ์ฒซ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” ์ž…๋ ฅ๋˜๋Š” ๊ฐ’์„ ๋ ˆ์ง€์Šคํ„ฐ์˜ ํฌ๊ธฐ์— ๋งž์ถ”๊ธฐ ์œ„ํ•ด ๋„ ๋ฐ”์ดํŠธ๋ฅผ ํฌํ•จ์‹œํ‚ค๋ฉด์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. eax๋ ˆ์ง€์Šคํ„ฐ๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž๋ฉด, mov eax, 4 : eax(32bit = 4byte)์— ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„ , ๊ฐ’์ด 0x4๊ฐ€ ์•„๋‹Œ 0x00000004๊ฐ€ ๋˜๋Š”๊ฒ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐ”๋กœ์žก๊ธฐ์œ„ํ•ด ์ตœ์†Œํ•œ์˜ ๊ณต๊ฐ„์„ ์ด์šฉํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” al(1byte)์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. eax๋ ˆ์ง€์Šคํ„ฐ ์•ˆ์—์„œ๋„ ๊ตฌ์—ญ์ด ๋‚˜๋‰˜์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. 31 16 8 0 ah al ์—ฌ๊ธฐ์„œ ๋ช…์‹ฌํ•ด์•ผํ•  ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. eax์— ์–ด๋– ํ•œ data๊ฐ€ ๋“ค์–ด์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐํ™”๋ฅผ ํ•œ๋ฒˆ ํ•ด์ฃผ์–ด์•ผ..

shellcode (2)

1ํŽธ์— ์ด์–ด์„œ system call ํ˜ธ์ถœ ๋ถ€๋ถ„๋งŒ์„ ๋”ฐ๋กœ shellcode๋ฅผ ๋งŒ๋“ค์–ด๋ด…์‹œ๋‹ค. ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๋” ํŽธํ•œ intel ๋ฌธ๋ฒ•์œผ๋กœ ์ฝ”๋”ฉํ•ด ๋ณผ๊ฒŒ์š”. hello.asm → hello.o → hello assembly source file assembler (nasm) object file linker (ld) executable file 1 BITS 32 2 3 global _start 4 5 section .text 6 _start: 7 ; write(4, "hello world!" addr, 13) 8 mov eax, 4 9 mov ebx, 1 10 push 0x0a 11 push 0x21646c72 12 push 0x6f77206f 13 push 0x6c6c6568 14 mov ecx, esp 15..

shellcode (1)

shellcode๋ž€, ์ทจ์•ฝํ•œ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•˜์—ฌ ๊ณต๊ฒฉ์ž๊ฐ€ ์‹คํ–‰์‹œํ‚ค๊ณ ์ž ํ•˜๋Š” ์ฝ”๋“œ์ž„๋‹ค. ํ”ํžˆ ์‰˜(shell)์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ๋–„๋ฌธ์— shellcode๋ผ๋Š” ์ด๋ฆ„์ด ๋ถ™์—ˆ์ง€์š”. ์ƒํ™ฉ์—๋”ฐ๋ผ ์‚ฌ์šฉ๋˜๋Š” ์‰˜์ฝ”๋“œ์˜ ์ข…๋ฅ˜๋Š” ๊ต‰์žฅํžˆ ๋‹ค์–‘ํ•œ๋ฐ, ๋งค๋ฒˆ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์‰˜์ฝ”๋“œ๋ฅผ ๊ตฌ๊ธ€๋งํ•ด์„œ ๋ถ™์—ฌ์“ธ์ˆ˜๋Š” ์—†๊ฒ ์ฃ ? ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ๊ธฐํšŒ์— ์‰˜์ฝ”๋“œ ์ œ์ž‘์— ๊ด€ํ•œ ์ „๋ฐ˜์ ์ธ ๊ณผ์ •๋“ค์„ ๊ฐ™์ด ์•Œ์•„๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ์ฝ”๋”ฉ ๊ตญ๋ฃฐ, "์„ธ์ƒ์—๊ฒŒ ์ธ์‚ฌํ•˜๊ธฐ" ์šฐ์„ , ์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” c์–ธ์–ด ํ”„๋กœ๊ทธ๋žจ์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ์ •์„ ๋ถ„์„ํ•ด๋ณด๊ธฐ๊นŒ์ง€ ํ•ด๋ด…์‹œ๋‹ค. ๊น”๋”ํ•˜๊ฒŒ ๋ถ„์„ํ•˜๊ณ ์ž ๋ณดํ˜ธ๊ธฐ๋ฒ•๋“ค์„ ๋Œ€๊ฐ• ๊บผ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. -fno-stack-protector -no-pie -fno-pic ๊ธ€๊ณ  ์ •์  ํ• ๋‹น๊ณผ 32bit ์ปดํŒŒ์ผ ์˜ต์…˜ -static -m32 ๊ฐ ๋ณดํ˜ธ๊ธฐ๋ฒ•๋“ค์˜ ์„ธ์„ธํ•œ ์ž‘๋™ ๊ณผ์ •์€ ๋”ฐ๋กœ ํฌ์ŠคํŒ… ํ•ด ๋†“..