article thumbnail image
Published 2021. 2. 9. 17:48

오늘은 troll로 가는 패스워드를 알아보자.

orge에 로그인 후 현재 위치의 파일 목록을 출력했다. 이번엔 troll.c 파일이 있다. troll.c 파일을 출력시켜보자.

here is changed 주석을 보면 이번엔 인자의 개수를 2개로 제한하는 것을 알 수 있다. 즉 argv[2]를 이용할 수 없다는 뜻이다. 맨 마지막에 one more! 주석에는 argv[1]의 값을 0으로 초기화 해주는 것을 볼 수 있다. 이렇게 되면 쉘코드를 argv[1], arg[2]에 넣을 수 없다. 하지만 아직 초기화 되지 않은 공간이 존재한다. argv[0]에 쉘코드를 넣어서 공격해보자.

 

argv[0]은 파일명이다. 그렇기 때문에 파일명을 쉘코드로 바꾼다면 ret를 argv[0]의 주소로 덮어서 쉘을 실행시킬 수 있다. 그런데 기존에 사용했던 쉘코드에는 \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

이 쉘코드로 심볼릭 링크를 만들어보자. 

troll 복사파일인 troll1을 심볼링 링크로 새롭게 만들고 실행시켰다. core 파일이 생성됐다. core 파일을 확인해보자.

0xbffffa87에서 심볼릭 링크의 파일명을 찾았다. 이보다 조금 더 뒤의 주소를 골라 ret 영역에 덮어씌어 보자. 나는 0xbffffa97을 선택했다.

 

troll파일로 심볼릭 링크를 새로 만들고 0xbffffa97를 ret영역에 덮었다.

그 결과 쉘 실행에 성공했다.

troll로 가는 패스워드는 aspirin이다.

복사했습니다!