我想利用程序某些方法中的溢出来运行另一个函数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("> ");
}
上面的函数对于这个问题来说是重要的。在测试过程中我发现:
a 优先级:1111111111111111111111111111111 标题:已添加待办事项“11111111111111111111”!
我确信这可能是缓冲区溢出问题,我们可以利用它来运行 win() 程序,但我不知道要输入哪些输入。我运行 lldc (因为我使用 Mac)并发现 win_address = 0x100003040 主地址 = 0x1000039b0
提供的信息不充分,首先,如果你有完整的源代码,首先提供完整的源代码,其次,你提供的地址可能是随机的,取决于PIE是否启用,所以你提供的数据可能不正确。请提供完整的源代码,以便我们进行处理并解决您的问题。