#VERSION,2.02 # $Id: nikto_msgs.plugin 152 2009-08-13 19:37:44Z deity $ ############################################################################### # Copyright (C) 2006 CIRT, Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; version 2 # of the License only. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ############################################################################### ############################################################################### # PURPOSE # Various messages relating to the server banner ############################################################################### # NOTES # versions are loaded from the "db_server_msgs" file, which should be in the # plugins directory this plugin checks the server version to see if there are # any version specific items in the4 db_server_msgs this differs from # nikto_outdated because that is ONLY checking to see if it is an old version, # whereas this checks to see if the versions match ############################################################################### sub nikto_msgs_init { my $id = { name => "msgs", full_name => "Server Messages", author => "Sullo", description => "Checks the server version against known issues.", scan_method => \&nikto_msgs, copyright => "2008 CIRT Inc." }; return $id; } sub nikto_msgs { my ($mark) = @_; my $dbarray; $dbarray=initialise_db("db_server_msgs"); foreach my $item (@$dbarray) { if ($mark->{banner} =~ /($item->{server})\b/i) { add_vulnerability($mark,"$1 - $item->{message}",$item->{nikto_id},0); } } # Special stuff to pull information from results # McAfee ePO if ($mark->{banner} =~ /(Agent-ListenServer-HttpSvr\/1\.0)\b/i) { my ($RES, $CONTENT) = nfetch($mark,"/","GET"); next unless ($RES == 200); # Computer name my $name=$CONTENT; $name =~ s#(^.*)([a-zA-Z0-9]*)(.*$)#\2#; my $eposerver=$CONTENT; $eposerver =~ s#(^.*)([a-zA-Z0-9]*)(.*$)#\2#; add_vulnerability($mark,"Web server is a McAfee ePO agent, showing the hostname is $name and the ePO server is $eposerver.",80100,0); } # HP WBEM if ($mark->{banner} =~ /(CompaqHTTPServer)/i) { my ($RES, $CONTENT) = nfetch($mark,"/cpqlogin.htm","GET"); next unless ($RES == 200); my $ipaddrs=""; my $name; foreach my $line (split(/\n/, $CONTENT)) { if ($line =~ "System Management Homepage for ") { $name=$line; $name =~ s#(^.*System Management Homepage for )([a-zA-Z0-9]*)(.*$)#\2#; } if ($line =~ "new ObjectIpAddresses") { my $ipaddr=$line; $ipaddr =~ s#(^.*new ObjectIpAddresses\(")([\d\.]+)("\);.*$)#\2#; nprint("$ipaddr"); $ipaddrs .= " $ipaddr"; } } add_vulnerability($mark,"Web server is an HP WBEM agent, showing the hostname is $name and the IP addresses are$ipaddrs.",80101,0); } } 1;