튜기's blogggg

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

활동하기