利用格式化字符串漏洞对系统发起攻击
日期:2007年4月18日 作者: 查看:[大字体 中字体 小字体]-
【编者按:一个很小的疏忽,就会酿成危机系统安全的大患!】
什么是格式化字符串攻击?
格式化字符串漏洞同其他许多安全漏洞一样是由于程序员的懒惰造成的。当你正在阅读本文的时候,也许有个程序员正在编写代码,他的任务是:打印输出一个字符串或者把这个串拷贝到某缓冲区内。他可以写出如下的代码:
printf("%s", str);
但是为了节约时间和提高效率,并在源码中少输入6个字节,他会这样写:printf(str);
为什么不呢?干嘛要和多余的printf参数打交道,干嘛要花时间分解那些愚蠢的格式?printf的第一个参数无论如何都会输出的!程序员在不知不觉中打开了一个安全漏洞,可以让攻击者控制程序的执行,这就是不能偷懒的原因所在。
为什么程序员写的是错误的呢?他传入了一个他想要逐字打印的字符串。实际上该字符串被printf函数解释为一个格式化字符串(format string)。函数在其中寻找特殊的格式字符比如"%d"。如果碰到格式字符,一个变量的参数值就从堆栈中取出。很明显,攻击者至少可以通过打印出堆栈中的这些值来偷看程序的内存。但是有些事情就不那么明显了,这个简单的错误允许向运行中程序的内存里写入任意值。
Printf中被忽略的东西
在说明如何为了自己的目的滥用printf之前,我们应该深入领会printf提供的特性。假定读者以前用过printf函数并且知道普通的格式化特性,比如如何打印整型和字符串,如何指定最大和最小字符串宽度等。除了这些普通的特性之外,还有一些深奥和鲜为人知的特性。在这些特性当中,下面介绍的对我们比较有用:
* 在格式化字符串中任何位置都可以得到输出字符的个数。当在格式化字符串中碰到"%n"的时候,在%n域之前输出的字符个数会保存到下一个参数里。例如,为了获取在两个格式化的数字之间空间的偏量:
int pos, x = 235, y = 93;
printf("%d %n%d\n", x, &pos, y);
printf("The offset was %d\n", pos);* %n格式返回应该被输出的字符数目,而不是实际输出的字符数目。当把一个字符串格式化输出到一个定长缓冲区内时,输出字符串可能被截短。不考虑截短的影响,%n格式表示如果不被截短的偏量值(输出字符数目)。为了说明这一点,下面的代码会输出100而不是20:
char buf[20];
int pos, x = 0;
snprintf(buf, sizeof buf, "%.100d%n", x, &pos);
printf("position: %d\n", pos);简单的例子
除了讨论抽象和复杂的理论,我们将会使用一个具体的例子来说明我们刚才讨论的原理。下面这个简单的程序能满足这个要求:
/*
* fmtme.c
* Format a value into a fixed-size buffer
*/#include <stdio.h>
int
- [1] [2] [3] 下一页
-
- 利用格式化字符串漏洞对系统发起攻击 相关文章:
- ·利用插件来校验XHTML是否符合Web标准
- ·Web2.0在中国步入歧途 缺赢利模式VC有错
- ·利用UNIX的TFTP和RCP配置路由器
- ·黑客如何利用文件包含漏洞进行网站入侵
- ·利用iTextSharp生成Pdf一个小例子
- ·ASP.Net利用CSS实现多界面的方法
- ·利用XMLHTTP无刷新添加数据
- ·异域风情 奥地利美丽风景集
- ·网站优化:怎么利用Tags进行SEO
- ·利用expression实现界面对象的批量控制
- 利用格式化字符串漏洞对系统发起攻击 相关软件
- ·魂之利刃4公布宣传片
- ·NDS《胜利11人DS 中文汉化版》模拟器
- ·《超级马利奥64 DS》模拟器下载
- ·《毛利元就三箭之誓》试玩
- ·NDS《哈利波特和凤凰令》模拟器
- ·亚历山大·别利亚耶夫作品集V1.0
- ·《哈利波特与凤凰社》PC版试玩
- ·秘书长——一场正义与腐败的权利博弈
- ·法拉利赛车2 汉化版
- ·《命令与征服3泰伯利亚战争》全版本修改器全集
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
精品推荐
热点TOP10
- ·Telnet高级入侵攻略及原理
- ·最详细的黑客入门法则
- ·Windows黑客编程基础
- ·我是怎么进入他人计算机的
- ·菜鸟变黑客高手
- ·菜鸟都可以入侵一个网吧的所有电脑
- ·从零开始学黑客:网络黑客新手入门指南
- ·流光5.0使用小窍门
- ·黑客入侵前的信息收集
- ·木马是如何启动的
- ·最好的入侵linux教程
- ·流光破解email帐号教程
- ·黑客破解电脑密码实用技巧大全!
- ·入侵命令详解
- ·多种DDoS攻击技术方法
- ·经典:各个网络端口的入侵方法
- ·理想已经滑落——“中国黑客”10年嬗变
- ·教你如何:入侵UNIX和Linux服务器入门
- ·远程主机探测技术-扫描篇
- ·黑客技术之知道对方IP入侵别人的电脑
特别推荐
- ·多种DDoS攻击技术方法
- ·黑客入侵前的信息收集
- ·看黑客如何发动对电子邮件系统的攻击
- ·经典:各个网络端口的入侵方法
- ·防范黑客 从两大方面阻止域名被劫持
- ·黑客、红客、蓝客、飞客究竟是什么?
- ·认清虚虚实实的“ARP攻击”防御方法
- ·黑客知识 彻底堵死SQL注入工具漏洞
- ·赛迪网"IT技术百家讲坛"开讲 如何防御黑客?
- ·黑客如何利用DNS欺骗在局域网中挂马
- ·Windows黑客编程基础
- ·黑客很狡猾 如何减轻DDoS攻击危害?
- ·网络攻击的几种攻击与防御手法大揭秘
- ·黑客攻击的几种常用手法及防御技巧
- ·经典常见计算机密码破解实用手册
- ·经典总结:各个网络端口的入侵
- ·最详细的黑客入门法则
- ·Telnet高级入侵攻略及原理
- ·攻防技巧PHP数据库安全之SQL注入
- ·如何有效的抵抗DDOS
