writeup
-
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..
-
LEVEL 14 giant write-upSystem hacking training/Hackerschool LOB 2018. 5. 12. 19:45
bugbear -> giant 소스코드를 분석해보면 인자가 두개 이상인지 먼저 체크하고 맞다면 gain address of execve 부분을 통해서 execve()의 주소를 구해온다. 이 주소를 구하는 방법은 먼저 lib_addr에 libc의 base주소를 구하고, execve_offset에 execve()의 offset을 구하여 마지막 execve_addr에 lib_addr + (int)execve_offset을 하여 execve()의 주소를 구한다. 그리고 memcpy()를 이용하여 ret에 argv[1][44]의 값을 넣고 execve()의 주소와 같은지 확인한다. 다를경우 예외처리가 되고 같을 경우 strcpy()를 통해 bof가 터진다. 따라서 익스를 하기 위해서는 execve()의 주소를 a..