cat succubus.c
우선 calling functions continuously를 보면 함수를 연속적으로 호출한다. 코드도 보면 전역변수 check의 값을 확인하면서 순서대로 불러야하는 거 같은데 check값 보면 DO, GYE, GUL, YUT, MO순으로 함수를 불러서 MO의 system함수를 통해 쉘을 따면 될 거 같다. 그리고 //check address부분을 보면 addr에 DO함수의 주소를 넣고 ret의 주소가 DO함수가 아니면 You must fall in love with DO를 출력하고 종료시키는 걸 보면 ret의 주소가 DO함수의 주소여야 한다. 그리고 //stack destroyer 부분을 보면 buffer+48+100 즉 buffer와 SFP,RET 영역과 100byte를 빼고 모든 스택의 값을 0으로 초기화시킨다. 148byte를 쓸 수 있다.
우선 각 함수의 주소를 찾기 위해 readelf –s ./succubus | grep FUNC을 통해 보자.
DO : 0x080487ec
GYE : 0x080487bc
GUL : 0x0804878c
YUT : 0x0804875c
MO : 0x08048724
/bin/sh의 주소를 알기위해 대신 넣어준 AAAA이후가 /bin/sh의 주소이다.
→0xbffffa54
공격했는데 세그멘테이션 폴트가 떠서 계속 주소를 바꾸면서 삽질하다보니 쉘이 실행되었다.
'LOB' 카테고리의 다른 글
LOB 16번 ( assassin → zombie_assassin ) (0) | 2016.11.14 |
---|---|
LOB 15번 (giant → assasin) (0) | 2016.10.13 |
LOB 14번 (bugbear → giant) (0) | 2016.10.13 |
LOB 13번 (darkknight → bugbear) (0) | 2016.10.13 |
LOB 12번 (golem → darknight) (0) | 2016.10.06 |