LOB bugbear->giant
by St1tch문제가 엄청 길어졌다.
하지만 길기만 할 뿐, 이전 문제와 크게 다를것이 없다.
ret와 execve_addr을 비교하는데, 위의 코드를 보면 execve_addr은 라이브러리에서 execve의 주소값을 구해서 저장시킨다.
ret는 argv[1]의 44~47글자를 복사한 값이다.
따라서 ret가 execve여야 하고, 이 함수를 이용해 RTL기법을 이용해 shell을 따야한다.
이전 문제와 거의 똑같다.
우선 스택의 구조이다.
main의 ret는 execve가 되어야한다.
여기서 execve가 실행된 후 ret는 /bin/sh를 실행시키기 위해 system주소가 되어야한다.
system주소의 인자는 system함수가 실행중 일때의 ebp+8이므로, main의 ebp+10에는 /bin/sh의 주소가 들어가야한다.
system ret에는 dummy나 exit함수의 주소가 들어가면 된다.
따라서 이 exploit을 작성하기 위해 &execve, &system, &exit, &/bin/sh 4개의 주소값이 필요하다.
3개의 주소값은 gdb에서 간단히 구할 수 있다.
위에서 구한 system함수의 주소를 이용해 /bin/sh의 주소를 구할 수 있다.
이제 4개의 값을 다 알았으니 바로 공격을 하면된다.
<exploit>
./giant "`python -c 'print "\x90" * 44 + "\x48\x9d\x0a\x40" + "\xe0\x8a\x05\x40" + "\xe0\x91\x03\x40" + "\xf9\xbf\x0f\x40"'`"
자꾸 execve주소가 틀리다해서 구글링 해보니 \x0a가 \x00으로 인식된다고 해서 문자열처리를 한번 더 해줬다.
블로그의 정보
튜기's blogg(st1tch)
St1tch