cgy12306

[LOB] assassin 본문

Wargame/LOB

[LOB] assassin

cgy12306 2019. 9. 30. 10:52

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