giant
-
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..