[PicoCTF_2013] overflow1
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 32 |
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include "dump_stack.h"
void vuln(int tmp, char *str) { int win = tmp; char buf[64]; strcpy(buf, str); dump_stack((void **) buf, 23, (void **) &tmp); printf("win = %d\n", win); if (win == 1) { execl("/bin/sh", "sh", NULL); } else { printf("Sorry, you lose.\n"); } exit(0); }
int main(int argc, char **argv) { if (argc != 2) { printf("Usage: stack_overwrite [str]\n"); return 1; }
uid_t euid = geteuid(); setresuid(euid, euid, euid); vuln(0, argv[1]); return 0; } |
vuln 함수의 지역 변수 win의 값이 1이면 쉘을 실행해줍니다.
vuln 함수의 두 번째 파라미터인 str은 ebp+0xc이고 buf는 ebp-0x4c입니다.
win 변수는 ebp-0xc에 있습니다.
- 0xc – ( - 0x4c ) = 64
buf의 시작 주소와 win 변수의 차이는 64byte입니다.
strcpy 함수의 BOF 취약점을 이용해서 win을 덮겠습니다.
쉘을 취득했습니다.
'System&Write up > CTF' 카테고리의 다른 글
[Pico CTF 2013] overflow4 (0) | 2018.01.17 |
---|---|
[Pico CTF 2013] overflow3 (0) | 2018.01.16 |
[Pico CTF 2013] overflow2 (0) | 2018.01.14 |
[Plaid CTF 2013] ropasaurusrex (0) | 2018.01.03 |
[제 1회 Root CTF] Point to pointer! - (529 point) (0) | 2017.12.24 |