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

📄 netbios_name_get.nasl

📁 漏洞扫描源码,可以扫描linux,windows,交换机路由器
💻 NASL
字号:
## This script was written by Noam Rathaus <noamr@securiteam.com>## See the Nessus Scripts License for details## Changes by rd :# - bug fix in the adaptater conversion# - export results in the KB## rev 1.5 changes by ky :# - added full support for Win2k/WinXP/Win2k3# - added export of SMB/username KB## rev 1.6 changes by KK :# - added export of SMB/messenger KBif(description){ script_id(10150); script_version ("$Revision: 38 $"); script_cve_id("CAN-1999-0621");  name["english"] = "Using NetBIOS to retrieve information from a Windows host"; script_name(english:name["english"]);  desc["english"] = "The NetBIOS port is open (UDP:137). A remote attacker may use this to gainaccess to sensitive information such as computer name, workgroup/domainname, currently logged on user name, etc.Solution: Block those ports from outside communicationRisk factor : Medium"; script_description(english:desc["english"]);  summary["english"] = "Using NetBIOS to retrieve information from a Windows host"; script_summary(english:summary["english"]);  script_category(ACT_GATHER_INFO);  script_copyright(english:"This script is Copyright (C) 1999 SecuriTeam"); family["english"] = "Windows"; script_family(english:family["english"]); script_dependencies("cifs445.nasl"); exit(0);}## The script code starts here#function isprint(c){ min = ord("!"); max = ord("~"); ordc = ord(c); if(ordc > max)return(FALSE); if(ordc < min)return(FALSE); return(TRUE);}# do not test this bug locallyNETBIOS_LEN = 50;sendata = raw_string(rand()%255, rand()%255, 0x00, 0x00, 0x00,0x01, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x20, 0x43, 0x4B,0x41, 0x41, 0x41, 0x41, 0x41,0x41, 0x41, 0x41, 0x41, 0x41,0x41, 0x41, 0x41, 0x41, 0x41,0x41, 0x41, 0x41, 0x41, 0x41,0x41, 0x41, 0x41, 0x41, 0x41,0x41, 0x41, 0x41, 0x41, 0x41,0x00, 0x00, 0x21, 0x00, 0x01			);			#query *SMBSERVER<20> - by KK Liu 03/24/2004			sendata_SMBSERVER = raw_string(rand()%255, rand()%255, 0x00, 0x10, 0x00,0x01, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x20, 0x43, 0x4b,0x46, 0x44, 0x45, 0x4e, 0x45,0x43, 0x46, 0x44, 0x45, 0x46,0x46, 0x43, 0x46, 0x47, 0x45,0x46, 0x46, 0x43, 0x43, 0x41,0x43, 0x41, 0x43, 0x41, 0x43,0x41, 0x43, 0x41, 0x43, 0x41,0x00, 0x00, 0x21, 0x00, 0x01			);hostname_found = 0;group_found = 0;messenger_found = 0;candidate = "";if(!(get_udp_port_state(137))){	set_kb_item(name:"SMB/name", value:get_host_ip());	exit(0);	}	dsport = 137;soc = open_sock_udp(137);send(socket:soc, data:sendata, length:NETBIOS_LEN);result = recv(socket:soc, length:4096);#query *SMBSERVER<20> - by KK Liu 03/24/2004if (strlen(result) < 56){ send(socket:soc, data:sendata_SMBSERVER, length:NETBIOS_LEN); result = recv(socket:soc, length:4096);}if (strlen(result) > 56){   hole_answer = ""; hole_data = result; location = 0; location = location + 56;  num_of_names = ord(hole_data[location]); if (num_of_names > 0) {  hole_answer = string(hole_answer, "The following ",	num_of_names,	" NetBIOS names have been gathered :\n"); } location = location + 1; for (name_count = 0; name_count < num_of_names; name_count = name_count + 1) {  name = "";  for (name_copy = 0; name_copy < 15; name_copy = name_copy + 1)  {   loc = location+name_copy+name_count*18;   if(isprint(c:hole_data[location+name_copy+name_count*18]))   {    name = string(name, hole_data[location+name_copy+name_count*18]);   }   else    name = string(name, " ");  }  loc = location+16+name_count*18;      # Win2k/WinXP sends 0xc4-196 and 0x44-68 as the loc name flags  if(hole_data[loc] == raw_string(68))  {   subloc = location+15+name_count*18;   if(ord(hole_data[subloc])==32)   {    if(!hostname_found && name)    {     set_kb_item(name:"SMB/name", value:name);     hostname_found = 1;    }    name = name + " = This is the computer name";   }   else if(ord(hole_data[subloc])==0)   {    candidate = name;    if(!("~" >< name))    {     if(!hostname_found && name)     {      set_kb_item(name:"SMB/name", value:name);      hostname_found = 1;     }    }   }   # Set the current logged in user based on the last entry   if (hole_data[subloc] == raw_string(3))   {    # Ugh, we can get multiple usernames with TS or Citrix    # Also, the entry is the same for the local workstation or user name    username = name;    name = name + " = This is the current logged in user or registered workstation name.";   }           if(ord(hole_data[subloc]) == 27)   {    if(!group_found && name)    {     set_kb_item(name:"SMB/workgroup", value:name);     group_found = 1;    }   }   if (hole_data[subloc] == raw_string(1))   {    name = name + " = Computer name that is registered for the messenger service on a computer that is a WINS client.";    messenger_found = 1;    messenger = name;   }   if (hole_data[subloc] == raw_string(190))   {    name = name + " = A unique name that is registered when the Network Monitor agent is started on the computer";   }   if (hole_data[subloc] == raw_string(31))   {    name = name + " = A unique name that is registered for Network dynamic data exchange (DDE) when the NetDDE service is started on the computer.";   }        }  # Set the workgroup info on WinXP  if (hole_data[loc] == raw_string(196))  {   subloc = location+15+name_count*18;      if (hole_data[subloc] == raw_string(0))     {    if(!group_found && name)    {      set_kb_item(name:"SMB/workgroup", value:name);      group_found = 1;    }    name = name + " = Workgroup / Domain name";   }   if (hole_data[subloc] == raw_string(30))     {    name = name + " = Workgroup / Domain name (part of the Browser elections)";   }   if (hole_data[subloc] == raw_string(27))     {    name = name + " = Workgroup / Domain name (elected Master Browser)";   }   if (hole_data[subloc] == raw_string(28))     {    name = name + " = Workgroup / Domain name (Domain Controller)";   }   if (hole_data[subloc] == raw_string(191))     {    name = name + " = A group name that is registered when the Network Monitor agent is started on the computer.";   }  }  # WinNT sends 0x04-4 and 0x84-132 as the loc name flags  if (hole_data[loc] == raw_string(4))  {   subloc = location+15+name_count*18;   if (hole_data[subloc] == raw_string(0))   {    if(!hostname_found && name)    {     set_kb_item(name:"SMB/name", value:name);     hostname_found = 1;    }    if ( "~" >!< name )name = name + " = This is the computer name registered for workstation services by a WINS client.";   }   # Set the current logged in user based on the last entry   if (hole_data[subloc] == raw_string(3))   {   {    # Ugh, we can get multiple usernames with TS or Citrix    username = name;    name = name + " = This is the current logged in user registered for this workstation.";   }   }   if (hole_data[subloc] == raw_string(1))   {    name = name + " = Computer name that is registered for the messenger service on a computer that is a WINS client.";    messenger_found = 1;    messenger = name;   }   if (hole_data[subloc] == raw_string(190))   {    name = name + " = A unique name that is registered when the Network Monitor agent is started on the computer";   }   if (hole_data[subloc] == raw_string(31))   {    name = name + " = A unique name that is registered for Network dynamic data exchange (DDE) when the NetDDE service is started on the computer.";   }         if (hole_data[subloc] == raw_string(32))   {    name = name + " = Computer name";   }     }  loc = location+16+name_count*18;     # Set the workgroup info on WinNT    if (hole_data[loc] == raw_string(132))  {   subloc = location+15+name_count*18;      if (hole_data[subloc] == raw_string(0))     {    if(!group_found && name)    {      set_kb_item(name:"SMB/workgroup", value:name);      group_found = 1;    }    name = name + " = Workgroup / Domain name";   }   if (hole_data[subloc] == raw_string(30))     {    name = name + " = Workgroup / Domain name (part of the Browser elections)";   }   if (hole_data[subloc] == raw_string(27))     {    name = name + " = Workgroup / Domain name (elected Master Browser)";   }   if (hole_data[subloc] == raw_string(28))     {    name = name + " = Workgroup / Domain name (Domain Controller)";   }   if (hole_data[subloc] == raw_string(191))     {    name = name + " = A group name that is registered when the Network Monitor agent is started on the computer.";   }     }    hole_answer = hole_answer + " " + name +  string("\n"); }  location = location + num_of_names*18; adapter_name = ""; for (adapter_count = 0; adapter_count < 6; adapter_count = adapter_count + 1) {  loc = location + adapter_count;  if ( adapter_count == 5 ) col = "";  else col = ":";  adapter_name = adapter_name + tolower(string(hex(ord(hole_data[loc])), col)) - "0x"; } if(adapter_name == "00:00:00:00:00:00") {   set_kb_item(name:"SMB/samba", value:TRUE);     hole_answer = hole_answer + string("\n. This SMB server seems to be a SAMBA server (this is not a securityrisk, this is for your information). This can be told because this server claims to have a null MAC address"); } else {  hole_answer = hole_answer + string("The remote host has the following MAC address on its adapter :\n");  hole_answer = hole_answer + "   " + adapter_name; } hole_answer = hole_answer + string("\n\nIf you do not want to allow everyone to find the NetBios name\nof your computer, you should filter incoming traffic to this port.\n\nRisk factor : Medium"); security_warning(port:137, data:hole_answer, protocol:"udp");} if(!hostname_found)     {      if(candidate)      {      set_kb_item(name:"SMB/name", value:candidate);      hostname_found = 1;      }      else set_kb_item(name:"SMB/name", value:get_host_ip());     } if (username)     {	set_kb_item(name:"SMB/username", value:username);     } if (messenger_found && messenger)     {	set_kb_item(name:"SMB/username", value:messenger);     }close(soc);

⌨️ 快捷键说明

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