[PicoCTF-2013] overflow3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include "dump_stack.h"
/* * Goal: Get the program to run this function. */ void shell(void) { execl("/bin/sh", "sh", NULL); }
void vuln(char *str) { char buf[64]; strcpy(buf, str); dump_stack((void **) buf, 21, (void **) &str); }
int main(int argc, char **argv) { if (argc != 2) { printf("Usage: buffer_overflow [str]\n"); return 1; }
uid_t euid = geteuid(); setresuid(euid, euid, euid); printf("shell function = %p\n", shell); vuln(argv[1]); return 0; } |
shell을 실행시켜주는 shell 함수가 보입니다.
strcpy 함수의 BOF 취약점을 이용해서 return address를 shell 함수로 우회해주면 될 것 같습니다.
buf의 시작 주소는 ebp-0x48입니다.
return address는 ebp+0x4에 있습니다.
0x4 – ( -0x48 ) = 76
buf의 시작 주소와 return address의 차이는 76byte입니다.
아무 인자나 넣고 실행해보면 shell 함수의 위치도 알려줍니다.
쉘을 취득했습니다.
'System&Write up > CTF' 카테고리의 다른 글
[Pico CTF 2013] overflow5 (0) | 2018.01.18 |
---|---|
[Pico CTF 2013] overflow4 (0) | 2018.01.17 |
[Pico CTF 2013] overflow2 (0) | 2018.01.14 |
[Pico CTF 2013] overflow1 (0) | 2018.01.14 |
[Plaid CTF 2013] ropasaurusrex (0) | 2018.01.03 |