본문 바로가기

LOB

LOB 17번( zombie_assassin → succubus )

cat succubus.c

우선 calling functions continuously를 보면 함수를 연속적으로 호출한다. 코드도 보면 전역변수 check의 값을 확인하면서 순서대로 불러야하는 거 같은데 check값 보면 DO, GYE, GUL, YUT, MO순으로 함수를 불러서 MOsystem함수를 통해 쉘을 따면 될 거 같다. 그리고 //check address부분을 보면 addrDO함수의 주소를 넣고 ret의 주소가 DO함수가 아니면 You must fall in love with DO를 출력하고 종료시키는 걸 보면 ret의 주소가 DO함수의 주소여야 한다. 그리고 //stack destroyer 부분을 보면 buffer+48+100 bufferSFP,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