system hacking ๐Ÿ“ฑ/shellocde

shellcode (1)

Kortsec1 2020. 12. 17. 06:22

shellcode ๋งŒ๋“ค ์ƒ๊ฐ์— ์‹ ๋‚œ ํฌ๋ง์ด์˜ ๋ชจ์Šต

 

shellcode๋ž€, ์ทจ์•ฝํ•œ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•˜์—ฌ ๊ณต๊ฒฉ์ž๊ฐ€ ์‹คํ–‰์‹œํ‚ค๊ณ ์ž ํ•˜๋Š” ์ฝ”๋“œ์ž„๋‹ค.

ํ”ํžˆ ์‰˜(shell)์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ๋–„๋ฌธ์— shellcode๋ผ๋Š” ์ด๋ฆ„์ด ๋ถ™์—ˆ์ง€์š”.

 

 

์ƒํ™ฉ์—๋”ฐ๋ผ ์‚ฌ์šฉ๋˜๋Š” ์‰˜์ฝ”๋“œ์˜ ์ข…๋ฅ˜๋Š” ๊ต‰์žฅํžˆ ๋‹ค์–‘ํ•œ๋ฐ,

๋งค๋ฒˆ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์‰˜์ฝ”๋“œ๋ฅผ ๊ตฌ๊ธ€๋งํ•ด์„œ ๋ถ™์—ฌ์“ธ์ˆ˜๋Š” ์—†๊ฒ ์ฃ ?

 

๊ทธ๋ž˜์„œ ์ด๋ฒˆ ๊ธฐํšŒ์— ์‰˜์ฝ”๋“œ ์ œ์ž‘์— ๊ด€ํ•œ ์ „๋ฐ˜์ ์ธ ๊ณผ์ •๋“ค์„ ๊ฐ™์ด ์•Œ์•„๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

์ฒซ ์ฝ”๋”ฉ ๊ตญ๋ฃฐ, "์„ธ์ƒ์—๊ฒŒ ์ธ์‚ฌํ•˜๊ธฐ"

์šฐ์„ , ์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” c์–ธ์–ด ํ”„๋กœ๊ทธ๋žจ์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ์ •์„ ๋ถ„์„ํ•ด๋ณด๊ธฐ๊นŒ์ง€ ํ•ด๋ด…์‹œ๋‹ค.

 

<hello_1>

 

๊น”๋”ํ•˜๊ฒŒ ๋ถ„์„ํ•˜๊ณ ์ž ๋ณดํ˜ธ๊ธฐ๋ฒ•๋“ค์„ ๋Œ€๊ฐ• ๊บผ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

-fno-stack-protector

-no-pie

-fno-pic

 

๊ธ€๊ณ  ์ •์  ํ• ๋‹น๊ณผ 32bit ์ปดํŒŒ์ผ ์˜ต์…˜

-static

-m32

 

 

๊ฐ ๋ณดํ˜ธ๊ธฐ๋ฒ•๋“ค์˜ ์„ธ์„ธํ•œ ์ž‘๋™ ๊ณผ์ •์€ ๋”ฐ๋กœ ํฌ์ŠคํŒ… ํ•ด ๋†“๊ฒ ์Šด๋‹ค.

 

<hello_2>

 

์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์„œ ์ง‘์ค‘ ๋ถ„์„ํ•ด ๋ณผ ๊ณณ์€ system call ๊นŒ์ง€์˜ ๋ถ€๋ถ„ ์ž…๋‹ˆ๋‹ค.

main + 29์˜ wirte ํ•จ์ˆ˜๋Š” ํ˜ธํ™˜์„ฑ, ํŽธ๋ฆฌ์„ฑ์„ ์œ„ํ•œ c์–ธ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜์ด๊ณ ,

ํ•ด๋‹น ์ฝ”๋“œ ์†์œผ๋กœ ๋“ค์–ด๊ฐ€๋ณด๋ฉด kernal mode๋กœ ์ง„์ž…ํ•˜๋Š” ๋ถ€๋ถ„

์ฆ‰, system call์„ ํ˜ธ์ถœํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ต๋‹ˆ๋‹ค.

๋ฐ”๋กœ call dword ptr gs:0x10 <write + 32>

 

 

glibc-2.16.0/sysdeps/unix/sysv/linux/i386/sysdep.h:
/* The original calling convention for system calls on Linux/i386 is
   to use int $0x80.  */
#ifdef I386_USE_SYSENTER
# ifdef SHARED
#  define ENTER_KERNEL call *%gs:SYSINFO_OFFSET
# else
#  define ENTER_KERNEL call *_dl_sysinfo
# endif
#else
# define ENTER_KERNEL int $0x80
#endif

 

 

 

sysenter ๋ฐฉ์‹์— ๊ด€ํ•œ ์ž์„ธํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ์ด๊ณณ์„ ์ฐธ๊ณ ํ•˜์‹œ๊ธธ ๋ฐ”๋ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

https://stackoverflow.com/questions/34741378/confusion-with-system-call

 

Confusion with system call

I am trying to understand how a system call is made in x86. I am reading Smashing the stack for fun and profit. There is a function given on page 7: #include void main() { char...

stackoverflow.com

 

 

 

system call ํ˜ธ์ถœ ์ „, ์ธ์ž๋“ค์„ ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌํ• ๊นŒ์š”?

์ง์ „์— break point๋ฅผ ๊ฑธ๊ณ  ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.

 

<hello_3>

 

์•„๋ž˜ ๋งํฌ์† syscall reference ๋Œ€๋กœ, ๋‹ค์Œ๊ณผ๊ฐ™์ด ์ธ์ž๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.

 

eax ebx ecx edx
0x4 0x1 'hello world'์˜ ์ฃผ์†Œ 0xd

 

eds000n.github.io/syscalls-x86.html

 

Linux Syscall Reference

 

eds000n.github.io

eax : system call ๋ฒˆํ˜ธ (4 → write)

ebx : fd (1 → stdout)

ecx : *buf

edx : count (0xd → ๋ฌธ์ž์—ด์˜ ๊ธธ์ด)

 

 

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๋ถ€๋ถ„๋งŒ ๋”ฐ๋กœ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋งŒ๋“ ๋‹ค๋ฉด?

to be continued..

'system hacking ๐Ÿ“ฑ > shellocde' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

shellcode (0x2f ์—†์• ๊ธฐ)  (0) 2020.12.19
shellcode (4)  (0) 2020.12.19
shellcode (3)  (0) 2020.12.18
shellcode (2)  (0) 2020.12.18