【PWN】格式化字符串

C语言中经常使用scanfpringtf进行格式化的读入和输出,但是没有做好过滤可能导致程序漏洞。

基础知识

通常C语言中的占位符有如下:

占位符 作用
%p 以16进制输出指针的值(地址)
%x 输出16进制值(与%p有区别)
%s 输出字符串值
%d 输出10进制整数
%n 占位符前面成功输入的字符个数写入变量中

%number$p可以指定后number个参数输出。

漏洞点

若程序中直接使用printf(str),且str我们可以控制,则在str中输入格式化字符串,可以泄露出栈内容,且可以进行任意地址写。
利用方式:

  1. 泄露出栈中内容,找到栈中str的位置(利用%number$x)进行探查。
  2. 构造payload地址+填充字符+%number$n可以任意地址写入内容。

你可能感兴趣的:(【PWN】格式化字符串)