EasyProgram.cs 9.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using FxSsh;
  2. using FxSsh.Services;
  3. using System;
  4. using System.Net;
  5. using System.Net.Sockets;
  6. using System.Reflection;
  7. using WebTerminalServer;
  8. namespace PocSshServer
  9. {
  10. internal class Program
  11. {
  12. private static void Main(string[] args)
  13. {
  14. var server = new SshServer(new StartingInfo(IPAddress.Loopback, 22, "SSH-2"));
  15. server.AddHostKey("ssh-rsa", "BwIAAACkAABSU0EyACAAAAEAAQCpx5TfA9YcHATAil7COKzpypZ0F0gNNEZVfXem76/Sq4PXrVWyd1+UDCJbf72aTp7vf6iYpDRkFjo9lfuJuFulBjp4xUfPZUqF2wt497fGvlfe2Mu/DBXXur/BHtcL9OJs99SV/92Qx+3LGuls8K9rbZP3HFa6kYoYB6jXyKRRB4Ebrm3Fy8jm0zSr5ccjdTNDlxLIvvu8jDdSZhceOK0YHC/EH7pt6x1g2OpGUKmvaevLFmM4uvNeV1e06jCur0rbQbqRbZJsYxQaHfo3h+pPxNhgUJqZ9S5mTjqwFW490VEmgNGHBks7742snsv8NsG+Ia4aRtO85porPYxmxKRB2AjuIKOEQDbxzk16/oIVVywXV3qV4Dp5DENOA0GDhNXOIs4FSzHceBP4YRJ+mqeFB7DgS2opVWupoXTR4BNy3bGFbm2qVqtcMAgVJVvVGrCRs5ijEwiRJtoFC9ICHOAYBFC7MlIzDLOHTBOENg/Gq746Px5ZPrImOheEpOz4OARRPiJ8u27KKA3AMQ1CozkwptgLVB2mx7MgMzeV2gTuc3nrrfM1ZETWv7RqqOXMlEuYeZWAo6h9mAzW2qh4NcnLULeSfMzs6GQ3HKq/Hn+JdlShLajkUDXyfgA/nWvDmTCTIB1608jIppkiE5dC3sdW0+a7irNqQK0YCC3CITg74ZVfD7Hwyso4kL8xMeEgBcoXczxUKL/ZG312u/jYo3slX6tcAW3svG8ad5L2BziHYbabRTotvT8WyNoWDdAdFpmQsDC0aWfVcku8yh9ReQQpRaqQZhohUrvHUwD9n1g+v17axv3v0ETA5vNfn9tKOzk8mUrBMaMBvRZ9giRHz7aFGsrlz50UAMyCkRqy7chsBERATPuN9klZzR7IErv6SKMwiBOND3y9uGGEmY7xolLnlxEoGpIyjb8Tuw0ytHuJCR10oxlF6yfvjBRfXohGtJTUo+MSP5gdQJ5CvYexpEXSA0cGwNdskELzYhUcqm0OaDcj5NjRRtHrslAfPNAQySUH7stC7zsMPpDLH+i/x+l1lPjgNG8Q/mfY5RcJo+0oGFa9bRrEiePUCDtQLOvCa930na7nk1nbOPnJQCZPO0v5m3utj8cyHudi3p4yo4LeppVP95T8KshTO1jN/cKmp0nfYPiCVopW6cAzIOibqj2wlsJt4qRNRB/7xhoUuLjPrfhWVKEIaU8b3x9hDu/iTqzg4bBKWRDOHCTKNWWfv0qR2nFNPmZkKBsaATukOy6nXYL3faBdszec+dY5wb0zGBANjrEfsU93x1keiI/+36WoKLTaeWSLNLx3xHFGapMhxadXEaFsledTPhi9CVCZI7Qgi/bTug4jOVCLbEbl31ufa+NgyxZVFqenOWDXLnOTajqPklKOdYtI/oA5yr/cGWuSMIKndUaCD637u+hpkqYYLVnT5euPsc88v0BEH0JPpdeoYWjgp91/M2IlxcBmhwSn+emXyn0J0PXPn+1ydJWtLrSzV9T9wMgS1wc0t6H8fcbTk4o9KQCLdYtWEmRJggq1uo4mY4wyl/W4aTuUWZScFEAUc6wX7t2sHWjZVQJDxtIJaPNy2OZZbD/QMNhig2K7+swsjd/LdraH2ycjyN/m01mtxvJFCyF9fMU+vkogPJ+UcH/I0opI7IY6wI7z6lcTMrLxjlFjjcU9I49SxwPGZHYZOJcD9yUlhX2QPVH6pIF8uz6Wb5eNyrIGijOaNJFblWpCM4F0cEE65hFYtaug3+Nz+z3kfUTdTrzGVwvNKMS5OOmteUA9YcxPHqEZPNLlz+mSj1RDof7yH1E9cCoyESNmEWU3HamSRg+ru+pKS1a+QF+CTbHihU9RalNQqz+nhFsWhFh+bwVPMQgrdSIag/Ev3ymv/8gxro0AEpuLDzrHIVfG/WI02kTNNTXoOsbuoJmohezkD5Kc//oyMKZOny4rsckNgMVZm3qcD4KwmM8YHcDmLXC2wyYcduy2DtvUOqJfw3N9TjZo5CjI+PHIXNY4uY3po67GcTUE6anIO5onirC9gG1R7I+lShQR3sc7mtbUSGpp84BuBVLKF6ZaR16GKUFaQVC9qv8WBjL4jgIOAmtFLaEhbUYYde6tW8MEs3uev5T6SUH9r+7iO/I67l9nPiBewoQqa2J1rcj+SMpVXjn6HS2wDETVH7gLFKtBVLYVZRzmPkr26eEvA0a19Hs+sXH73WclfaZkgWz4MA8F8vzYhXh/7uHeLk8GZDHL4VnjhArin+G6uAm5J9N94puNKW2JxrI6ywc8lX24nnshanWL/E4LUdlg6IIkM51s9wRSg0LD3ttUb22q7hQg6y1jJi636H7DJydJgkTYki6ZzypWo4i2fr6quqcpIKzgrz8JGvLAt02kMW1fGkDV5wNwsG8jNj2xGmsJXA07YmHs+EsSeKahWVDZPTQ1j2u1D2ozYpG+iJCK4J+PNHCsEo6jdnEDvsjxlTalLLRohcUAt3rO1dAlxJ4WmIFDC9SwiwAiHzB5SJw30suncwlhWAfHy9CvVJ+e/xnEIR8/BcFIJ57d41fYEwuZK9obH1mg/YL39CO+6sL7M+dY2dtsY6E2y1l2kwShenP2jEBUgZpdDs6dyBMzkCUZOdEfKiUbRBEjcpUeoj9dZvYY+zM8TYzV9gFSnzzl2dQKbQ4hY8j+whF2byhgFuZoMYYPPFCfRclmzCM//y1n3QJLf3GU6sa4prGjGxtZR25M01kdzPMXUKR/cWYxhHhxI2JMmmiIe5Fv21Oo+7ikWB/kAgl0zUvVpR4sq2HtbAOwgg2qSNkpcVdR9lbhTycEir7p/bg5nNDWqtonBqKu8QVTlbvpguoWRpqjlCkwhbQwr6ThR3f2/QGmYc+3wZY3ZRMe/t3/EuyazAssYYgfrUnpdpOQEqI7pkOgWK0WinKE5eM4/xU7DrmCUY8nY4N3xs2utwFObEUtcWF3F6s2ynbf4MFhKejt7gK4WGy2BhWtXBmUjy142CEvL/+GzloZUAgsaftdRaktFeeP0hZ5JSo+FHTC7WYHEOjRLlFItFbZbd02m86b4G2J7GertZFC0Ocjp0l0wGW1ahsWBBpVwmdi7lsFraLJKWw9jTfyCk/0Yxt7HR9I/+KmYuCacEUYGmZ+/JMo1Xkik4q180TQw975Jgupb0y4NKdgk3J9GSmWqQ5gXtU1ktnbF6ZLSTtMvGqAB4EZSWZ+N/xKDXcTBryMoU+lYqwXJdKwwx5tvflQ+AbzFLwF3cmefvNTwohR6uo/I+UuQ5VZoiVQww05SD+6xhR0tYSktqA1WSyDm/B/g2A7yZlqunyCaK/HFXc1uHiRt2o5sR/ZYG0SisaGttLkkm3QJy2NXF/Vl9LatUzfwcOybl1NmdShZaeLIkgYwYRHVDGZY29AvebcMPh/NEKqcQW4k212ObEhJwhoFKMs6x9+KNhNcXNxURJj31tIoLc9eaJ54NF8NTnoUhsWF3M76n/XoKiR/eYYO1NldIwsZxutGJxZQxLwPRcHsvksYmMG/E1OAWEUsjq/B1lD5uZ1dAurtZpjPGiB68M39saqxn5O1ukf9Ad4CAhxPMDXzq48qhJAff6c+3MICQs815uQtwuFUfrywEB0J9Ws3MZ8Ml+TrYtRUg6PdJaIqDIoa/A6VmmEjJqZHmYU7K96ztb8mH8wm5VbgKd7/03mwN9e+T6i8xe1O3rdcq8D0aB8TrSHjD/JbpRtprXYVnYGttA8AnUcMH4TETfEHkSUbelg2hbwuuD6OHuuY0GbcHXWzv11BgEA9psW6h9U1rumamDZBhln0W3fN9Q7Sh1+zgLwhuksKj+tHdwaB6pewnqadSYV0FxEGD7ufGVs2HUDeGOqlYCBJbZjVuxcsaIyorXpcVHqliititK9CWEcKaml8ohHXZ/lXFe/aKRhn4lNTW8qDezIcWIJfCWaYrGDwde3xIYrPu12k8uFDnK+8lPxUBPuyqlwRAJE0npo9GHniSZLjflgByUJkZAa5k9jvuYn9c4oy9cBix1e4s+Mj3ZIrHtc+U+L9JoDMMaqupxraJSlKsSfxVOvCpxe+tv18uZfIaY4Lf0d0YgMs7rbqOuclXBw10lCbRhP0wSwnUaeUuaDNSyAPdEs1fhdyr5BFN0ctTBUwq8U92FmN8xWgfCl2kszMaFTCLI4T1rD6i1drE4+okGD8DRaLS8pnUzWfJwANKJ4scbnsGS9xc+YL9eTk5BOw15vHYFjqORQ88hPd+oEe7po21QZ/dbFfWMC5pkFU//Y9XDlhxwN4GP9hmhlSKrW4jFz/SUupOvnTOLSac7a8nhfHzT1sKcfN0aKDezEJ6J9C9du26/i54XkEPpV/hdtME8BE0AzsIup/TVQMn/gBOzHwqp6iNNDpaymttI6/3UmugdNGAKYqLEiSt7iFCZHyM1+KDEenklwbTJB5UWcaCJ4/M4G1yRuo321oDWrg4LAaCyGj3+yH92vjgeHuHq3pFm3gQ+bYVJ1LPONpKnwrsDoxKUWvRaUBK8Y60jBkjrFBVjY03agrgY62uGze4yuGmyEEHdfMk1eUgf4hGUka44bIS5ZEBafEakHBt8SnFciGMaN55tZ7UVZP1S2m0f694kFw9itxa4SM8TZpz1CLj2GxQhzhA7vaxg32yc4uq0TYEd3srHrQtrgjWXUYnUMPzlvQtNPrhHPw5Ip7P8a+JlCjoIFjkRV+n4eKBEcfkVZ4ISCNnWFZMQ9GUcgnnrc0f3VJEsMxZtWYPfydX0pVRHa4TJ5NqfbFPqjSDhNELptMBXfIFptunP0Y9EImgQ31mCArdwmIYSZonyd6hFs4Ti99Nb3pbwJVox73nSwSoxRmME25pwZoy3uFxZIKOHN8Xp9G7Ui4BB2NxdJ18EVSwtfy3mNpx8hXMXHKlKAsdVs5Kj+uwIzgdD6Yl6dfbOe7GxUASrmRlZxuziaw1siH0zSfNC/T3D7GdOO13ZwP0J5O3MDoL+CNT7TOXVeYemDEiDvBRqatderIM6BiQHn2Avi4EHCH7DwBADUuW3JlM4LO8CtJL73tuiTXehexGmiSn1Z1ekxyJKyVBP1+T8ntT6vZXmtG2N/Hp+ohrztrSoWD19VOlKlIYba2vj+Lnb6DnR3PaBFF61hP8HqmwPrIxPfvMUSwdL4vSAnbAs60u2PFQzbL4bd2UUWvzDFGFBhhtt2ytQKxB9zgNytnhuxstJPrD4B14/jittDHDSHo6ergmd6l0wGwc+ZCAdD4Uei5bJq/AU9V5vGJMWbmTAUGNAOnIYLneCk2yHL2ms0TdxH7+Sw8TQfKfKYJTk0viEKvPX2lzzgT4yWXbquLKIThUO74ZHKdIQ8xL9MvwJ3ueF0zfIYEGPGzEhIdoyl5P1ISlUQiGCpXxHFcMkJPBW/ESOpaCFeBsyZ+GDtXWI6Z5RQbYQtHthoVHSR0skMPBA0Y5MQtuuGDzuqFoxi6KFALNtAi9ZqHctmGwpA8RaoirPbfh/nPfUoBiqK5sgtMf51BPUBvCZTOQZmGFlRISEhyj5FJ+xZoWdl9ig498BB4sDaqfGMJ5X1gBlVHogRIQXUzX7M6pFmd87ZrNDNeKB1IBX2Jhv1jBoSEQWTRnPFKdV/54ljgDMaIYwCpVDm1/H9vJUVQ3ug6jQq1hrtWHzRTEZbSqY0yKBiaLUpmEam3ZT0vG1/UcvsAMUzhNyPtrWnlg5UpVKsKa7VFmnC8cIvNTvKj7dPlwpMk1IbKoi5KObz3feSD828TnOXCfai310ytVnrlKXCxSypQ4cZhBfZuSXcyxprAJNfkA7rY3iwkvPmGqBFNrIROwJuMc0S/TUItoRv7ceo0QCqnKBqtX3gpr3BHCrFHmRCklRRCG6EU84Zl6PZziVLCUOEcfiNqrgi4QJDPco18z9IGjMVEZzlz4CzuRARvdNZhnKqqyG80aUuq82L5y8VS0vQJQ1WCT/V/7Zazl5mePinWd63skKa/VCXrICWlpUGi1eKOOuZBDAD4WgeQzhdaR7gp/x/lWR/ukNQFLpIV3biXP0AuFxSqoKyCT62B8K0RhYdMIIkyGmJmr054QMD2VsRi7FQbCTmL7n2iJUQguZ5NUY15+Eye4gtr/8EFeqKpzxv0z3tcdwjskKx0Yde6dYYhQ2AN72bknQ=");
  16. server.ConnectionAccepted += server_ConnectionAccepted;
  17. server.Start();
  18. var field = server.GetType().GetField("_listenser", BindingFlags.Instance | BindingFlags.NonPublic);
  19. var listener = (TcpListener)field.GetValue(server);
  20. Console.WriteLine($"Listen {listener.Server.LocalEndPoint}");
  21. Console.WriteLine("Press ENTER to exit...");
  22. Console.ReadLine();
  23. }
  24. private static void server_ConnectionAccepted(object? sender, Session e)
  25. {
  26. Console.WriteLine("Accepted a client.");
  27. e.ServiceRegistered += e_ServiceRegistered;
  28. e.KeysExchanged += e_KeysExchanged;
  29. }
  30. private static void e_KeysExchanged(object? sender, KeyExchangeArgs e)
  31. {
  32. foreach (var keyExchangeAlg in e.KeyExchangeAlgorithms)
  33. {
  34. Console.WriteLine("Key exchange algorithm: {0}", keyExchangeAlg);
  35. }
  36. }
  37. private static void e_ServiceRegistered(object? sender, SshService e)
  38. {
  39. var session = (Session)sender;
  40. Console.WriteLine("Session {0} requesting {1}.",
  41. BitConverter.ToString(session.SessionId).Replace("-", ""), e.GetType().Name);
  42. if (e is UserauthService)
  43. {
  44. var service = (UserauthService)e;
  45. service.Userauth += (s, e) =>
  46. {
  47. Console.WriteLine("Client {0} fingerprint: {1}.", e.KeyAlgorithm, e.Fingerprint);
  48. e.Result = true;
  49. };
  50. }
  51. else if (e is ConnectionService)
  52. {
  53. var service = (ConnectionService)e;
  54. EasyTerminal terminal = null;
  55. service.EnvReceived += (s, e) => Console.WriteLine("Received environment variable {0}:{1}", e.Name, e.Value); ;
  56. service.CommandOpened += (s, e) =>
  57. {
  58. Console.WriteLine($"Channel {e.Channel.ServerChannelId} runs {e.ShellType}: \"{e.CommandText}\".");
  59. var allow = true; // func(e.ShellType, e.CommandText, e.AttachedUserauthArgs);
  60. if (!allow) return;
  61. if (e.ShellType == "shell")
  62. {
  63. // requirements: Windows 10 RedStone 5, 1809
  64. // also, you can call powershell.exe
  65. terminal = new EasyTerminal("cmd.exe");
  66. e.Channel.DataReceived += (ss, ee) => terminal.OnInput(ee);
  67. e.Channel.CloseReceived += (ss, ee) => terminal.OnClose();
  68. terminal.DataReceived += (ss, ee) => e.Channel.SendData(ee);
  69. terminal.CloseReceived += (ss, ee) => e.Channel.SendClose(ee);
  70. terminal.Run();
  71. }
  72. };
  73. }
  74. }
  75. }
  76. }