我可以使用哪些输入来利用该程序中的缓冲区溢出来执行 win() 函数

问题描述 投票:0回答:1

我想利用程序某些方法中的溢出来运行另一个函数win()


#define MAX_PRIORITY_STRSIZE 10 /* len(str(2**32)) */
#define MAX_TITLE_SIZE 0x20
#define MAX_TODOS 0x30

void win(void)
{
    execl("/bin/get_flag", "get_flag", NULL);
}

bool read_title(char* buf, size_t buf_size)
{
    if(!fgets(buf, buf_size, stdin))
    {
        printf("Could not read title...\n");
        return false;
    }

    if(buf[0] == '\n')
    {
        printf("Title cannot be empty!\n");
        return false;
    }

    /* Remove newline in title */
    strtok(buf, "\n");

    if(strlen(buf) > MAX_TITLE_SIZE)
    {
        printf("Title too long!");
        return false;
    }
    return true;
}



bool read_priority(char* priority_buf, size_t buf_size, int32_t* ret)
{
    printf("Priority: ");
    if(!fgets(priority_buf, buf_size, stdin))
    {
        printf("Could not read priority...\n");
        return false;
    }

    if(sscanf(priority_buf, "%d", ret) != 1)
    {
        printf("Invalid input!");
        return false;
    }
    return true;
}

void print_welcome(void)
{
    printf("Welcome to ToDo-List-as-a-Service Demo!\n"
             "Manage ToDo-List to your liking with a simple terminal interface!\n");
}


void print_menu(void)
{
    puts("=================================");
    puts(" What would you like to do next?");
    puts(" A: Add ToDo");
    puts(" C: Mark ToDo as completed");
    puts(" D: Delete ToDo");
    puts(" E: Edit ToDo Title");
    puts(" I: Increase Priority");
    puts(" L: List ToDos");
    puts(" P: Edit ToDo Priority");
    puts(" Q: Quit");
    puts("=================================");
    printf("> ");
}

上面的函数对于这个问题来说是重要的。在测试过程中我发现:

  1. 添加待办事项时,如果优先输入大量数字,则标题将自动成为优先输入的数字的一部分,无需再输入标题,例如

a 优先级:1111111111111111111111111111111 标题:已添加待办事项“11111111111111111111”!

  1. 如果我们编辑所述待办事项的优先级为大量数字,特别是超过 9 位数字,则标题也会更改为其他数字。

我确信这可能是缓冲区溢出问题,我们可以利用它来运行 win() 程序,但我不知道要输入哪些输入。我运行 lldc (因为我使用 Mac)并发现 win_address = 0x100003040 主地址 = 0x1000039b0

c debugging buffer-overflow
1个回答
0
投票

提供的信息不充分,首先,如果你有完整的源代码,首先提供完整的源代码,其次,你提供的地址可能是随机的,取决于PIE是否启用,所以你提供的数据可能不正确。请提供完整的源代码,以便我们进行处理并解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.