Files
OffSec-CTF/lab1_2_recap/01_parrot_cage/main.c
2026-05-10 20:42:33 +02:00

49 lines
1022 B
C

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdint.h>
__attribute__((noinline))
void win(void) {
char *flag = getenv("FLAG");
puts(flag);
fflush(stdout);
_exit(0);
}
__attribute__((noinline))
void vuln(void) {
char buf[64];
puts("=== Polly's Parrot Cage ===\n"
"Polly repeats everything you say!\n"
"Type a message and Polly will squawk it back.\n"
"Say 'bye' when you're done chatting.\n");
fflush(stdout);
for (;;) {
ssize_t n = read(STDIN_FILENO, buf, 0x200);
if (n < 0) {
perror("read");
exit(1);
}
if (n == 0) {
break;
}
if (n >= 3 && buf[0] == 'b' && buf[1] == 'y' && buf[2] == 'e') {
break;
}
puts(buf);
}
}
int main(void) {
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stdin, NULL, _IONBF, 0);
vuln();
puts("Polly says goodbye! *squawk*");
return 0;
}