본문 바로가기

WARGAME/hackerschool ftz,lob

[해커스쿨 ftz] level 19 -> level 20

hint

main ()

{

char buf[20];

gets(buf);

printf("%s\n", buf);

}





풀이

1. 이전의 문제들에서 setreuid(,)가 빠져있어서 기존의 eggshell에서 사용했던 쉘코드로는 자기 쉘 밖에 얻을 수 없으므로 

쉘코드에 setreuid()를 추가해 준다.

(쉘코드 출처 : http://hkpco.kr/paper/universal%20setreuid%20shellcode.txt )





2. 에그쉘을 실행하여 쉘코드를 환경변수에 올리고 get 이라는 파일을 만들어 실제 환경변수의 주소를 출력한다.





3. attackme를 디스어셈블 해보면 buf[20]에 40바이트를 할당하고 있으므로 스택에서 ret의 위치는 45부터이다.

따라서, 다음과 같이 입력한다.