StackSmashers

Welcome to the buffer overflow challenge!

What is a Buffer Overflow?

When a program is executed, the CPU processes instructions stored in memory. A stack is an area within memory that is used to store variables, manage function calls, and help control the flow of the program.

When a program receives data from a user, it is stored on the stack in a "buffer", which is a designated chunk of memory reserved for that data.

A buffer overflow occurs when more data is written to a buffer than it can hold. This extra data can overwrite adjacent memory, potentially leading to unexpected behavior or security vulnerabilities.

Relevant Source Code

Take a look at this program. It asks the user to enter a string that will be stored in the buffer section of the memory struct. Note how the buffer can only store 16 bytes.

void win() {
    printf("Congratulations! You've successfully performed a buffer overflow! Here's your flag: FLAG_REDACTED_IN_SNIPPET");
    //The flag has been removed from this version of the code, in the real running code, it will be printed when this function is called
}

int main() {
    struct {
        char buffer[16];
        bool winner;
    } memory;
    memory.winner = false;
    gets(memory.buffer);
    if (memory.winner) {
        win();
    } else {
        printf("Try again!\n");
    }
}

How to Solve the Challenge

Your goal is to overflow the buffer and set the winner variable to true. The winner variable is located immediately after the buffer in memory. By providing more than 16 characters of input, you can overwrite the winner variable.

Enter your input below to attempt the buffer overflow:

Memory layout before input:

0000  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0010  00                                               .

Enter some data: MetaCTF

Memory layout after input:

0000  4d 65 74 61 43 54 46 00 00 00 00 00 00 00 00 00  MetaCTF.........
0010  00                                               .

Try again!