우선 troll.c의 내용을 살펴보도록 하자. 내용을 살펴보면 이전내용을 유지한 채로 1가지 추가조건으로 인자값을 2개로 제한했다는 것을 알 수 있다. 따라서 argv[2]에 쉘코드를 심어서 진행할 수 없음을 알 수 있다. 이때의 공격 방법은 심볼릭 링크를 사용하여 argv[0]을 쉘코드를 심도록 하는 것이다. 이때 ln -s 명령어를 사용해야하는데 평소에 쓰던 25bytes 쉘코드를 사용할 경우에는 \x2f가 담긴 쉘코드를 사용하면 안된다. 왜냐하면 /로 인식하여 하위디렉토리를 찾기 때문이다. 따라서 \x2f가 들어있지 않은 쉘코드를 찾았다. \xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\x..
우선 코드를 살펴보도록 하자. 이전의 코드에서 추가된 내용은argv[0]의 길이에 대해 검증을 하는 것이다. argv[0]의 길이가 77이 되어야 다음으로 넘어갈 수 있는데 이에 대한 해결 방법으로는 단순히 프로그램을 실행시킬 때 ./orge로 수행하는 것이 아니라 .///////////////////////////////...//orge로 77의 길이를 맞춰서 프로그램을 실행시키면 정상적으로 진행할 수 있다. 다른 부분은 이전 단계와 변한게 없으므로 이전 단계와 동일한 방법으로 공격을 수행한다. argv[2]에 쉘코드를 넣어두고 주소를 출력하도록 하여 다음 값을 얻을 수 있었고 다음 주소로 공격을 시도해보자. 다음단계 쉘을 취득한 모습을 확인할 수 있다.
우선 코드를 확인해보도록 하자. argv[1]의 길이에 대하여 검증하는 기능을 추가하여 RET 의 다음에 이어서 작성하는 공격법도 차단했음을 알 수 있다. 이를 공격하기 위한 방법으로 wolfman 단계에서 사용하였던 공격방법과 마찬가지로 argv[2]에 쉘코드를 입력하여 공격해보았다. argv[2]에 주소를 우선 확인하고 이에 대해 RET주소를 수정하였다. 정상적으로 공격이 되어 다음 단계의 쉘을 취득할 수 있었다.