WEB开发网
开发学院网络安全黑客技术 利用格式化字符串漏洞对系统发起攻击 阅读

利用格式化字符串漏洞对系统发起攻击

 2007-07-15 16:45:29 来源:WEB开发网   
核心提示: 本文中所有的例子都是在x86 BSD/OS 4.1机器上完成,如果你到莫桑比克执行任务超过20年时间可能会对x86不熟悉,利用格式化字符串漏洞对系统发起攻击(3),这是一个little-endian机器,这决定在例子中多精度数字的表示方法,程序还告诉我们变量x的值是1(以十进制和十六进制分

本文中所有的例子都是在x86 BSD/OS 4.1机器上完成。如果你到莫桑比克执行任务超过20年时间可能会对x86不熟悉,这是一个little-endian机器。这决定在例子中多精度数字的表示方法。在这里使用的具体数值会因为系统的差异而不同,这些差异表现在不同体系结构、操作系统、环境甚至是命令行长度。经过简单调整,这些例子可以在其他x86平台上工作。通过努力也可以在其他体系结构的平台上工作。

用Format攻击

现在是我们戴上黑帽子开始以攻击者方式思考问题的时候了。我们现在手头有一个测试程序。知道这个程序有一个漏洞并且了解程序员是在哪里犯错误的(直接把用户输入的命令行参数作为snprintf的格式化参数)。我们还拥有关于printf函数深入的知识,知道如何运用这些知识。让我们开始修补我们的程序吧。

从简单的开始,我们通过简单的参数调用程序。看这儿:

% ./fmtme "hello world" 
  buffer (11): hello world 
x is 1/0x1 (@ 0x804745c)

现在这儿还没有什么特别的事情发生。程序把我们输入的字符串格式化输出到缓冲区里,然后打印出它的长度和数值。程序还告诉我们变量x的值是1(以十进制和十六进制分别显示),x的存储地址是0x804745c。接下来我们试着使用一些格式指令。在下面的例子中我们打印出在格式化字符串之上栈堆中的整型数值:

% ./fmtme "%x %x %x %x" 
  buffer (15): 1 f31 1031 3133 
  x is 1/0x1 (@ 0x804745c)

对这个程序的快速分析可以揭示在调用snprintf函数时程序堆栈的规划:Address Contents    Description 
  fp+8   Buffer     pointer 4-byte address 
  fp+12  Buffer     length 4-byte integer 
  fp+16  &n

上一页  1 2 3 

Tags:利用 格式化 字符串

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接