[PicoCTF-2013] overflow2
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 <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include "dump_stack.h"
void vuln(int win, char *str) { char buf[64]; strcpy(buf, str); dump_stack((void **) buf, 23, (void **) &win); 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이면 쉘을 실행해줍니다.
buf의 시작 주소는 ebp-0x48입니다.
첫 번째 파라미터 win은 ebp+0x8에 있습니다.
0x8 – ( -0x48 ) = 80
buf의 시작 주소와 win 변수의 차이는 80byte입니다.
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] overflow1 (0) | 2018.01.14 |
[Plaid CTF 2013] ropasaurusrex (0) | 2018.01.03 |
[제 1회 Root CTF] Point to pointer! - (529 point) (0) | 2017.12.24 |