cgy12306
[LOB] assassin 본문
ID : assassin
PW : pushing me away
assassin문제는 buffer에 복사할 때 48byte만 복사를 한다.
Fake Ebp를 사용하면 될 것이다.
Fake Ebp는 sfp값을 변조해서 leave 과정에서 이전 함수의 ebp를 변조된 값으로 복구 시키고, 그 다음 ret에 leave-ret을 다시 실행해서 원하는 주소로 갈 수 있게 하는 기법이다.
시나리오를 생각해보자.
sfp를 buffer-4로 조작하고, ret에 leave-ret 가젯을 넣어준다. 그러면 leave 과정에서 이전 함수의 ebp를 복구하기 위해 현재 sfp(buffer-4)값을 넣고, 돌아온 &(ebp + 4byte)값을 ret 주소로 삼을 것이다. 마지막 ret 주소에 system 함수를 호출하는 주소를 넣어준 후 dummy 4byte를 넣고 /bin/sh이 들어있는 주소를 넣어줄 것이다.
/bin/sh의 주소를 알아보자.
system의 주소를 확인해 보자.
leave하기 전에 break point를 걸어줘서 스택을 확인해보자.
A를 40개 넣어줬다.
buffer의 시작 주소는 0xbffffa8c이다.
주소 정리
/bin/sh : 0x400fbff9
system : 0x040058ae
&buffer-4 : 0xbfffffa8c
leave : 0x080484df
페이로드는 이렇게 될 것이다. "system 주소"(4) + "dummy"(4) + "/bin/sh 주소"(4) + "A"*28(28) + "&buffer-4"(4) + "leave-ret 가젯"
./zombie_assassin `python -c 'print "\xe0\x8a\x05\x40" + "A"*4 + "\xf9\xbf\x0f\x40" + "A"*28 + "\x8c\xfa\xff\xbf" + "\xdf\x84\x04\x08"'`
'Wargame > LOB' 카테고리의 다른 글
[LOB] succubus (0) | 2019.09.30 |
---|---|
[LOB] zombie_assassin (0) | 2019.09.30 |
[LOB] giant (0) | 2019.09.30 |
[LOB] bugbear (0) | 2019.09.30 |
[LOB] darkknight (0) | 2019.09.30 |
Comments