【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可以任意地址写入内容。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容