Second CTFs part
This commit is contained in:
48
lab1_2_recap/01_parrot_cage/main.c
Normal file
48
lab1_2_recap/01_parrot_cage/main.c
Normal file
@@ -0,0 +1,48 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user