execve를 이용한 RTL 문제이다.
man execve를 해보면 다음과 같다.
#include <unistd.h>
int execve (const char *filename, char *const argv[], char *const envp[]);
따라서 우리는 ret주소에 execve 주소를 넣고 8바이트 뒤에 위치한 곳에 filename, argv[], envp[]를 넣어주면 된다.
filename에는 /bin/sh 을 넣어주고,
argv[]에는 /bin/sh 가 존재하는 주소 값을 적어줘야 하는데 그러기 위해서 파일명자체를 /bin/sh로 만들면 argv[0] 부분에 /bin/sh가 남게 되고 이곳의 주소값을 적어주면 된다.
마지막 envp는 0
따라서 다음과 같다.
execve : 0x400a9d48
exit : 0x400391e0
/bin/sh : 0x400fbff9
argv[] : 0xbffffff7
NULL : 0xbffffffc
공격 코드
'WARGAME > hackerschool ftz,lob' 카테고리의 다른 글
[BOF 원정대] golem-> darkknight (level 12) (0) | 2014.08.03 |
---|---|
[BOF 원정대] darkknight-> bugbear(level 13) (0) | 2014.08.03 |
[BOF 원정대] giant -> assassin(level 15) (0) | 2014.08.03 |
[BOF 원정대] assassin-> zombie_assassin(level 16) (0) | 2014.08.03 |
[BOF 원정대] zombie_assassin-> succubus(level 17) (0) | 2014.08.03 |