QQ在线支持
商务支持电话
13906050680
技术支持电话
0592-2651619
首页->局域网监控-> 局域网监控,怎样利用格式化字符串漏洞对系统发起攻击
  • 摘要:局域网监控,怎样利用格式化字符串漏洞对系统发起攻击,网络监控,局域网安全,格式化字符串漏洞,漏洞攻击教程,格式化字符串攻击

     

    局域网监控,怎样利用格式化字符串漏洞对系统发起攻击

    什么是格式化字符串攻击?

    格式化字符串漏洞同其他许多安全漏洞一样是由于程序员的懒惰造成的。当你正在阅读本文的时候,也许有个程序员正在编写代码,他的任务是:打印输出一个字符串或者把这个串拷贝到某缓冲区内。他可以写出如下的代码:

    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  
    
        int 
        main(int argc, char **argv) 
        { 
            char buf[100]; 
            int x; 
            if(argc != 2) 
                exit(1); 
            x = 1; 
            snprintf(buf, sizeof buf, argv[1]); 
            buf[sizeof buf - 1] = 0; 
            printf("buffer (%d): %s\n", strlen(buf), buf); 
            printf("x is %d/%#x (@ %p)\n", x, x, &x); 
            return 0; 
        }

    对这个程序有几点说明:第一,目的很简单:将一个通过命令行传递值格式化输出到一个定长的缓冲区里。并确保缓冲区的大小限制不被突破。在缓冲区格式化后,把它输出。除了把参数格式化,还设置了一个整型值随后输出。这个变量是随后我们攻击的目标。现在值得我们注意的是这个值应该始终为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

     

    PS:上文来自互联网,仅用于技术学习,让网络管理员能够防护网络攻击,请勿用于非法用途,否则后果自负承担所有责任。


    作者: AnyView(网络警)网络监控软件   时间: 2014-5-22 15:29:38   点击:     

    相关资讯:
    [网络监控软件在企业网管中应用实践] 降低局域网内网安全风险方法,怎样做好内网安全管理,局域网内网监控
    [网络监控软件在企业网管中应用实践] 企业网管七个错误,网络管理经验谈,怎样做好网络管理,局域网管理策略
    [网络监控软件在企业网管中应用实践] 如何考核您的企业IT安全顾问,怎样对局域网内网安全管控,内网监管
    [网络监控软件在企业网管中应用实践] 网络管理解决方案全攻略,网络监控解决方案全攻略,上网行为管理软件
    [网络监控软件在企业网管中应用实践] 网络安全防范体系及设计原则,网络监控方案,局域网监控方案,电脑监控软件
    [网络监控软件在企业网管中应用实践] 如何最明智地管理员工上网行为,怎样局域网上网监控,员工上网行为监控
    [网络监控软件在企业网管中应用实践] 局域网监控解决方案:中小企业网络安全现状与出路,局域网监控软件
    [网络监控软件在企业网管中应用实践] IP网络监控和局域网监控,逐渐成熟并升温的新兴市场,视频监控,网络监控
    [网络监控软件在企业网管中应用实践] 互联网管理:全球性的责任与思考,网络监控软件重要性,员工上网行为管理
    [网络监控软件在企业网管中应用实践] 网络安全管理三个维度:局域网安全防护,内网监控系统,局域网行为审计
■ AnyView(网络警)网络监控软件--功能检索
  • 服务电话:0592-2651619 / 13906050680 ; 钉钉:15359220936;微信:15359220936;Skype:Amoisoft;
  • 服务邮箱: Sales@amoisoft.com;Order@amoisoft.com;Tech@amoisoft.com;
  • 支持QQ:9908430(综合),850753251(购买1),573982850(购买2),969263561(技术1),53864605(技术2),332056791(技术3)
■ 联系我们获得支持和服务 ■ 信息留言反馈