orw 셸코드

orw 셸코드 작성

orw 셸코드는 파일을 열고, 읽은 뒤 화면에 출력해주는 셸코드입니다. 이번 강의에서는 “/tmp/flag”를 읽는 셸코드를 작성해보겠습니다.

구현하려는 셸코드의 동작을 C언어 형식의 의사코드로 표현하면 다음과 같습니다.

char buf[0x30];

int fd = open("/tmp/flag", RD_ONLY, NULL);
read(fd, buf, 0x30); 
write(1, buf, 0x30);

orw 셸코드를 작성하기 위해 알아야 하는 syscall은 아래와 같습니다.

syscall rax arg0 (rdi) arg1 (rsi) arg2 (rdx)
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. int fd = open(“/tmp/flag”, O_RDONLY, NULL)
syscall rax arg0 (rdi) arg1 (rsi) arg2 (rdx)
open 0x02 const char *filename int flags umode_t mode