

- 문제 정보를 보면, 보호 기법이 없다는 것을 알 수 있다.

- basic_exploitation_000.c를 보면 buf가 0x80(128)의 크기를 가지고, 셸코드를 실행할 함수가 내장되어 있지 않은 것을 확인할 수 있다. 또한, scanf가 141만큼 입력을 받을 수 있어 0x80보다 크므로 BOF가 일어날 수 있고, 이를 이용해야 한다.
- 그리고, scanf는 \x0a, \x0b, \x0c, \x0d, \x20를 읽지 못하므로 인터넷에서 scanf 우회셸코드를 가져왔다.

- 실행하면, exploit을 작성할 때 필요한 buf의 주소가 계속 변한다는 것을 알 수 있다.

- gdb로 basic_exploitation_000을 뜯어보면, push ebp를 통해서 sfp의 크기가 0x4인 것을 알 수 있다.

- 지금까지의 정보들을 바탕으로 exploit을 짠다.
- 여기서, 주소를 받아왔을 때는 문자열로 받아오기에 packing을 하려면 0x를 제외하고 int 값으로 변경한 다음 packing하여야 한다.

+) 원래 드림핵에서는 지금까지 배운 Return Address Overwrite를 이용하라고 문제를 냈지만, NOP Sled를 배운뒤에 NOP Sled 방법으로 다시 풀어보았다.
- 우선, NOP이란 "No Operation"의 약자로써 프로그램의 실행에 영향을 주지 않는 명령어이다. 즉, NOP를 만나면 다음으로 넘어가게 된다. NOP는 각각의 architecture마다 다를 수 있으며, x86 architecture의 NOP 코드는 \x90이다.
- NOP Sled는 sled가 썰매라는 뜻에서 NOP를 이용하여 주소값이 계속 변경되는 상황에서 공격코드를 해당 위치에 넣기가 힘든 것을 해결하기 위해 사용된다.
- 이러한 NOP Sled를 사용하면 NOP가 있는 범위에서는 공격코드가 NOP에 의해 실행흐름이 넘어가면서 원하는 공격코드를 실행할 수 있게 된다. 예시로 ASLR이 걸려있어 주소값이 계속 변경되는 상황에서 이 NOP Sled를 사용한다.

