跳转至

6.Format String Attack

约 233 个字 预计阅读时间 1 分钟

Format String Vulnerability

概述

Printf()用于根据格式打印字符串。第一个参数称为格式字符串。这种格式化打印字符串函数也包括sprintf、fprintf等。攻击者控制第一个format string,从而进行任意地址的读和写。

Format格式指示符image-20230529133608506

任意地址读

Caller函数的栈被越界访问image-20230529134728641

一个例子来了解printf的参数读取image-20230529135250153image-20230529135257600

任意地址写

printf如何修改内存,简而言之,百分号就代表va_list会滑动

image-20230529141610702image-20230529141627977image-20230529141635521image-20230529141642597

劫持控制流

老师略讲

降低风险

image-20230529142338993image-20230529142346620

UAF and Type Confusion

UAF

程序在heap上已经把memory free掉,但是指针的地址还是有效的,再去使用这个指针,就是UAF(Use After Free)。

image-20230529142842282

如上例子,我们可以通过buf1悬挂指针来修改buf2或buf3。

image-20230529143001886image-20230529143007131image-20230529143259738

Double Free

image-20230529144028910image-20230529144048352

Type Confusion

向下的类型转换是不安全的,这个主要用在C++中

image-20230529144322135

UAF In Practice

image-20230529145639675

image-20230529145647045

image-20230529145654435

本文总阅读量