Beispiel #1
0
        public void Authenticate(string username, string password)
        {
            PacketGeneral packet_auth = new PacketGeneral(Packet.SSH_MSG_USERAUTH_REQUEST);

            packet_auth.GetStreamWriter().WriteString("ssh-userauth");
            SendPacket(crypto_encryptor, packet_auth);
            Packet packet = RecvPacket(crypto_decryptor);

            if (packet.Message == Packet.SSH_MSG_SERVICE_ACCEPT)
            {
                Console.WriteLine("SSH_MSG_SERVICE_ACCEPT");
            }

            packet_auth = new PacketGeneral(50);
            NetworkByteWriter nbw_cache = packet_auth.GetStreamWriter();

            //SSH_MSG_USERAUTH_REQUEST
            nbw_cache.WriteString(username);
            nbw_cache.WriteString("ssh-connection");
            nbw_cache.WriteString("password");
            nbw_cache.WriteByte((byte)0);
            nbw_cache.WriteString(password);

            SendPacket(crypto_encryptor, packet_auth);

            packet = RecvPacket(crypto_decryptor);

            if (Packet.SSH_MSG_USERAUTH_SUCCESS == packet.Message)
            {
                Console.WriteLine("oh ya!");
            }
        }
Beispiel #2
0
        public void KeyVerify(string algorithm, HashAlgorithm hash)
        {
            MemoryStream      cache     = new MemoryStream();
            NetworkByteWriter nbr_cache = new NetworkByteWriter(cache);

            nbr_cache.WriteString(verify_v_c);
            nbr_cache.WriteString(verify_v_s);
            nbr_cache.WriteBlob(verify_i_c);
            nbr_cache.WriteBlob(verify_i_s);
            nbr_cache.WriteBlob(verify_k_s);
            nbr_cache.WriteMPInt(verify_e);
            nbr_cache.WriteMPInt(verify_f);
            nbr_cache.WriteMPInt(verify_k);
            nbr_cache.Flush();

            if (algorithm == "ssh-rsa")
            {
                verify_h = hash.ComputeHash(cache.ToArray());

                RSAParameters RSAKeyInfo = new RSAParameters();
                {
                    MemoryStream      ms_tmp  = new MemoryStream(verify_k_s);
                    NetworkByteReader nbr_tmp = new NetworkByteReader(ms_tmp);

                    string     type  = nbr_tmp.ReadString();
                    BigInteger rsa_e = nbr_tmp.ReadMPInt();
                    BigInteger rsa_n = nbr_tmp.ReadMPInt();
                    RSAKeyInfo.Modulus  = NetworkByteUtils.BigIntegerToUnsignedArray(rsa_n);
                    RSAKeyInfo.Exponent = NetworkByteUtils.BigIntegerToUnsignedArray(rsa_e);
                }
                byte[] rsa_signature_blob;
                {
                    MemoryStream      ms_tmp  = new MemoryStream(verify_sig);
                    NetworkByteReader nbr_tmp = new NetworkByteReader(ms_tmp);

                    string type = nbr_tmp.ReadString();
                    rsa_signature_blob = nbr_tmp.ReadBlob();
                }


                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                RSA.ImportParameters(RSAKeyInfo);
                RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(RSA);
                RSADeformatter.SetHashAlgorithm("SHA1");

                byte[] xx2    = SHA1.Create().ComputeHash(verify_h);
                bool   verify = RSADeformatter.VerifySignature(xx2, rsa_signature_blob);
            }
        }
        public void KeyVerify(string algorithm, HashAlgorithm hash)
        {
            MemoryStream cache = new MemoryStream();
            NetworkByteWriter nbr_cache = new NetworkByteWriter(cache);

            nbr_cache.WriteString(verify_v_c);
            nbr_cache.WriteString(verify_v_s);
            nbr_cache.WriteBlob(verify_i_c);
            nbr_cache.WriteBlob(verify_i_s);
            nbr_cache.WriteBlob(verify_k_s);
            nbr_cache.WriteMPInt(verify_e);
            nbr_cache.WriteMPInt(verify_f);
            nbr_cache.WriteMPInt(verify_k);
            nbr_cache.Flush();

            if (algorithm == "ssh-rsa")
            {
                verify_h = hash.ComputeHash(cache.ToArray());

                RSAParameters RSAKeyInfo = new RSAParameters();
                {
                    MemoryStream ms_tmp = new MemoryStream(verify_k_s);
                    NetworkByteReader nbr_tmp = new NetworkByteReader(ms_tmp);

                    string type = nbr_tmp.ReadString();
                    BigInteger rsa_e = nbr_tmp.ReadMPInt();
                    BigInteger rsa_n = nbr_tmp.ReadMPInt();
                    RSAKeyInfo.Modulus = NetworkByteUtils.BigIntegerToUnsignedArray(rsa_n);
                    RSAKeyInfo.Exponent = NetworkByteUtils.BigIntegerToUnsignedArray(rsa_e);
                }
                byte[] rsa_signature_blob;
                {
                    MemoryStream ms_tmp = new MemoryStream(verify_sig);
                    NetworkByteReader nbr_tmp = new NetworkByteReader(ms_tmp);

                    string type = nbr_tmp.ReadString();
                    rsa_signature_blob = nbr_tmp.ReadBlob();
                }

                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                RSA.ImportParameters(RSAKeyInfo);
                RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(RSA);
                RSADeformatter.SetHashAlgorithm("SHA1");

                byte[] xx2 = SHA1.Create().ComputeHash(verify_h);
                bool verify = RSADeformatter.VerifySignature(xx2, rsa_signature_blob);
            }
        }
Beispiel #4
0
        public void OpenChannel(VideoTerminal x)
        {
            PacketGeneral     packet_openchannel = new PacketGeneral(90);
            NetworkByteWriter nbw = packet_openchannel.GetStreamWriter();

            nbw.WriteString("session");
            nbw.WriteUInt32(0);
            nbw.WriteUInt32(1048576);
            nbw.WriteUInt32(16384);

            SendPacket(crypto_encryptor, packet_openchannel);

            Packet            packet = RecvPacket(crypto_decryptor);
            NetworkByteReader nbr    = packet.GenerateReader();

            nbr.ReadByte();
            uint recipient_channel = nbr.ReadUInt32();

            uint sender_channel      = nbr.ReadUInt32();
            uint initial_window_size = nbr.ReadUInt32();
            uint maximum_packet_size = nbr.ReadUInt32();


            PacketGeneral packet_pty = new PacketGeneral(Packet.SSH_MSG_CHANNEL_REQUEST);

            nbw = packet_pty.GetStreamWriter();
            nbw.WriteUInt32(recipient_channel);
            nbw.WriteString("pty-req");
            nbw.WriteByte(0);
            nbw.WriteString("vt100");
            nbw.WriteUInt32(80);
            nbw.WriteUInt32(24);
            nbw.WriteUInt32(640);
            nbw.WriteUInt32(480);
            nbw.WriteString("");
            SendPacket(crypto_encryptor, packet_pty);

            PacketGeneral packet_shell = new PacketGeneral(Packet.SSH_MSG_CHANNEL_REQUEST);

            nbw = packet_shell.GetStreamWriter();
            nbw.WriteUInt32(recipient_channel);
            nbw.WriteString("shell");
            nbw.WriteByte(0);
            SendPacket(crypto_encryptor, packet_shell);


            while (true)
            {
                if (RecvAvailable())
                {
                    packet = RecvPacket(crypto_decryptor);
                    switch (packet.Message)
                    {
                    case Packet.SSH_MSG_CHANNEL_WINDOW_ADJUST:
                        break;

                    case Packet.SSH_MSG_CHANNEL_DATA:
                        PacketChannelData p = new PacketChannelData(packet);
                        p.Parse();
                        x.HandleServerData(p.data);
                        break;

                    default:
                        break;
                    }
                }
                else
                {
                    string data = x.GetClientData();
                    if (data.Length != 0)
                    {
                        PacketGeneral packet_key = new PacketGeneral(Packet.SSH_MSG_CHANNEL_DATA);
                        nbw = packet_key.GetStreamWriter();
                        nbw.WriteUInt32(recipient_channel);
                        nbw.WriteString(data);
                        SendPacket(crypto_encryptor, packet_key);
                    }
                }
            }
        }