I'm trying to give an example of how that stack works by presenting a working buffer overrun example to my colleagues at work. It's hard to find working modern day examples but I have one that works, the only problem is I don't understand it!
I think by providing a string longer than the buffer as a password it is overwriting the compare variable. The example said to provide a password of zzzzzzzzzzzz but I don't see how that turns a 1 to a 0.
Can anyone help?
#include <stdio.h>
#include <string.h>
#define PASSWORD "secret233"
#define BUFFER_SIZE 10
int check_pass(char *input)
{
    int compare = 1;
    char buffer[BUFFER_SIZE];
    compare = strcmp(input, PASSWORD);
    printf("[matched value]:%d\n", compare);
    strcpy(buffer, input);
    printf("[matched value]:%d\n", compare);
    return !compare;
}
main()
{
    int passed = 0;
    char input[1024];
    while (1) {
        printf("Enter password: ");
        scanf("%s", input);
        passed = check_pass(input);
        if (passed) {
            printf("--Password correct!\n");
            break;
        }
        else
            printf("--Wrong password. Try again.\n\n");
    }
}