본문 바로가기

LOB

LOB 14번 (bugbear → giant)

cat giant.c

일단 지금 당장 알 수 있는 건 ret 주소가 execve_addr이 아니면 안된다는 거다.

우선 execve가 무엇을 하는 건지 찾아보자

 

execve(const char *path, char *const argv[], char *const envp[] );

첫 번째 인자에 path에 파일경로를 지정해주고 두 번째 파일의 인자로 들어가는데 포인터 배열이다. 마지막에는 NULL이 들어가야 한다.

(http://m.blog.naver.com/bestheroz/116479172)


retexecve 주소를 덮으면

LOW | execve() | execveRET | path | argv[] | envp[] | HIGH

LOW | execve() | system() | exit() | “bin/sh” | NULL | HIGH

execve함수로 exit함수가 실행되면 바로 종료되고 RET에 있는 system함수가 실행되면서 두 번째 인자로 전달된 bin/sh가 실행된다.

 

우선 execvesystem,exit함수의 주소를 알아내자


system : 0x40058ae0 execve : 0x400a9d48 exit : 0x400391e0


코드를 짜고 /bin/sh 주소를 알아내자

 

코드짜고 공격했는데 자꾸 에러가 뜬다. 그래서 알아보니 \x0a가 엔터라서 안된다고 한다. 앞전에 \x2f인가를 디렉토리 구분자로 인식하는 거랑 같은 문제인듯하다. 그래서 “”로 다같이 묶어줘야 한다고 한다.

 

그래서 “”로 묶어주고 했는데 또 안된다. 계속 생각해보니 bash2안했다.

 


'LOB' 카테고리의 다른 글

LOB 16번 ( assassin → zombie_assassin )  (0) 2016.11.14
LOB 15번 (giant → assasin)  (0) 2016.10.13
LOB 13번 (darkknight → bugbear)  (0) 2016.10.13
LOB 12번 (golem → darknight)  (0) 2016.10.06
LOB 11번(skeleton → golem)  (0) 2016.10.04