格式化字符串漏洞(Format String Attack)

简介: 格式化字符串漏洞(Format String Attack)

1999年6月发现并公开的

2000年下半年发现了大量软件受到影响,震惊了安全界

格式化字符串相关函数

fprintf

printf

sprintf

snprintf

vfprintf

vprintf

vsprintf

vsnprintf

setproctitile

syslog

格式化字符串常见语法

%d

%u

%s

%x

%p

控制打印宽度

%<正整数>c

打印宽度为n的字符串

关于%n,%hn,%hhn

%n将当前已打印的个数(4字节)写入参数

%hn写入2字节

%hhn 写入1字节

关于$符号

%<正整数n>$<fmt>

printf("0x%2$x:0x%1$x\n",0xddeadbeef,0xcafebabe);

打印结果:

0xcafebabe:0xddeadbeef

参数不足的情况

如果printf参数不足,会发生什么

会假设这些参数的存在,在对应的寄存器上找到这些参数,并做相应的处理

可以用于泄露栈上的数据

可用于泄露栈上的数据

%d 打印signed int

%u 打印unsigned int

%p 打印指针,极void *

%x 打印hex指针,即void *

用于任意内存泄露

%s 打印参数地址处的字符串

对于不同字长的系统

32位:函数调用时参数在栈,格式化字符可控可以泄露栈上的数据

64位:函数调用使用寄存器+栈:格式化字符可控可以泄露特定寄存器和栈上的值

相关文章
|
Python
Python f-string 风格格式化字符串
f-string 是 python3.6 之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。 f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去,实例如下:
125 0
|
索引
String.format() 格式化字符串
1、几种常见的转换符     转换符 说明 实例 %d 整数类型(十进制) 99 %f 浮点类型 99.
860 0
|
Java C# API
MessageFormat对象实现格式化字符串输出,类似C#中的string.format方法
      早在寻找java中类似string .format(str,args...)的方法来格式化字符串,前段时间在网上见过,确信有这种方法,但没有太注意!今天 在写代码中,突然要用到这个功能(方便的多),但一时想不起...
1027 0
[转]用DateTime.ToString(string format)输出不同格式
原文:http://blog.sina.com.cn/s/blog_4f3247900100alqj.html DateTime.ToString()函数有四个重载。一般用得多的就是不带参数的那个了。
804 0
用DateTime.ToString(string format)输出不同格式的日期
DateTime.ToString()函数有四个重载。一般用得多的就是不带参数的那个了。殊不知,DateTime.ToString(string format)功能更强大,能输出不同格式的日期。
896 0
|
安全
OllyDbg Format String 0day分析和利用
文章作者:gyzy [E.S.T](www.gyzy.org)信息来源:邪恶八进制信息安全团队(www.eviloctal.com)本文已经发表在《黑客防线》2007年6月刊。
937 0
|
1月前
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
55 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性