⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cnetbios.cpp

📁 几年前用vc6写的漏洞扫描器
💻 CPP
字号:
// CNetBios.cpp: implementation of the CNetBios class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "try4.h"
#include "CNetBios.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif


#include <lm.h>
#include <winnetwk.h>
#include <winsock.h>



#pragma comment(lib,"mpr")
#pragma comment(lib,"netapi32")


#define LOCALDRIVE "x:"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CNetBios::CNetBios()
{

}

CNetBios::~CNetBios()
{

}


BOOL CNetBios::OpenSession(PTSTR server)
{
	
	NETRESOURCE nr;
	DWORD       ret;
	TCHAR       username[100]=_T("");
	TCHAR       password[100]=_T("");

	wsprintf(ipc,_T("\\\\%s\\ipc$"),server);

    //nr.dwScope = RESOURCE_GLOBALNET; 
	nr.lpLocalName=NULL;
	nr.lpProvider=NULL;
	nr.dwType=RESOURCETYPE_ANY;
	nr.lpRemoteName = ipc;

	ret=WNetAddConnection2(&nr,username,password,NULL);

	if(ret!=ERROR_SUCCESS)
	    	return false ;	
	else
			return true;


}

BOOL CNetBios::CloseSession(char *ipc)
{
	DWORD ret;	
 
	ret=WNetCancelConnection2(ipc,0,TRUE); 

	if(ret!=ERROR_SUCCESS)
	{
		return false;
	}
	else
		return true;
}

int CNetBios::GetUsers(PTSTR server,CString &strOutput)
{
//	char txt[2000];

	CFile fileUsers("UserInfo.txt",CFile::modeWrite|CFile::modeCreate);
	

	PNET_DISPLAY_USER  pBuf,pBuffer;
	DWORD              nStatus;
	DWORD              dwRec;
	DWORD              i=0;
	DWORD              lerror;
	DWORD              dwLevel;
	char lpwStr[100]=_T("");  //保存server的双字节形式


	dwLevel=1;

	strOutput=_T("");


	MultiByteToWideChar(CP_ACP, 0, server, -1, (unsigned short *)lpwStr, 100); 

	do
	{
		nStatus=NetQueryDisplayInformation((unsigned short *)lpwStr,dwLevel,i,100,0xFFFFFFFF,&dwRec,(PVOID *)&pBuf);
		if((nStatus==ERROR_SUCCESS) || (nStatus==ERROR_MORE_DATA))
		{
			CFile fileUsersTemp("users.txt",CFile::modeWrite|CFile::modeCreate);

			pBuffer=pBuf;
			for(;dwRec>0;dwRec--)
			{
				char szTemp[256];
				//将双字节形式字符串转换为单字节形式
				WideCharToMultiByte(CP_ACP,0,pBuffer->usri1_name,-1,szTemp,256,0,0);

				CString str;
				str.Format("\r\n用户名:  %s",szTemp);
				strOutput+="\r\n"+_T(str);
			//	UpdateData(false);

				CString str1;
				str1.Format("%s\r\n",szTemp);
				fileUsersTemp.Write(str1,str1.GetLength());


				WideCharToMultiByte(CP_ACP,0,pBuffer->usri1_full_name,-1,szTemp,256,0,0);


			    str.Format("用户全名:   %s",szTemp);
				strOutput+="\r\n"+_T(str);

			//	UpdateData(false);

				str.Format("用户 ID:   %u",pBuffer->usri1_user_id);
				strOutput+="\r\n"+_T(str);
			//	UpdateData(false);


				WideCharToMultiByte(CP_ACP,0,pBuffer->usri1_comment,-1,szTemp,256,0,0);

				str.Format("附注 :    %s",szTemp);
				strOutput+="\r\n"+_T(str);
			//	UpdateData(false);

		
				i=pBuffer->usri1_next_index;
				pBuffer++;
			}

			fileUsersTemp.Close();
		}
		else
		{  
			lerror=GetLastError();
			if(lerror==997)
			{
				AfxMessageBox(_T("\nUsers:\t\tOverlapped I/O operation is in progress.\n"));
			}
			else
			{
				CString str;
				str.Format("Users Error:   %d ",lerror);
				AfxMessageBox(str);
			}
		}
  		if(pBuf!=NULL)
		{
	           	NetApiBufferFree(pBuf);
		}
	}while(nStatus==ERROR_MORE_DATA);

//	wsprintf(txt,"%s",strOutput);

	fileUsers.Write(strOutput,strOutput.GetLength());
	fileUsers.Close();

	return 0;

}

int CNetBios::FingerPrint(PTSTR server,CString &strOutput)
{
	CFile fingerprint("ServerInfo.txt",CFile::modeWrite|CFile::modeCreate);

	DWORD              dwlength; 
	DWORD              dwLevel; 
	NET_API_STATUS     nStatus;
	PSERVER_INFO_101   pBuf;
	DWORD              lerror;
	char lpwStr[100]=_T("");  //保存server的双字节形式
 
	dwLevel=101;
	pBuf=NULL; 
	dwlength=_tcslen(server);

	strOutput=_T("");

//
    MultiByteToWideChar (CP_ACP, 0, server, -1, (unsigned short *)lpwStr, 100); 
    //将server由单字节转换为双字节,否则不对

	nStatus=NetServerGetInfo(lpwStr,dwLevel,(PBYTE *)&pBuf);//第一个参数要求为双字节
	
	if(nStatus==NERR_Success)
	{
		CString str;

		str.Format("计算机名:    %s",pBuf->sv101_name);
        strOutput+="\r\n"+str;
		
		str.Format("操作系统id: %d",pBuf->sv101_platform_id);
        strOutput+="\r\n"+str;
		
		str.Format("版本号:  %d.%d",pBuf->sv101_version_major,pBuf->sv101_version_minor);
        strOutput+="\r\n"+str;

	}
	else
	{
		lerror=GetLastError();
		if(lerror==997)
		{
		AfxMessageBox("\nFingerprint:\tOverlapped I/O operation is in progress.\n");
		}
		else
		{
			CString str;
			str.Format(("Fingerprint Error:    %d"),lerror);
           	AfxMessageBox(str);
		}
	}
 	if(pBuf!=NULL)
	{
		NetApiBufferFree(pBuf);
	}

	fingerprint.Write(strOutput,strOutput.GetLength());
	fingerprint.Close();

	return 0;

}

int CNetBios::GetShareList(PTSTR server,CString &strOutput)
{
	CFile fileShare("ShareInfo.txt",CFile::modeWrite|CFile::modeCreate);

	DWORD              er,tr,resume;
	DWORD              i,dwLength,dwLevel;
	PSHARE_INFO_1      pBuf,pBuffer;
	NET_API_STATUS     nStatus;
	DWORD              lerror;
	char lpwStr[100]=_T("");  //保存server的双字节形式


	er=0;             
	tr=0;
	resume=1;
	dwLevel=1;
	dwLength=_tcslen(server);

     strOutput=_T("");

	 MultiByteToWideChar (CP_ACP, 0, server, -1, (unsigned short *)lpwStr, 100); 

	do
	{                                                
		nStatus=NetShareEnum(lpwStr,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);
		if((nStatus==ERROR_SUCCESS) || (nStatus==ERROR_MORE_DATA))
		{
	        pBuffer=pBuf;
	        for(i=1;i<=er;i++)  
			{
				char szTemp[256];
				//将双字节形式字符串转换为单字节形式
				WideCharToMultiByte(CP_ACP,0,(unsigned short *)pBuffer->shi1_netname,-1,szTemp,256,0,0);

		
				CString str;
				str.Format("\r\n共享名 :  %s",szTemp);
				strOutput+="\r\n"+str;


				WideCharToMultiByte(CP_ACP,0,(unsigned short *)pBuffer->shi1_remark,-1,szTemp,256,0,0);

	            str.Format("附注 :  %s",szTemp);
				strOutput+="\r\n"+str;

			
				strOutput+="\r\n类型 :";

				if(pBuffer->shi1_type==STYPE_DISKTREE)     
				{ 
					strOutput+=_T("Disk drive.");
				}
				else if(pBuffer->shi1_type==STYPE_PRINTQ)  
				{
					strOutput+=_T("Print queue.");
				}
				else if(pBuffer->shi1_type==STYPE_DEVICE)
				{
					strOutput+=_T("Communication device.");
				}
				else if(pBuffer->shi1_type==STYPE_IPC)   
				{
					strOutput+=_T("Interprocess communication (IPC).");  
				}
				else if(pBuffer->shi1_type==STYPE_SPECIAL) 
				{
					strOutput+=_T("Special share reserved for interprocess communication (IPC$) or remote administration of the server (ADMIN$).");
				}
				else
				{
					strOutput+=_T("\r\n");
				}
				pBuffer++;
			}
		}
		else
		{
			lerror=GetLastError();
			if(lerror==997)
			{
				AfxMessageBox(_T("\nNetbios:\tOverlapped I/O operation is in progress.\n"));
			}
			else 
			{
				CString str;
				str.Format("\nNetbios Error:\t%d\n",lerror);
				AfxMessageBox(str);
			}
		}
           	if(pBuf!=NULL)
		{
           	    	NetApiBufferFree(pBuf);
		}
	}
	while(nStatus==ERROR_MORE_DATA);

	fileShare.Write(strOutput,strOutput.GetLength());
	fileShare.Close();

	return 0;
}

/*
void CNetBios::GetUsersToFile(PTSTR server)
{
	CFile fUsers;

	NET_API_STATUS nStatus=0;
	LPBYTE *buf=NULL;
	DWORD entread=0,totent=0,rhand=0;
	DWORD maxlen=0xffffffff;
	PUSER_INFO_0  pBuf;
	UINT i;
	int cc=0;
	char lpwStr[100]=_T("");  //保存server的双字节形式


	MultiByteToWideChar(CP_ACP, 0, server, -1, (unsigned short *)lpwStr, 100); 
	
	buf=(unsigned char**)malloc(5000);

	nStatus=::NetUserEnum((unsigned short *)lpwStr,0,0,buf,maxlen,&entread,&totent,&rhand);

	if(nStatus!=NERR_Success)
	{
		AfxMessageBox("Couldn't Enum Users!");
		return;
	}

	cc=sizeof(USER_INFO_0)*entread;


	if((pBuf=(USER_INFO_0 *)malloc(cc))==NULL)
	{
		AfxMessageBox("Malloc Error!");
		return;
	}

    fUsers.Open("users.txt",CFile::modeWrite|CFile::modeCreate);
    
	memcpy(pBuf,*buf,cc);

	for(i=0;i<entread;i++)
	{
      char szTemp[256];
				//将双字节形式字符串转换为单字节形式
	  WideCharToMultiByte(CP_ACP,0,pBuf[i].usri0_name,-1,szTemp,256,0,0);

	  CString str;
	  str.Format("%s\r\n",szTemp);	//"\r\n"用于在文件中换行,szTemp保存用户名
	  fUsers.Write(str,str.GetLength());  



	}

	fUsers.Close();
		
  	if(pBuf!=NULL)
	{
	     NetApiBufferFree(pBuf);
	}

	if(buf)
		free(buf);
}
*/
int CNetBios::GetPasswd(CString strHost, TCHAR name[20],CString &pw)
{
   TCHAR       password[20]=_T("");


    pw=_T("");
	char addr[60];

	wsprintf(addr,_T("\\\\%s\\c$"),strHost);

	NETRESOURCE nr;
	DWORD ret1;

	nr.lpProvider   = NULL;
	nr.dwType       = RESOURCETYPE_ANY;
	nr.lpLocalName  = LOCALDRIVE;
	nr.lpRemoteName = addr;

	

	ret1 = WNetAddConnection2(&nr,password,name,0);

	if(ret1==240)return -1;
	if(ret1==53) return -1;
	if(ret1==NO_ERROR)
	{
		CString str;
		str.Format("发现NT Server弱口令用户:%s  密码为空",name);

		pw+=str;

		WNetCancelConnection2(LOCALDRIVE,0,TRUE);

		return 0;

	}


	ret1 = WNetAddConnection2(&nr,name,name,0);

	if(ret1==240)return -1;
	if(ret1==53) return -1;
	if(ret1==NO_ERROR)
	{
		CString str;
		str.Format("发现NT Server弱口令用户: %s 密码是:%s",name,name);

        pw+=str;
		WNetCancelConnection2(LOCALDRIVE,0,TRUE);

		return 0;

	}

	return 0;



}

  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -