본문 바로가기

WARGAME/hackerschool ftz,lob

[BOF 원정대] bugbear-> giant (level 14)

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





공격 코드