article thumbnail image
Published 2021. 2. 12. 18:42

이번에는 vampire로 가는 패스워드를 알아보자.

일단 troll에 로그인한다.

 

파일 목록을 살펴보면 vampire.c 파일이 있는 것을 볼 수 있다. cat명령으로 출력시켜보자.

 

코드를 순차적으로 보면 인자의 개수에는 제한이 없고, ret에 덮을 주소는 스택 영역의 주소여야 하며, argv[1][46], 즉 return address의 상위 2번째 바이트가 \xff가 아니어야 한다. 이로 봤을 때 argv[2]에 쉘코드를 삽입하고, ret 영역에 argv[2]의 주소를 덮어씌우면 될 것 같다. 이때 return address의 상위 2번째 바이트가 \xff가 아니어야 한다는 것은 더 낮은 메모리 주소를 가져야 한다는 뜻이다. 스택의 특성상 낮은 메모리 주소를 가지려면 스택프레임의 크키가 커져야 한다. 따라서 쉘코드에 nop를 10만개 삽입해서 공격을 진행해봤다.

 

일단 vampire파일을 복사한 후 10만개 짜리 nop를 삽입해서 복사 파일을 실행했다.

 

core파일을 확인해보니 nop 영역이 \xbffe~에 존재했다.

return address를 \xbffe7687로 정하고 공격을 진행했다.

 

성공적으로 쉘이 실행됐다!

vampire로 가는 패스워드는 music world이다.

복사했습니다!