快捷搜索:

探测远程Windows主机的NetBIOS信息

注:

本文相关法度榜样 T-SMB 可探测远程主机的NetBIOS信息,包括操作系统指纹,共享目录,用户与组,传输列表及其他信息。您可以在中华安然网(SafeChina)下载此软件。

下载链接:

大年夜家一提到Windows2000/XP系统的安然性,很快就会想到NULL Session(空会话)。这可以算是微软安置的一个后门,很多简单而轻易的进击都是基于空会话而实现的。在此,我们不评论争论若何攻下一台Windows2000/XP系统,而是要谈谈在建立空会话之后,我们可以获得远程主机的哪些NetBIOS信息。(因为本文是针对Windows2000/XP系统,以是应用了UNICODE编码)。

一)NetBIOS信息

在我们和远程Windows2000/XP主机建立了空会话之后,我们就有权罗列系统里的各项NetBIOS信息了。当然在某些选项中必要较高的权利,不过我们只履行那些匿名用户可以得到的绝大年夜多半系统信息。

光阴:探测远程主机确当前日期和光阴信息。它会返回一个数据布局,包括年,月,日,礼拜,时,分,秒等等。不过获得的是GMT标定光阴,当然对付我们来说就应该换算为GMT+8:00了。由此可以判断出主机所在的时区信息。

操作系统指纹:探测远程主机的操作系统指纹信息。一共有三种级其余探测(100,101,102),我们应用的是101级,它会返回一个数据布局,可以获取远程主机的平台标识,办事器名称,操作系统的主次版本(Windows2000为5.0,WindowsXP为5.1,而最新操作系统Longhorn的版本为6.0),办事器类型(每台主机可能同时包孕多种类型信息)和注释。

共享列表:探测远程主机的共享列表。我们可以得到一个数据布局指针,罗列远程主机的所有共享信息(暗藏的共享列表在内)。此中包括共享名称,类型与备注。类型可分为:磁盘驱动器,打印行列步队,通讯设备,进程间通讯与特殊设备。

用户列表: 探测远程主机的用户列表,返回一个数据布局指针,罗列所有用户信息。可获取用户名,全名,用户标识符,阐明与标识信息。标识信息可以探测用户的造访权限。

本地组列表: 探测远程主机的本地组列表信息。罗列所有本地组信息,包孕本地组名称和注释信息。

组列表: 探测远程主机的组列表信息。罗列所有的组信息,包括组名称,注释,组标识符与属性。在此根基上,我们可以罗列组内的所有用户信息。

组用户列表: 探测特定组内的用户信息。我们可以得到组内所有用户的名称。当我门得到了所有的用户列表,下一步就应该很清楚了,那便是挂一个字典进行破解了。

传输协议列表: 探测远程主机的传输协议信息,罗列所有的传输列表。可以得到每个传输协议的名称,地址,收集地址和当前与本传输协议连接的用户数目。

会话列表: 探测远程主机确当前会话列表。罗列每个会话的相关信息,包括客户端主机的名称,当前用户的名称,活动光阴和余暇光阴。这可以赞助我们懂得远程主机用户的喜爱等等。

二)主要函数与相关数据布局阐发

1. 建立空会话

WNetAddConnection2(&nr,username,password,0);

//nr为NETRESOURCE数据布局的工具;

//username为建立空会话的用户名,在此将用户名设置为NULL;

//password为登岸密码,在此将密码设置为NULL;

2. 取缔空会话

WNetCancelConnection2(ipc,0,TRUE);

//ipc为TCHAR的指针,我们可以这样得到:

//swprintf(ipc,_T("\\\\%s\\ipc$"),argv[1]),argv[1]为主机名或地址;

3. 探测主机光阴

nStatus=NetRemoteTOD(server,(PBYTE*)&pBuf);

//参数server为主机的名称或地址;

//pBuf为TIME_OF_DAY_INFO数据布局的指针;

//nStatus为NET_API_STATUS成员;

4. 探测操作系统指纹

NetServerGetInfo(server,dwLevel,(PBYTE *)&pBuf);

//dwLevel为等级数,我们选择的是101级;

//pBuf是SERVER_INFO_101数据布局的指针;

5. 探测共享列表

NetShareEnum(server,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);

//dwLevel的等级数为1级;

//pBuf是SHARE_INFO_1数据布局的指针;

//MAX_PREFERRED_LENGTH指定返回数据的长度;

//er指明返回的实际可以罗列的成员数目;

//tr返回所有的成员数目;

//resume用于继承进行共享搜索;

6. 探测用户列表

NetQueryDisplayInformation(server,dwLevel,i,100,0xFFFFFFFF,&dwRec,(PVOID *)&pBuf);

//dwLevel的等级数为1级;

//i为罗列的索引;

//dwRec返回获取的信息数目;

//pBuf为NET_DISPLAY_USER数据布局的指针;

7. 探测本地组列表

NetLocalGroupEnum(server,dwLevel,(PBYTE *)&pBuf,-1,&er,&tr,&resume);

//dwLevel的等级是1;

//pBuf返回LOCALGROUP_INFO_1数据布局的指针;

8. 探测组列表

NetQueryDisplayInformation(server,dwLevel,i,100,0xFFFFFFFF,&dwRec,(PVOID*)&pGBuf);

//dwLevel的等级为3;

//pGBuf返回NET_DISPLAY_GROUP的数据布局指针;

9. 探测组内的用户

NetGroupGetUsers(server,pGBuffer->grpi3_name,0,(PBYTE *)&pUBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);

//pGBuffer->grpi3_name为组的名称;

//pUBuf返回GROUP_USERS_INFO_0数据布局的指针;

10.探测传输协议列表

NetServerTransportEnum(server,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);

//dwLevel的等级为0级;

//pBuf返回SERVER_TRANSPORT_INFO_0数据布局的指针;

11.探测会话列表

NetSessionEnum(server,pszClient,pszUser,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);

//pszClient指定客户的地址;

//pszUser指定用户名;

//dwLevel的等级是10级;

//pBuf返回SESSION_INFO_10数据布局的指针;

12.开释内存

NetApiBufferFree(pBuf);

//开释由系统分配的内存空间。

三) 若何防止NetBIOS信息的泄露

我们可以安装防火墙来禁止空会话的建立,或者我们可以在收集连接属性里禁用TCP/IP上的NetBIOS,当然也可以在IP安然策略里禁用445/tcp端口来实现。只要空会话不能成功建立,那就很可贵到上面提到的各项信息了。

四) 源代码

#define UNICODE

#define _UNICODE

#include

#include

#include

#include

#pragma comment (lib,"mpr")

#pragma comment (lib,"netapi32")

void start();

void usage();

int datetime(PTSTR server);

int fingerprint(PTSTR server);

int netbios(PTSTR server);

int users(PTSTR server);

int localgroup(PTSTR server);

int globalgroup(PTSTR server);

int transport(PTSTR server);

int session(PTSTR server);

int wmain(int argc,TCHAR *argv[])

{

NETRESOURCE nr;

DWORD    ret;

TCHAR    username[100]=_T("");

TCHAR    password[100]=_T("");

TCHAR    ipc[100]=_T("");

system("cls.exe");

start();

if(argc!=2)

{

usage();

return -1;

}

swprintf(ipc,_T("\\\\%s\\ipc$"),argv[1]);

nr.lpLocalName=NULL;

nr.lpProvider=NULL;

nr.dwType=RESOURCETYPE_ANY;

nr.lpRemoteName=ipc;

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

if(ret!=ERROR_SUCCESS)

{

_tprintf(_T("\nIPC$ Connect Failed.\n"));

return -1;

}

datetime(argv[1]);

fingerprint(argv[1]);

netbios(argv[1]);

users(argv[1]);

localgroup(argv[1]);

globalgroup(argv[1]);

transport(argv[1]);

session(argv[1]);

ret=WNetCancelConnection2(ipc,0,TRUE);

if(ret!=ERROR_SUCCESS)

{

_tprintf(_T("IPC$ Disconnect Failed.\n"));

return -1;

}

return 0;

}

void start()

{

_tprintf(_T("=====[ T-SMB Scan, by TOo2y    ]=====\n"));

_tprintf(_T("=====[ E-mail: TOo2y@safechina.net ]=====\n"));

_tprintf(_T("=====[ HomePage: www.safechina.net ]=====\n"));

您可能还会对下面的文章感兴趣: