CTF/XCTF
-
greetingCTF/XCTF 2021. 2. 11. 15:45
Disassembly 디스어셈블리 void main(void) { int32_t iVar1; int32_t in_GS_OFFSET; undefined auStack148 [64]; char acStack84 [64]; int32_t iStack20; iStack20 = *(int32_t *)(in_GS_OFFSET + 0x14); printf("Please tell me your name... "); iVar1 = getnline(acStack84, 0x40); if (iVar1 == 0) { puts("Don\'t ignore me ;( "); } else { sprintf(auStack148, "Nice to meet you, %s :)\n", acStack84); printf(auStack148);..
-
RechoCTF/XCTF 2021. 2. 11. 04:21
Disassembly 디스어셈블리 undefined8 main(void) { int64_t iVar1; char *str; // rbp-0x40 char *buf; // rbp-0x30 undefined8 size; Init(); write(1, "Welcome to Recho server!\n", 0x19); while( true ) { iVar1 = read(0, str, 0x10); if (iVar1 < 1) break; size = atoi(str); if (size < 0x10) { size = 0x10; } len = read(0, buf, size); buf[len] = 0; printf("%s", buf); } return 0; } read를 통해 buf에 입력받을 때 스택 버퍼 오버플로우..
-
welpwnCTF/XCTF 2021. 2. 11. 02:27
Disassembly 디스어셈블리 undefined8 main(void) { void *buf; write(1, "Welcome to RCTF\n", 0x10); fflush(_reloc.stdout); read(0, &buf, 0x400); echo(&buf); return 0; } main은 0x400바이트를 입력받아 echo를 호출한다. void echo(char *dest) { char *dest; // rbp-0x10 strcpy(dest, src); // stack buffer overflow if (strcmp("ROIS", dest) == 0) { printf("RCTF{Welcome}"); puts(" is not flag"); } printf("%s", dest); return; } e..
-
Mary_MortonCTF/XCTF 2021. 2. 11. 00:33
Disassembly 디스어셈블리 void main() { init(); puts("Welcome to the battle ! "); puts("[Great Fairy] level pwned "); puts("Select your weapon "); while( true ) { menu(); scanf("%d", &num); if (num == 1) { bof(); } else if (num == 2) { fsb(); } else if (num == 3) { break; } else { puts("Wrong!"); } } puts("Bye "); exit(0); } main에서는 bof와 fsb를 호출할 수 있다. void fsb(void) { undefined8 str; // rbp - 0x90 mem..
-
int_overflowCTF/XCTF 2021. 1. 21. 00:08
Disassembly 디스어셈블리 undefined4 main(void) { char **ppcVar1; char *pcStack48; int32_t *piStack44; undefined4 uStack36; undefined auStack32 [12]; int32_t iStack20; int32_t var_ch; undefined *puStack12; int32_t var_4h; puStack12 = &stack0x00000004; piStack44 = (int32_t *)0x0; pcStack48 = _reloc.stdin; setbuf(); piStack44 = (int32_t *)0x0; pcStack48 = _reloc.stdout; setbuf(); piStack44 = (int32_t *)0..
-
level2CTF/XCTF 2021. 1. 16. 03:15
Disassembly 디스어셈블리 주어진 바이너리 파일을 Cutter를 사용해 분석하면, 디컴파일이 깔끔하게 되었기에 코드를 쉽게 파악할 수 있다. undefined4 main(void) { int32_t var_4h; vulnerable_function(); system("echo \'Hello World!\'"); return 0; } void vulnerable_function(void) { int32_t var_88h; system("echo Input:"); read(0, &var_88h, 0x100); // Stack buffer overflow return; } main 함수에서 vulnerable_function을 호출하고, 이 함수에서 Stack buffer overflow가 발생한다. ..