其他类型的软件漏洞
格式化串漏洞
格式化串漏洞产生于数据输出函数中对输出格式解析的缺陷。
printf中的缺陷
以printf
为例:
#include "stdio.h"
void main(){
int a=44,b=77;
printf("a=%d,b=%d\n",a,b); //正确的使用
printf("a=%d,b=%d\n"); //不正确的使用
}
程序正常运行:
我们通过OD来看下流程:
用printf读取内存数据
并且printf
参数中的“格式控制符”是可以被外界输入影响的:
#include “stdio.h”
void main(int argc, char ** argv){
printf(argv[1]);
}
用printf向内存写数据
在格式化控制符中,%n
用于把当前输出的所有数据的长度写回一个变量:
#include <stdio.h>
void