How printf works——浅谈格式化串漏洞

本博客已经弃用,我的新博客地址:http://jujuba.me/

How printf works——浅谈格式化串漏洞

0x00 简介

格式化字符串漏洞由来已久,其主要原因是程序员在使用printf时未将格式化串的个数
和变量的个数相匹配,给了黑客们可乘之机。
我们可以先来看看printf函数的声明

int printf (const char *__format, ...)

很奇怪吧,printf的argument中有一个...,这表示printf的argument的个数
是没有限制的,写多少个都没事。

比如下面这段代码是可以成功运行的,用gcc编译不会出现任何错误。

int main(){
    char * s = "hello";
    printf(s,s,s);
}

0x01 原理

printf函数和一般函数不太相同,因为它的argument(包括格式化串和变量)可以是任意
个,那么当程序被编译成二进制代码之后,CPU会知道格式化串和变量的分界线吗?肯定是
不知道的。假如程序员在写程序时使用了printf(something)这种写法的话,相
当于没有限定自己的格式化串,那么我们就可以自己输入格式化串,此时CPU就会被误导,
以为自己要往高地址方向读很多个变量,从而

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值