先检查开了什么保护

1

这里有canary 所以不可以直接栈溢出

打开ida查看

2

可以看到21行

1
printf(buf)

这里有格式化字符串的漏洞

函数只需第一个读取的和第二次输入的一致就会执行拿到权限

3

可以看到,aaaa在第十个被解释成格式化字符串

fmtstr_payload函数:

fmtstr_payload 函数会根据提供的偏移量和写入内容,生成一个用于触发格式化字符串漏洞的 payload。这个 payload 在被输出时会利用格式化字符串的特性,动态地将指定的数据写入到指定的地址上

所以可以将第一个从文件中读取的变成我们写入的内容

4

接着运行

5