安全漏洞--字符串格式化(FSV)漏洞分析

一 漏洞简介



  格式化字符串漏洞(format string vulnerability),也是一种比较常见的漏洞类型。常出现于c语言格式化字符串一系列函数。比如printfsprintf,fprintf等一系列家族函数。由于此函数对参数类型和个数过滤不严格,导致用户可以构造

任意数据,实现读取写入内存数据,从而实现代码执行。


二 原理分析



至于为什么会产生字符串溢出漏洞呢,我们来看看产生溢出的关键函数。比如说


_Check_return_opt_ _CRTIMP int __cdecl printf(_In_z_ _Printf_format_string_ const char *_Format, ...);


这个输出控制字符串函数。解释一下参数:

Format是个格式化控制字符串,里面控制这个字符串输出的格式。

常见格式控制如下列表




...省略号代表是用户可以控制的参数类型和列表。

关键就在于这个位置,参数类型和数量的不确定性,如果允许用户自己定义这两个参数。

那么就可以经过精心够早实现对程序任意位置的数据读取和写入,那么就能构造出漏洞

利用程序,从而控制我们的程序流程。


涉及的关键控制符

%n功能

是将%n之前printf已经打印的字符个数赋值给传入的指针。通过%n我们就可以修改内存中

的值了。例如: printf("aaaaaaa%n\n",&a);

printf("%d\n",a);

可以发现a的值被printf函数修改为了7。这就是%n的功效了。这是一个不常用到的参数.

它的功能是将%n之前printf已经打印的字符个数赋值给传入的指针。通过%n我们就可以</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值