

- 문제 정보를 보면 execve, execveat 시스템 콜을 사용하지 못한다는 것을 알 수 있고, flag 파일의 위치와 이름은 /home/shell_basic/flag_name_is_loooooong 라고 주어진 것을 확인할 수 있다.
- 하지만, 그 전에 꼭 알아야 할 것들이 있다.

- 엔디언(Endian)은 프로그래밍에서 메모리같은 1차원 공간에서의 데이터 배열 방법을 의미하는데, 이러한 Endian은 각각의 architecture에 의해 Little Endian과 Big Endian으로 나뉘게 된다. Big Endian은 왼쪽에서부터 데이터를 넣지만, Little Endian은 반대로 데이터를 넣는다는 특징이 있다.
- 문제로 돌아와서, intel x86-64 architecture는 Little Endian을 사용하므로 거꾸로 데이터를 넣고, 스택에는 8byte 단위로만 값을 push할 수 있으므로 아래처럼 orw.S를 작성해야 한다.

- 그 다음에는 작성한 어셈블리 코드를 컴파일하기 위해서 Dreamhack에 있는 스켈레톤 C언어 예제 코드를 변형시켜서 작성했다.

- 그 다음에 orw.c를 gcc -o orw orw.c -masm=intel로 컴파일 해주고, 이렇게 작성한 셸코드를 byte code로 하기 위해서 objdump -d orw를 실행한다.

- 이를 이용해 byte code로 바꿔준다.

- 지금까지의 것들을 조합해서 pwntools를 사용해 exploit을 작성하기 전에, Dreamhack에서 접속 정보를 확인한다.

- 이제 exploit을 작성하면 된다.

- 최종적으로 exploit을 작성했으면, python3 exploit.py로 실행시켜주자.
