У меня есть несколько проблем ctf, но эта действительно мне подходит.
Можно ли редактировать строки кода удаленно?
В коде soucre (представленном ниже) этот код вызовет system (), но в строке 12 bool отключает вызов. Кроме того, в void newsletter () он запускает segfault, но я не совсем понимаю, что он делает или как его обойти / изменить.
Спасибо!
Я пытался просто ввести команды, которые будут проходить, например, ввести 2, а затем | чтобы добавить команды, но ни одна из них не показывает вывод. Я действительно застрял и понятия не имею, куда идти отсюда.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <unistd.h>
void check_date();
void newsletter();
bool date_enabled = false;
int main() {
gid_t gid = getegid();
setresgid(gid, gid, gid);
setbuf(stdout, NULL);
printf("Welcome to the new portal!\n");
char action = 0;
char line[128];
while (action != 'x') {
printf("What would you like to do?\n");
printf("1.) Sign up for our newsletter!\n");
printf("2.) Check the date.\n");
printf("x.) Exit.\n");
fgets(line, sizeof line, stdin);
action = line[0];
if (action == '1') {
newsletter();
} else if (action == '2') {
check_date();
} else if (action != 'x') {
printf("Sorry, I didn't recognize that.\n");
}
printf("\n");
}
}
void check_date() {
printf("Here's the current date:\n");
if (date_enabled) {
system("/bin/date");
} else {
printf("Sorry, date has been disabled.\n");
}
}
void newsletter() {
printf("Thanks for signing up for our newsletter!\n");
printf("Please enter your email address below:\n");
char email[256];
fgets(email, sizeof email, stdin);
printf("I have your email as:\n");
printf(email);
printf("Is this correct? [Y/n] ");
char confirm[128];
fgets(confirm, sizeof confirm, stdin);
if (confirm[0] == 'Y' || confirm[0] == 'y' || confirm[0] == '\n') {
printf("Great! I have your information down as:\n");
printf("Name: Evan Shi\n");
printf("Email: ");
printf(email);
} else {
printf("Oops! Please enter it again for us.\n");
}
int segfault = *(int*)0;
}
с момента написания нескольких команд, таких как 2 | Это не работает, я не знаю, что еще я могу сделать. Для этого ctf мне нужно найти в коде флаг, который выглядит как tjctf {actualflaggoeshere}, или иметь возможность каким-то образом его получить.