探测远程Windows主机的NetBIOS信息[1]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 ashao1981 的 blog

注:
    本文相关程序 t-smb 可探测远程主机的netbios信息,包括操作系统指纹,共享目录,用户与组,传输列表及其他信息。您可以在中华安全网(safechina)下载此软件。
    下载链接:< [url=http://www.safechina.net/download/click.php?type=本站原创&id=1040000080]http://www.safechina.net/download/click.php?type=本站原创&id=1040000080[/url] >

    大家一提到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);

本文关键:NetBIOS
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top