一、前置知识
1、%n,不输出字符,但是把已经成功输出的字符个数写入对应的整型指针参数所指的变量。
2、如何确定存储格式化字符串的地址是 printf 将要输出的第几个参数?
运行程序后,在格式化字符串漏洞的位置输入AAAA-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p,看AAAA的数值对应在格式化字符串的第几个参数。
可以看到,AAAA对应的数值0x41414141在格式化字符串的第10个参数。
二、解题思路
0x01 分析文件
0x02 拖入IDA 32位 分析
int __cdecl main(int a1)
{
unsigned int v1; // eax
int fd; // ST14_4
int result; // eax
char nptr; // [esp+4h] [ebp-80h]
char buf; // [esp+14h] [ebp-70h]
unsigned int v6; // [esp+78h] [ebp-Ch]
int *v7