Author: jfs
Date: 2007-11-04 00:32:20 +0100 (Sun, 04 Nov 2007)
New Revision: 515

Added:
   trunk/openvas-plugins/scripts/cisco_default_pw.nasl
Log:
Add script I contribute a long time ago, but did not find in the GPL feed

Added: trunk/openvas-plugins/scripts/cisco_default_pw.nasl
===================================================================
--- trunk/openvas-plugins/scripts/cisco_default_pw.nasl 2007-11-03 23:02:06 UTC 
(rev 514)
+++ trunk/openvas-plugins/scripts/cisco_default_pw.nasl 2007-11-03 23:32:20 UTC 
(rev 515)
@@ -0,0 +1,215 @@
+#
+# This script was written by Javier Fernandez-Sanguino
+# based on a script written by Renaud Deraison <[EMAIL PROTECTED]>
+# with contributions by Gareth M Phillips <[EMAIL PROTECTED]> (additional 
logins and passwords)
+#
+# GPLv2
+# 
+# TODO:
+# - dump the device configuration to the knowdledge base (requires
+#   'enable' access being possible)
+# - store the CISCO IOS release in the KB so that other plugins (in the 
Registered
+#   feed) could use the functions in cisco_func.inc to determine if the system 
is
+#   vulnerable as is currently done through SNMP (all the CSCXXXX.nasl stuff)
+# - store the user/password combination in the KB and have another plugin test
+#   for common combinations that lead to 'enable' mode.
+#
+
+ desc["english"] = "
+Synopsis :
+
+The remote device has a factory password set.
+
+Description :
+
+The remote CISCO router has a default password set.  
+This allows an attacker to get a lot information
+about the network, and possibly to shut it down if
+the 'enable' password is not set either or is also a default
+password.
+
+Solution : 
+
+Access this device and set a password using 'enable secret'
+
+Risk factor :
+
+Critical / CVSS Base Score : 10 
+(CVSS2#AV:N/AC:L/Au:N/C:C/I:C/A:C)";
+
+if(description) 
+{
+ script_id(23938);
+ script_cve_id("CAN-1999-0508");
+ script_version ("$Revision: 1.9 $");
+
+
+ name["english"] = "Cisco default password";
+
+ script_name(english:name["english"]);
+
+
+
+ script_description(english:desc["english"]);
+
+ summary["english"] = "Checks for a default password";
+ script_summary(english:summary["english"]);
+
+ script_category(ACT_GATHER_INFO);
+
+
+ script_copyright(english:"This script is Copyright (C) 2001 - 2006 Javier 
Fernandez-Sanguino and Renaud Deraison");
+
+ family["english"] = "CISCO";
+ family["francais"] = "CISCO";
+
+ script_family(english:family["english"], francais:family["francais"]);
+ script_dependencie("find_service2.nasl");
+ script_require_ports("Services/telnet", 23);
+ exit(0);
+}
+
+include('telnet_func.inc');
+include('ssh_func.inc');
+include('global_settings.inc');
+
+if ( supplied_logins_only ) exit(0);
+
+# Function to connect to a Cisco system through telnet, send
+# a password
+
+function check_cisco_telnet(login, password, port)
+{
+ soc = open_sock_tcp(port);
+ if ( ! soc )
+       {
+         telnet_port = 0;
+         return;
+       }
+ msg = telnet_negotiate(socket:soc, pattern:"(ogin:|asscode:|assword:)");
+
+ if(strlen(msg))
+ {
+  # The Cisco device might be using an AAA access model
+  # or have configured users:
+  if ( stridx(msg, "sername:") != -1 || stridx(msg, "ogin:") != -1  )  {
+    send(socket:soc, data:string(login, "\r\n"));
+    msg=recv_until(socket:soc, pattern:"(assword:|asscode:)");
+  }
+
+  # Device can answer back with {P,p}assword or {P,p}asscode
+  # if we don't get it then fail and close
+  if ( stridx(msg, "assword:") == -1 && stridx(msg, "asscode:") == -1  )  {
+    close(soc);
+    return(0);
+  }
+
+  send(socket:soc, data:string(password, "\r\n"));
+  r = recv(socket:soc, length:4096);
+
+  # TODO: could check for Cisco's prompt here, it is typically
+  # the device name followed by '>'  
+  # But the actual regexp is quite complex, from Net-Telnet-Cisco:
+  #  
'/(?m:^[\r\b]?[\w.-]+\s?(?:\(config[^\)]*\))?\s?[\$\#>]\s?(?:\(enable\))?\s*$)/')
+  
+  # Send a 'show ver', most users (regardless of privilege level)
+  # should be able to do this
+  send(socket:soc, data:string("show ver\r\n"));
+  r = recv_until(socket:soc, pattern:"(Cisco (Internetwork Operating 
System|IOS) Software|assword:|asscode:|ogin:|% Bad password)");
+
+  # TODO: This is probably not generic enough. Some Cisco devices don't 
+  # use IOS but CatOS for example
+
+  # TODO: It might want to change the report so it tells which user / passwords
+  # have been found
+  if("Cisco Internetwork Operating System Software" >< r ||
+     "Cisco IOS Software" >< r) 
+       {
+         desc += '\n\nPlugin Output :\n\nIt was possible to log in as \'' + 
login + '\'/\'' + password + '\'\n';
+         security_hole(port:port, data:desc);
+         exit(0);
+       }
+
+# TODO: it could also try 'enable' here and see if it's capable
+# of accessing the priviledge mode with the same password, or do it
+# in a separate module
+
+  close(soc);
+
+ }
+}
+
+# Functions modified from the code available from default_accounts.inc
+# (which is biased to UNIX)
+function check_cisco_account(login, password)
+{
+ local_var port, ret, banner, soc, res;
+
+
+ if ( ssh_port )
+ {
+  # Prefer login thru SSH rather than telnet
+   soc = open_sock_tcp(ssh_port);
+   if ( soc )
+   {
+   ret = ssh_login(socket:soc, login:account, password:password);
+   close(soc);
+   if ( ret == 0 ) {
+       desc += '\n\nPlugin Output :\n\nIt was possible to log in as \'' + 
login + '\'/\'' + password + '\'\n';
+       security_hole(port:ssh_port, data:desc);
+       exit(0);
+       }
+   else return 0;
+   }
+   else
+     ssh_port = 0;
+ }
+
+
+ if(telnet_port && get_port_state(telnet_port))
+ {
+  if ( isnull(password) ) password = "";
+  if ( ! telnet_checked ) 
+  {
+  banner = get_telnet_banner(port:telnet_port);
+  if ( banner == NULL ) { telnet_port = 0 ; return 0; }
+  # Check for banner, covers the case of Cisco telnet as well as the case
+  # of a console server to a Cisco port
+  # Note: banners of cisco systems are not necesarily set, so this
+  # might lead to false negatives !
+  if ( stridx(banner,"User Access Verification") == -1 && 
stridx(banner,"assword:") == -1)  
+    {
+     telnet_port = 0;
+     return(0);
+    }
+   telnet_checked ++;
+  }
+  
+  check_cisco_telnet(login:login, password:password, port:telnet_port);
+ }
+ return(0);
+}
+
+
+# SSH disabled for now
+#ssh_port = get_kb_item("Services/ssh");
+#if ( ! ssh_port ) ssh_port = 22;
+
+
+telnet_port = get_kb_item("Services/telnet");
+if ( ! telnet_port ) telnet_port = 23;
+
+telnet_checked = 0;
+
+check_cisco_account(login:"cisco", password:"cisco");
+check_cisco_account(login:"", password:"");
+if ( safe_checks() == 0 )
+{
+ check_cisco_account(login:"cisco", password:"");
+ check_cisco_account(login:"admin", password:"cisco");
+ check_cisco_account(login:"admin", password:"diamond");
+ check_cisco_account(login:"admin", password:"admin");
+ check_cisco_account(login:"admin", password:"system");
+ check_cisco_account(login:"monitor", password:"monitor");
+}
+

_______________________________________________
Openvas-commits mailing list
[email protected]
http://lists.wald.intevation.org/mailman/listinfo/openvas-commits

Reply via email to