Lucene search
+L

Windows DNS Server Enumeration

🗓️ 01 Mar 2012 00:00:00Reported by TenableType 
nessus
 nessus
🔗 www.tenable.com👁 36 Views

Windows DNS Server Enumeration by Nessus on Windows host via registry

Code
#
# (C) Tenable Network Security, Inc.
#


include("compat.inc");


if (description)
{
  script_id(58181);
  script_version("1.9");
  script_set_attribute(attribute:"plugin_modification_date", value:"2022/02/01");

  script_name(english:"Windows DNS Server Enumeration");
  script_summary(english:"Looks in the registry to see which DNS servers are in use");

  script_set_attribute(attribute:"synopsis", value:
"Nessus enumerated the DNS servers being used by the remote Windows
host.");
  script_set_attribute(attribute:"description", value:
"Nessus was able to enumerate the DNS servers configured on the remote
Windows host by looking in the registry.");
  script_set_attribute(attribute:"solution", value:"n/a");
  script_set_attribute(attribute:"risk_factor", value:"None");

  script_set_attribute(attribute:"plugin_publication_date", value:"2012/03/01");

  script_set_attribute(attribute:"plugin_type", value:"local");
  script_set_attribute(attribute:"cpe", value:"cpe:/o:microsoft:windows");
  script_set_attribute(attribute:"asset_inventory", value:"True");
  script_set_attribute(attribute:"hardware_inventory", value:"True");
  script_set_attribute(attribute:"os_identification", value:"True");
  script_set_attribute(attribute:"agent", value:"windows");
  script_end_attributes();

  script_category(ACT_GATHER_INFO);
  script_family(english:"Windows");

  script_copyright(english:"This script is Copyright (C) 2012-2022 and is owned by Tenable, Inc. or an Affiliate thereof.");

  script_dependencies("smb_hotfixes.nasl");
  script_require_keys("SMB/Registry/Enumerated");
  script_require_ports(139, 445);

  exit(0);
}

include("audit.inc");
include("global_settings.inc");
include("misc_func.inc");
include("smb_func.inc");
include("data_protection.inc");

get_kb_item_or_exit("SMB/registry_full_access");

login   = kb_smb_login();
pass    = kb_smb_password();
domain  = kb_smb_domain();
port    = kb_smb_transport();

if(! smb_session_init()) audit(AUDIT_FN_FAIL, "smb_session_init");

r = NetUseAdd(login:login, password:pass, domain:domain, share:"IPC$");
if ( r != 1 )
{
  NetUseDel();
  audit(AUDIT_SHARE_FAIL,"IPC$");
}

hklm = RegConnectRegistry(hkey:HKEY_LOCAL_MACHINE);
if (isnull(hklm))
{
  NetUseDel();
  audit(AUDIT_REG_FAIL);
}

key = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters";
key_h = RegOpenKey(handle:hklm, key:key, mode:MAXIMUM_ALLOWED);
dns_servers = make_array();
connections = make_array();

if (isnull(key_h))
{
  debug_print(strcat("Unable to open HKLM\" + key)); # don't exit since we might get useful info elsewhere
}
else
{
  # Check for the default nameserver values
  foreach name (make_list("DhcpNameServer", "NameServer"))
  {
    value = RegQueryValue(handle:key_h, item:name);
    if (!isnull(value) && value[1] =~ '^[0-9., ]+$')
      dns_servers['Default'][name] = value[1];
  }

  RegCloseKey(handle:key_h);
}

# Check nameservers configured for each interface
key = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces";
key_h = RegOpenKey(handle:hklm, key:key, mode:MAXIMUM_ALLOWED);

if (isnull(key_h))
  debug_print(strcat("Unable to open HKLM\" + key)); # don't exit since we might get useful info elsewhere
else
  info = RegQueryInfoKey(handle:key_h);

for (i=0; i < info[1]; ++i) # no need to do NULL checking on info since info[1] will evaluate to 0
{
  nameserver_found = FALSE;
  interface = RegEnumKey(handle:key_h, index:i);
  if (interface !~ '^{[0-9a-fA-F-]+}$') continue;

  key2 = key + "\" + interface;
  key2_h = RegOpenKey(handle:hklm, key:key2, mode:MAXIMUM_ALLOWED);

  if (isnull(key2_h))
  {
    debug_print(strcat("Unable to open HKLM\" + key2)); # don't exit since we might get useful info elsewhere
    continue;
  }

  foreach name (make_list("DhcpNameServer", "NameServer"))
  {
    value = RegQueryValue(handle:key2_h, item:name);
    if (!isnull(value) && value[1] =~ '^[0-9.,]+$')
    {
      nameserver_found = TRUE;
      dns_servers[interface][name] = value[1];
    }
  }

  RegCloseKey(handle:key2_h);

  # try to get the user friendly name of the connection this network adapter is related to
  if (nameserver_found)
  {
    key2 = "SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\" + interface + "\Connection";
    key2_h = RegOpenKey(handle:hklm, key:key2, mode:MAXIMUM_ALLOWED);

    if (!isnull(key2_h))
    {
      name = RegQueryValue(handle:key2_h, item:'Name');
      if (!isnull(name[1]))
        connections[interface] = name[1];

      RegCloseKey(handle:key2_h);
    }
  }
}

RegCloseKey(handle:key_h);
RegCloseKey(handle:hklm);
NetUseDel();

report = NULL;

foreach interface (keys(dns_servers))
{
  report += '\nInterface: ' + interface + '\n';

  name = connections[interface];
  if (!isnull(name))
    report += 'Network Connection : ' + name + '\n';

  foreach type (keys(dns_servers[interface]))
  {
    if (data_protection::is_sanitize_ipaddr_enabled())
      dns_servers_interface_values = data_protection::sanitize_ip_address_multiple(text:dns_servers[interface][type]);
    else
      dns_servers_interface_values = dns_servers[interface][type];

    report += type + ': ' + dns_servers_interface_values + '\n';

    if (' ' >< dns_servers[interface][type]) sep = ' ';
    else if (',' >< dns_servers[interface][type]) sep = ',';
    else sep = NULL;

    if (!isnull(sep))
    {
      servers = split(dns_servers[interface][type], sep:sep, keep:FALSE);

      foreach server (servers)
        set_kb_item(name:'SMB/nameserver/' + interface + '/' + type, value:server);
    }
    else set_kb_item(name:'SMB/nameserver/' + interface + '/' + type, value:dns_servers[interface][type]);
  }
}
if (isnull(report)) exit(0, 'The host does not appear to have any DNS servers configured.');

set_kb_item(name:'SMB/nameservers', value:TRUE);
if (report_verbosity > 0)
{
  report = '\nNessus enumerated DNS servers for the following interfaces :\n' + report;
  security_note(port:port, extra:report);
}
else security_note(port);

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

01 Feb 2022 00:00Current
5.5Medium risk
Vulners AI Score5.5
36