Assassin
-
LEVEL 16 zombie_assassin write-upSystem hacking training/Hackerschool LOB 2018. 5. 13. 17:09
assassin -> zombie_assassin 소스코드를 분석해보면 힌트부분에 FEBP라는 중요한 힌트가 있다. Fake EBP라는 기법을 이용하면 풀릴것같다. 인자는 2개 이상이여야하고, argv[1][47]이 이전 문제와 동일하게 \xbf, \x40이면 예외처리가 된다. 그리고 strncpy()로 buffer에 argv[1]의 값을 48개 받기 때문에 bof가 터진다. 이 문제의 의도에 맞게 Fake ebp 기법을 이용하여 문제를 풀면된다. Fake ebp에 대해서는 자세하게 따로 다루기로 하고 페이로드를 짜는 요령만 먼저 익혀보자. 사실 Fake ebp 는 FPO와 매우 유사하기 때문에 풀이가 쉬웠다. 먼저 페이로드의 구성은 다음과 같다. `python -c 'print "dummy(4byte)..
-
LEVEL 15 assassin write-upSystem hacking training/Hackerschool LOB 2018. 5. 13. 15:37
giant -> assassin [문제 + 힌트] 소스코드 먼저 분석을 해보면 argc가 2이상 즉 인자값이 2개 이상이여야하고 argv[1][47] 가 \xbf 혹은 \x40이면 안된다. 저 말은 return 할 주소가 \xbf 로 시작하는 스택의 어느 공간도 안되고 \x40으로 시작하는 코드영역도 안된다는 것이다. 그리고 취약점은 strcpy()의 사용으로 인해서 bof가 터진다. 그 후 memset()로 buffer+SFP를 0으로 초기화하면서 프로그램이 종료된다. 이 문제는 간단하게 ret가젯을 이용하여 쉽게 우회가 가능하다. ret의 주소는 \xbf도 \x40도 아니기 때문에 ret 가젯을 이용하여 system()를 불러오던 환경변수에 쉘코드를 넣고 쉘코드를 실행시키던 할 수 있다. objdum..