해당 문제에 netcat을 시도할 경우, buf가 먼저 출력되며, 그 다음 사용자의 입력을 받는다.
buf를 128만큼 할당하고 scanf에서 141정도의 길이를 입력받는다. 여기서 buf의 길이보다 많이 할당받으므로, BOF가 발생할 수 있다.
main 함수 내에서 스택에 위에서 차례로 선언된 순서로 정렬하자면, (argc,argv) → main SFP → main RET → buf 이 순으로 스택이 쌓여있다.
그림대로 SFP, RET은 각각 4바이트를 차지하는데, 입력이 이미 141byte나 되니 buf에서 RET까지 입력값을 채울 수 있다. 그러므로 저 총 132 바이트를 채워버릴 쉘코드를 작성해보면 된다.
여기서 우리는 python의 pwntool 모듈을 사용할 것이다.
pwntool설치
pip install pwntools
우리는 쉘코드중 쉘을 열어주는 쉘코드를 사용할 것이다.
근데 여기서 주의할 점이 있다.