)([Hh][Pp] [Cc][Oo][Ll][Oo][Rr] [Ll][Aa][Ss][Ee][Rr][Jj][Ee][Tt][ A-Z0-9a-z]+)(<\/title>.*)$","$2","Host seems to be an HP Laserjet printer, model:"
"300006","/hp/device/this.LCDispatcher","^([Hh][Pp] [Cc][Oo][Ll][Oo][Rr] [Ll][Aa][Ss][Ee][Rr][Jj][Ee][Tt][ A-Z0-9a-z]+)(<\/title>.*)$","$1","Host seems to be an HP Laserjet printer, model:"
"300007","/hp/device/this.LCDispatcher","^([Hh][Pp] [Ll][Aa][Ss][Ee][Rr][Jj][Ee][Tt][ A-Z0-9a-z]+)(<\/title>.*)$","$1","Host seems to be an HP Laserjet printer, model:"
"300008","/hmstat.htm","^(var spcs=\[['\"])([Ww][Oo][Rr][Kk][Cc][ A-Z0-9a-z]+)(['\"].*)$","$2","Host seems to be a Xerox printer, model:"
"300009","/SoundBridgeStatus.html","(SoundBridge is running software version )([0-9.]*)$","$2","Host seems to be a Roku SoundBridge media device version:"
"300010","/eng/start/StatPtrGen.htm","(^.*PrinterGen\[0\]; sData\[count\+\+\] \= \")([\S]*)(\";)","$2","Host seems to be a Kyocera printer, model:"
"300011","/cab/top.shtml","(^.*)([A-Z0-9]*)(<\/span><\/td>)","$2","Host seems to be a Canon printer, model:"
"300012","/home.asp","(^.*)([\._\-A-Z0-9a-z\(\)\/ ]*)(<\/center><\/td><\/tr>)","$2","Host seems to be a Cyclades terminal server, version:"
"300013","/","(^serverName=\")([A-Za-z0-9\-\.]+)(\";$)","$2","Host seems to be an HP iLO device, hostname:"
"300014","/","(^)(Remote Access Controller)($)","$2","Host seems to be a Dell"
nikto-2.1.4/plugins/db_favicon 0000664 0000000 0000000 00000005150 11554552544 0016353 0 ustar 00root root 0000000 0000000 #VERSION,2.006
# $Id: db_favicon 632 2011-02-19 02:49:31Z sullo $
#######################################################################
# Source: http://cirt.net
# This file may only be distributed and used with the full Nikto package.
# This file may not be used with any software product without written permission from CIRT, Inc.
# (c) 2007 CIRT, Inc., All Rights Reserved.
#
# NOTE: By sending any database updates to CIRT, Inc., it is assumed that you
# grant CIRT, Inc., the unlimited, non-exclusive right to reuse, modify and relicense the changes.
#######################################################################
# Notes:
# NiktoDB 1.0
#######################################################################
"nikto_id","md5hash","description"
"500000","9ceae7a3c88fc451d59e24d8d5f6f166","Plesk managed system"
"500001","71e30c507ca3fa005e2d1322a5aa8fb2","Apache on Redhat"
"500002","b25dbe60830705d98ba3aaf0568c456a","iPlanet Web Server Enterprise Edition 6.0"
"500003","226ffc5e483b85ec261654fe255e60be","Netscape 4.1"
"500004","41e2c893098b3ed9fc14b821a2e14e73","Netscape 6.0"
"500005","f1876a80546b3986dbb79bad727b0374","NetScreen WebUI"
"500006","799f70b71314a7508326d1d2f68f7519","JBoss Server"
"500007","f5f2df7eec0d1c3c10b58960f3f8fb26","Horde Groupware Webmail 1.0.1 (Mnemo Theme)"
"500008","4644f2d45601037b8423d45e13194c93","Apache Tomcat"
"500009","31aa07fe236ee504c890a61d1f7f0a97","Apache 2.2.4"
"500010","bd0f7466d35e8ba6cedd9c27110c5c41","Serena Collage 4.6"
"500011","7cc1a052c86cc3d487957f7092a6d8c3","Horde IMP 3.1.4 or Horde Groupware Webmail 1.0.1"
"500012","f567fd4927f9693a7a2d6cacf21b51b6","Horde IMP 4.1.4 or Horde Groupware Webmail 1.0.1"
"500013","a28ebcac852795fe30d8e99a23d377c1","SunOne 6.1"
"500014","81df3601d6dc13cbc6bd8212ef50dd29","Horde Groupware Webmail 1.0.1 (Nag Theme)"
"500015","919e132a62ea07fce13881470ba70293","Horde Groupware Webmail 1.0.1 (Ingo Theme)"
"500016","ff260e80f5f9ca4b779fbd34087f13cf","Horde Groupware Webmail 1.0.1 (Turba Theme)"
"500017","4987120f4fb1dc454f889e8c92f6dabe","Google Web Server"
"500018","a5b126cdeaa3081f77a22b3e43730942","Horde Groupware Webmail 1.0.1 (Kronolith Theme)"
"500019","dc0816f371699823e1e03e0078622d75","Aruba Networks device"
"500020","d41d8cd98f00b204e9800998ecf8427e","Apache HTTP Server on Apple Mac OS X Server"
"500021","f097f0adf2b9e95a972d21e5e5ab746d","Citrix Access Server"
"500022","69ae01d0c74570d4d221e6c24a06d73b","Roku Soundbridge"
"500023","2e9545474ee33884b5fb8a9a0b8806dd","Ampache"
"500024","d80e364c0d3138c7ecd75bf9896f2cad","Alfresco enterprise content management system"
"500025","639b61409215d770a99667b446c80ea1","Lotus Domino server"
nikto-2.1.4/plugins/db_headers 0000664 0000000 0000000 00000002607 11554552544 0016345 0 ustar 00root root 0000000 0000000 #VERSION,2.007
# $Id: db_headers 632 2011-02-19 02:49:31Z sullo $
#######################################################################
# Source: http://cirt.net
# This file may only be distributed and used with the full Nikto package.
# This file may not be used with any software product without written permission from CIRT, Inc.
# (c) 2009 CIRT, Inc., All Rights Reserved.
#
# NOTE: By sending any database updates to CIRT, Inc., it is assumed that you
# grant CIRT, Inc., the unlimited, non-exclusive right to reuse, modify and relicense the changes.
#######################################################################
# Notes:
#######################################################################
"header"
"accept"
"accept-charset"
"accept-encoding"
"accept-language"
"accept-ranges"
"age"
"allow"
"authorization"
"cache-control"
"connection"
"content-encoding"
"content-language"
"content-length"
"content-location"
"content-md5"
"content-range"
"content-type"
"date"
"etag"
"expect"
"expires"
"from"
"keep-alive"
"host"
"if-match"
"if-modified-since"
"if-none-match"
"if-range"
"if-unmodified-since"
"last-modified"
"location"
"max-forwards"
"p3p"
"pragma"
"proxy-authenticate"
"proxy-authorization"
"range"
"referer"
"retry-after"
"server"
"set-cookie"
"te"
"trailer"
"transfer-encoding"
"upgrade"
"user-agent"
"vary"
"via"
"warning"
"www-authenticate"
"whisker"
"x-aspnet-version"
"x-powered-by"
nikto-2.1.4/plugins/db_httpoptions 0000664 0000000 0000000 00000002731 11554552544 0017323 0 ustar 00root root 0000000 0000000 #VERSION,2.002
# $Id: db_httpoptions 632 2011-02-19 02:49:31Z sullo $
#######################################################################
# Source: http://cirt.net
# This file may only be distributed and used with the full Nikto package.
# This file may not be used with any software product without written permission from CIRT, Inc.
# (c) 2009 CIRT, Inc., All Rights Reserved.
#
# NOTE: By sending any database updates to CIRT, Inc., it is assumed that you
# grant CIRT, Inc., the unlimited, non-exclusive right to reuse, modify and relicense the changes.
#######################################################################
# Notes:
# NiktoDB 1.0
#######################################################################
"nikto_id","method","osvdb","message"
"999976","DELETE","5646","HTTP method ('@TYPE@' Header): 'DELETE' may allow clients to remove files on the web server."
"999978","PUT","397","HTTP method ('@TYPE@' Header): 'PUT' method could allow clients to save files on the web server."
"999982","MOVE","5647","HTTP method ('@TYPE@' Header): 'MOVE' may allow clients to change file locations on the web server."
"999983","CONNECT","0","HTTP method ('@TYPE@' Header): 'CONNECT' may allow server to proxy client requests."
# WebDAV methods - "0" in nikto_id tells the code to treat it differently
"0","PROPFIND","0","webdav"
"0","PROPPATCH","0","webdav"
"0","COPY","0","webdav"
"0","LOCK","0","webdav"
"0","UNLOCK","0","webdav"
"0","SEARCH","0","webdav"
"0","MKCOL","0","webdav"
nikto-2.1.4/plugins/db_multiple_index 0000664 0000000 0000000 00000001627 11554552544 0017755 0 ustar 00root root 0000000 0000000 #VERSION,2.005
# $Id: db_multiple_index 632 2011-02-19 02:49:31Z sullo $
#######################################################################
# Source: http://cirt.net
# This file may only be distributed and used with the full Nikto package.
# This file may not be used with any software product without written permission from CIRT, Inc.
# (c) 2009 CIRT, Inc., All Rights Reserved.
#
# NOTE: By sending any database updates to CIRT, Inc., it is assumed that you
# grant CIRT, Inc., the unlimited, non-exclusive right to reuse, modify and relicense the changes.
#######################################################################
# Notes:
#######################################################################
"index"
"index.php"
"index.php3"
"index.html"
"index.htm"
"index.shtml"
"index.cfm"
"index.cgi"
"index.pl"
"index.asp"
"index.aspx"
"default.asp"
"default.aspx"
"default.htm"
"index.do"
"index.jhtml"
nikto-2.1.4/plugins/db_outdated 0000664 0000000 0000000 00000337577 11554552544 0016564 0 ustar 00root root 0000000 0000000 #VERSION,2.014
# $Id: db_outdated 632 2011-02-19 02:49:31Z sullo $
#######################################################################
# Source: http://cirt.net
# This file may only be distributed and used with the full Nikto package.
# This file may not be used with any software product without written permission from CIRT, Inc.
# (c) 2008 CIRT, Inc., All Rights Reserved.
#
# NOTE: By sending any database updates to CIRT, Inc., it is assumed that you
# grant CIRT, Inc., the unlimited, non-exclusive right to reuse, modify and relicense the changes.
#######################################################################
# Notes:
# NiktoDB 1.0
#######################################################################
"600000","\(www\.ebdesk\.com\)/","1.3.20","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600001","0W/","0.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600002","3Com/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600003","3Com/v","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600004","4D_WebStar_D/","7.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600005","4D_WebSTAR_S/","5.4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600006","4n4l0g4l1f3/","31337","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600007","a-p-a-c-h-e/","1-3-26","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600008","ABWS/","537","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600009","Abyss/","2.6.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600010","AbyssLib/","1.0.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600011","Academy/","5.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600012","accela/","1.92","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600013","Accipiter-DirectServer/","6.0.0.36","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600014","ACI-4D/","6.57","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600015","Acme\.Serve/","v1.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600016","ActiveAgent/","3.51","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600017","ActiveLinks/","0.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600018","ActuateHttpService/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600019","Adaptec ASM ","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600020","ADSM_HTTP/","0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600021","AdSubtract","2.54","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600022","adtag/","1.0a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600023","Adtran Embedded HTTP Server ","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600024","aEGiS_nanoweb/","2.2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600025","AG/","1.3.27","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600026","AGAVA.Banners/","1.10","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600027","Agent-ListenServer-HttpSvr/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600028","Agranat-EmWeb/","R5_2_6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600029","Agranat/","Agranat-EmWeb/R5_2_6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600030","Alchemy Eye/","Alchemy Eye/3.0.10","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600031","AlkalineSearchEngine/","1.","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600032","Allegro-Software-RomPager/","4.61","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600033","AllegroServe/","1.2.24","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600034","AMOS-HTTPD/","1.5A127","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600035","AMOS/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600036","Analogx","1.0.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600037","Anonymous/","1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600038","anses/","1.16","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600039","AnWeb/","1.42p","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600040","AOLserver/ ","4.5.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600041","Apache Coyote/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600042","Apache Tomcat/","Apache Tomcat/4.1.36","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600043","Apache-ADTI/","1.3.28","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600044","Apache-AdvancedExtranetServer/","2.0.53","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600045","Apache-Coyote/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600046","Apache-NeoNova/","1.3.27","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600047","Apache-NeoWebScript/","2.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600048","Apache-SSL-US/","1.1.1+1.2+1.3b3-dev","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600049","Apache-SSL/","1.36","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600050","Apache/","Apache/2.2.17","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER). Apache 1.3.42 (final release) and 2.0.64 are also current."
"600051","apachejserv/","1.1.2i","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600052","ApacheSSL/","2.0.58","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600053","AppleEmbeddedWebServer/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600054","AppleShareIP/","6.3.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600055","ARIN-HTTPd/","1.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600056","ARM/","06TD.34","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600057","ArtBlast/","3.5.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600058","ASP/","4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600059","AtermWARPSTAR/","1.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600060","auth_external/","2.2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600061","auth_kerberos/","4.11","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600062","auth_ldap/","1.6.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600063","auth_mysql/","1.11","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600064","auth_radius/","1.7PR1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600065","AuthentiCache/","2.0.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600066","AuthMySQL/","4.3.9-2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600067","AuthMySQL/","deam.org-1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600068","AuthMySQL/","trans-1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600069","AuthMySQLD/","0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600070","AuthNuSphere/","1.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600071","AuthPG/","1.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600072","AuthPostgreSQL/","0.9.7d","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600073","AuthSMB/","0.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600074","AuthTDS/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600075","AV/","1.0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600076","Awhttpd/","Awhttpd/2.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600077","AWS/","1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600078","AXISThinWizard/","v3.05.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600079","AxKit/","1.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600080","balanced_by_mod_backhand/","1.1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600081","BaseHTTP/","0.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600082","BBC ","06.20.050","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600083","BBCE/","6.6.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600084","BeatBoxCapture/","6.5.64","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600085","Ben-SSL/","1.60","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600086","beta/","0.12","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600087","BigFix HTTP Server/","5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600088","BillGatesSeinWebServer/","6.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600089","BiRD/","0.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600090","bkhttp/","0.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600091","Blazix/","1.2.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600092","Bluestem/","0.12","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600093","Boa/","0.94.14","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600094","BOA/","1.2.2c","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600095","bozohttpd/","20060517","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600096","broker/","8.7.0.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600097","BRS-WebWeaver/","1.33","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600098","BSAFE-SSL-C/","1.0.0i","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600099","BSDI/","3.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600100","BunnyServer/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600101","buser/","4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600102","BustaWS/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600103","bw/","3.37","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600104","BWS/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600105","C2NetEU/","3012","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600106","C2NetUS/","2011","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600107","Canon Http Server ","2.10","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600108","Caudium/","1.4.12","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600109","CCO/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600110","CERN/","3.0A","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600111","CheckPointSVNfoundation/","NGFP2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600112","Cheetah/","2.1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600113","Cherry/","6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600114","CherryPy/","3.1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600115","Chili!Soft-ASP/","3.6.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600116","cisco-CPA/","cisco-CPA/3.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600117","cisco-IOS/","12.0 HTTP-server/1.0(1)","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600118","CiteHTTPD/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600119","Citysearch-Apache/","1.3.12","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600120","CL-HTTP","70.190","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600121","CM4all-JailCGI/","1.3.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600122","CMS_Pipelines/","1.0110","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600123","CMS/","20.000","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600124","CoffeeMaker/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600125","Commerce-Builder/","2.20","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600126","CommerceServer400/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600127","CommuniGatePro/","5.3.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600128","Communique/","3.5.2.1.2391","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600129","CommuniqueServletEngine/","4.0.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600130","CompaqHTTPServer/","9.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600131","ConcentricHost-Ashurbanipal/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600132","ConcentricHost-NaramSin/","1.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600133","ConductorSNMP/","1.0.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600134","ConferenceRoom/","2.1-SEC.win32-ws2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600135","confproxy/","3.0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600136","CoolWeb/","3.8.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600137","Core/","2.5.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600138","Cougar ","9.01.01.5001","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600139","covalent_auth/","2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600140","CovalentSSL/","2.1.03.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600141","Coyote/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600142","cpaneld/","cpaneld/6.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600143","cpsrvd/","11.28.64","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600144","Crossing/","5.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600145","Cryptoveg/","4.0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600146","CSacek/","2.1.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600147","Cthulhu/","0.23a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600148","CUPS/","1.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600149","da\.ru/","1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600150","DartWebServerTool/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600151","DAV/","2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600152","David-WebBox/","7.00a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600153","Debut/","0.03","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600154","DeleGate/","8.5.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600155","DeltaEdgeCache/","release-2-28-rc2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600156","DHost/","9.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600157","diffprivs/","20030624","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600158","Dina HTTPd Server/","1.15","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600159","DinaHTTPdServer/","1.15","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600160","Dixienet/","6.6.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600161","DLXApache/","4.3.29","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600162","DMMWeb/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600163","Domestic/","v2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600164","Domino-Go-Webserver/","4.6.2.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600165","DotTV Webserver ","1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600166","DSS/","5.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600167","dwhttpd/","dwhttpd/4.2a7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600168","dynamicScale/","2.0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600169","E-Neverland Data Palm/","1.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600170","e/FSV-","28-01","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600171","eBD/","3.2.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600172","ebLogic XMLX Module ","8.1 SP1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600173","EHTTP/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600174","EIMWebServer/","3.35","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600175","Embedded HTTP Server","2.0f","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600176","Embperl/","2.2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600177","EMWHTTPD/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600178","Engine/","1.57","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600179","Enhydra-MultiServer/","3.1.1b1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600180","Entangle/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600181","EnterpriseWeb/","1.1.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600182","ePerl/","2.2.14","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600183","Eplicator/","1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600184","EPSON-HTTP/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600185","EServ/","3.00","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600186","ESMWEBSERVERS/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600187","eVisMUX/","6.0.51212128","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600188","EWS-NIC3/","6.31","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600189","EWS-NIC4/","8.43","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600190","Ews/","1.11","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600191","Export/","v2.0-1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600192","exteNdApplicationServer/","100.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600193","ExtraWeb/","4.0.14","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600194","fhttpd/","0.4.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600195","FileMakerPro/","6.0v4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600196","filter/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600197","FireSite/","2.7_PPC","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600198","FirstClass/","8.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600199","FJapache/","6.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600200","fnord-spb/","280604","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600201","fnord/","1.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600202","FooServe/","0.1a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600203","Footprint","4.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600204","FortiWeb-","2.2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600205","FoundryNetworks/","2.20","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600206","fp/","4.0.4.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600207","FPWS/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600208","FreezeServer/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600209","Frontier/","9.1b2-MacOSX","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600210","FrontPage-PWS32/","4.0.2.2717","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600211","FrontPage/","5.0.4.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER) (may depend on server version)"
"600212","FSID/","M25-8514","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600213","FSPMS/","5.11","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600214","FT::Srv/","2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600215","FTU/","2.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600216","Fujitsu-InfoProvider-Pro/","5.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600217","Fujitsu-InfoProvider-Pro/V","3.0L20","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600218","Ganesh/","2.2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600219","gettxt/","1.0a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600220","GFE/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600221","GG/","3.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600222","giFT-Gnutella/","0.0.10.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600223","glass/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600224","GMSE_Sandcastle/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600225","Gnat-Box/","3.3.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600226","GNNserver/","2.03","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600227","GoAhead-Webs/","2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600228","GoAhead/","2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600229","GoGoGadgetWebserver/","0.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600230","GordianEmbedded/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600231","GoServe/","2.52","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600232","Ground/","5.3.35","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600233","GTS-Datanet/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600234","GTS/","2.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600235","gtxs/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600236","GUILD/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600237","GWS/","2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600238","HackersLabWebServer/","7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600239","Hardened-PHP/","5.0.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600240","HavelsanEmbeddedQuix/","18.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600241","Hawkeye/","1.3.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600242","heitml/","2.05","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600243","Hitmatic/","5.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600244","HomeGrownServer/","10.3.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600245","Homepage-Engine/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600246","HP Apache-based Web Server/","1.3.27 (Unix)","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600247","HP Web Jetadmin/","2.0.50","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600248","HP-ChaiServer/","HP-ChaiServer/3.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600249","HP-ChaiSOE/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600250","HP-UX_Apache-based_Web_Server/","2.0.48","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600251","Hp-Web-JetAdmin-","5.06.190","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600252","Hp-Web-Server-","3.00.1696","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600253","HPWB/","4.3.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600254","HSP/","2.10.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600255","HTS/","2.99","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600256","HTTP/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600257","HTTPd-WASD/","8.3.B2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600258","httpd/","1.00","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600259","HTTPlistener/","1.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600260","HTTPS/","0.991","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600261","HttpStk/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600262","Hunn/","1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600263","HyNetOS/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600264","Hyperwave-Information-Server/","5.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600265","Hyperwave-IS/","6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600266","IBM HTTP Server/","V5R3M0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600267","IBM_HTTP_Server/","6.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600268","IBM-HTTP-Server/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600269","IBM-ICS/","4.2.1.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600270","IBM-PROXY-WTE-US/","3.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600271","IBM-PROXY-WTE/","6f.0.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600272","IBMHTTPServer/","V5R3M0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600273","icecast/","icecast/1.3.12","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600274","IceWarp/","9.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600275","IceWarpWebSrv/","3.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600276","ID/","878810","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600277","IdeaWebServer/","v0.70","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600278","IDS-Server/","4.1.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600279","IgServ/","1.0.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600280","iHTML/","2.20.324","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600281","IIS/","7.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600282","Inc.onz/","VMV4R4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600283","include/","3.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600284","Indy/","10.0.52","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600285","inets/","2.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600286","Infrastructure/","4.0.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600287","Inktomi Search","4.5.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600288","Intel NetportExpressPro/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600289","Interaction/","4.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600290","Interambition HTTPd/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600291","InterambitionHTTPd/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600292","InterJet/","3.2.1p16","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600293","InterSpace HTTP Tunneling/","1.01","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600294","InterSpaceFDS/","2.00","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600295","InterSpaceHTTPTunneling/","1.01","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600296","Intrusion/","1.0.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600297","IPCheck/","5.4.0.796","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600298","IPL/","2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600299","iPlanet-Enterprise/","4.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600300","iPlanet-Web-Proxy-Server/","3.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600301","iPlanetEnterprise/","4.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600302","ipMonitor ","9.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600303","iPrism-httpd/","v3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600304","Ipswitch-IMail/","8.22","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600305","IpswitchWebCalendaring/","8.12","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600306","iPyramid.system/","1.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600307","ISS-PXServer/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600308","iTPSecureWebServer/","4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600309","iTunes/","4.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600310","IXOS-eCON/","5.0A","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600311","J2EE SDK/","1.3.1 (HTTP/1.1 Connector)","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600312","J2EESDK/","1.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600313","JAGeX/","3.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600314","JaguarServerVersion/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600315","Jana-Server/","2.4.6.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600316","JanaServer/","2.2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600317","JARING/","10.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600318","java/","1.4.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600319","JavaHttpServer/","0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600320","JavaWebServer/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600321","JBoss_","4_0_3_SP1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600322","JC-HTTPD/","1.14.18","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600323","JETServ/","2.2.22","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600324","Jetty","Jetty(7.2.2)","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600325","JeusWebContainer/","Jeus WebContainer/4.2.4.7","RUNNING_VER appears to be outdated (current is at least CURRENT_VER)"
"600326","Jigsaw/","2.2.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600327","Joke/","0.9b5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600328","JRun/","4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600329","JRunWebServer/","3.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600330","JSP/","2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600331","JWalkServer/","Version3.3C8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600332","JXAS/","3.0.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600333","keyLargo HTTPD ","v1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600334","KK-NET wpp/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600335","KnowNowLiveServer/","2.0.7.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600336","Koalah/","1.3.31","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600337","L series Web/","1.0-beta","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600338","L/","FSV-28-01","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600339","LabVIEW/","5.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600340","LANWeb.I/","v1.82","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600341","Lasso/","6.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600342","Legend-IIS/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600343","LePenguin ","0.2a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600344","Liberator/","3.4.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600345","libwww-perl-daemon/","5.827","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600346","lighttpd/","1.5.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600348","Line-Tap/","3.13","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600349","Linux-Mandrake/","3mdk","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600350","Linux/","11mdk","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600351","LiteSpeed/","2.2.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600352","LittleDutchMoose/","v10.3Build","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600353","LocalDirector/","4.2.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600354","Lotus-Domino/","6.0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600355","Lotus-Domino/Release-","4.6.7a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600356","LURHQServer/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600357","LV_HTTP/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600358","M-HTTPD/","2.0.11.3 (Unix) PHP/3.0.12","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600359","MacHTTP/","2.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600360","madna/","1.42","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600361","MAIA/","4.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600362","MailSite-HTTPMA/","8.0.5.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600363","MakeShop/","1.0.29","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600364","Mandrake Linux/","10.2mdk","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600365","Mark/","1.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600366","Mathopd/","1.6b7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600367","Matsya/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600368","Mediasurface/","4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600369","Meridian Data/","2.1.340","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600370","Meta-HTML/","6.10","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600371","MGI Server/","1.7.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600372","MHttpd/","4.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600373","Micro-HTTP/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600374","Microsoft_PWS_Mac/","4.0b1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600375","Microsoft-HTTPAPI/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600376","Microsoft-IIS/","7.5","@RUNNING_VER appears to be outdated (4.0 for NT 4, 5.0 for Win2k, current is at least @CURRENT_VER)"
"600377","Microsoft-Internet-Information-Server/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600378","Microsoft-PWS-95/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600379","Microsoft-PWS/","3.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600380","Microsoft-WinCE/","6.00","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600381","Midgard/","1.4.2-1/SG","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600382","mini_httpd/","1.1919","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600383","Mini-Proxy/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600384","Mini-Web/","0.10","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600385","MiniServ/","1.530","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600386","MiniWebSvr/","0.0.9svn","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600387","Minstrel-httpd/","2.0.g","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600388","Miranda Web/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600389","MirandaWeb/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600390","Mirapoint/","3.5.4-GR","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600391","Miwok/","1.618","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600392","mod_accel/","1.0.34","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600393","mod_accessref/","1.0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600394","mod_accounting/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600395","mod_adu/","cu_1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600396","mod_advert/","1.12","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600397","mod_antihak/","0.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600398","mod_apreq2-20090110/","2.7.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600399","mod_attach/","0.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600400","mod_auth_ascauth/","1.1-Basic","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600401","mod_auth_birdview/","1.00","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600402","mod_auth_cutoken/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600403","mod_auth_external/","2.2.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600404","mod_auth_ianus/","3.0.9rc1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600405","mod_auth_inst.c/","19980202","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600406","mod_auth_ip/","1.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600407","mod_auth_kerb/","5.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600408","mod_auth_ldap/","2.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600409","mod_auth_mda/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600410","mod_auth_mysql/","2.20","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600411","mod_auth_nds/","0.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600412","mod_auth_notes/","0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600413","mod_auth_ns/","0.2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600414","mod_auth_nt/","1.3.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600415","mod_auth_ntdom/","0.4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600416","mod_auth_ora7/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600417","mod_auth_ora8/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600418","mod_auth_oracle/","0.5.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600419","mod_auth_pam_external/","0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600420","mod_auth_pam/","1.1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600421","mod_auth_passthrough/","2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600422","mod_auth_pgsql_sys/","0.9.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600423","mod_auth_pgsql/","2.0.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600424","mod_auth_pop3/","0.0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600425","mod_auth_radius/","1.5.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600426","mod_auth_remote/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600427","mod_auth_shadow/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600428","mod_auth_sspi/","1.0.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600429","mod_auth_tkt/","2.1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600430","mod_authserv_userdir/","asam1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600431","mod_backhand/","1.2.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600432","mod_bandwidth/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600433","mod_become/","1.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600434","mod_bigwig/","2.0-15","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600435","mod_binford/","6100","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600436","mod_blosxom/","0.05","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600437","mod_bluestem/","0.14","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600438","mod_bwlimited/","1.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600439","mod_bwprotect/","0.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600440","mod_bwshare/","0.2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600441","mod_cap/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600442","mod_catax/","4.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600443","mod_cgi_sugid/","1.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600444","mod_choke/","0.06","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600445","mod_chroot/","0.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600446","mod_clarassl/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600447","mod_clickthru/","0.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600448","mod_czech/","3.1.1b2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600449","mod_deflate/","1.0.21","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600450","mod_demonstrans/","0.3.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600451","mod_dp/","lk.0.4.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600452","mod_dtcl/","mod_dtcl/0.5.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600453","mod_fastcgi/","2.4.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600454","mod_filter/","1.4.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600455","mod_frontpage/","4.0.4.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600456","mod_gzip/","2.1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600457","mod_id/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600458","mod_imode/","1.0.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600459","mod_index_rss/","1.01","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600460","mod_interchange/","1.29","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600461","mod_ipdrop/","0.01","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600462","mod_ipw/","0.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600463","mod_jk/","1.2.30","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600464","mod_jk2/","2.0.5-dev","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600465","Mod_JServ/","1.1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600466","mod_layout/","4.0.1a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600467","mod_ldap_userdir/","1.1.14","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600468","mod_lisp/","2.35","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600469","mod_log_byte/","0.001","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600470","mod_log_bytes/","1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600471","mod_loopback/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600472","mod_macro/","1.1.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600473","mod_mcrypt/","2.4.11","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600474","mod_mirror/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600475","mod_mono/","2.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600476","mod_mp3/","1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600477","mod_mp3idver/","0.12","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600478","mod_mrim/","0.17","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600479","mod_mundinteractivos/","2.1.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600480","mod_mya/","3.0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600481","mod_mylo/","0.2.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600482","mod_nsn/","1.0_0-dev","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600483","mod_oas/","5.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600484","Mod_OOiS/","0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600485","mod_oprocmgr/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600486","mod_pcgi2/","2.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600487","mod_perl/","5.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600488","mod_plsql/","3.0.9.8.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600489","mod_pointer/","0.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600490","mod_protection/","0.0.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600491","mod_psoft_traffic/","0.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600492","mod_pubcookie/","3.3.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600493","mod_pubcookie/a5/","1.77.2.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600494","mod_python/","3.3.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600495","mod_random/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600496","mod_rbcban/","2.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600497","mod_rdbcookie/","1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600498","mod_relocate/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600499","mod_repository/","0.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600500","mod_require_host/","2.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600501","mod_roaming/","2.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600502","mod_rpaf/","0.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600503","mod_rsawebagent/","5.3.0[026]","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600504","mod_ruby/","1.3.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600505","mod_scgi/","1.13","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600506","Mod_security/","1.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600507","mod_session/","1.12","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600508","mod_sleep/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600509","mod_snmp/","1.3.6.11","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600510","mod_spidercache/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600511","mod_ssl/","2.8.31","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER) (may depend on server version)"
"600512","mod_sugid_files/","2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600513","mod_survey/","3.0.15","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600514","mod_suspend/","0.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600515","mod_tagx/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600516","mod_tcl/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600517","mod_text2html/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600518","mod_throttle/","3.2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600519","mod_trigger/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600520","mod_tsunami/","3.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600521","mod_uwa/","2.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600522","mod_vdbh/","1.0.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600523","mod_vhost_ldap/","1.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600524","mod_vhost_mysql/","0.10","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600525","mod_view/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600526","mod_virgule/","1.41","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600527","mod_virtual/","0.97.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600528","mod_watch/","4.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600529","mod_webapp/","1.2.0-dev","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600530","mod_webkit/","0.9.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600531","mod_webkit2/","0.9.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600532","mod_websh/","3.5.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600533","mod_wodan/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600534","mod_xlayout_jh/","0.0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600535","mod_xslt/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600536","mod-xslt/","1.3.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600537","ModLayout/","4.0.2a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600538","ModNeva/","2.0.b","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600539","Monkey/","0.9.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600540","Mono-XSP Server/","1.0.5.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600541","Mono-XSPServer/","1.0.5.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600542","MontaVistaLinux/","2.1UPnP","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600543","MortBay-Jetty-","2.3.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600544","MS-MFC-HttpSvr/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600545","MSIWB/","MSIWB/1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600546","MTransit2/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600547","Mya/","1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600548","MyWebServer/","1.0.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600549","NaviServer/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600550","NCSA-CRC+/","1.4.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600551","NCSA/","1.5.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600552","NDCAP/","2.00","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600553","NeoWebScript/","3.3.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600554","NetApp/","7.1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600555","NetApp/","7.1P3D1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600556","NetApp/build.","RbecksN_000805_0805.000805_0940","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600557","NetCache appliance \(NetApp\/","6.1.1RC1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600558","NetCacheappliance\(NetApp\/","6.1.1RC1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600559","NetEVI/","3.01","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600560","NetPhantom/","3.61","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600561","NetPresenz/","4.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600562","NetPublisher/","1.10.020","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600563","Netrox-Apache/","1.3.24","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600564","Netscape-Administrator/","3.54","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600565","Netscape-Brew/","6.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600566","Netscape-Commerce/","1.13","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600567","Netscape-Communications/","1.12","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600568","Netscape-Enterprise/","6.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600569","Netscape-FastTrack/","4.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600570","Netscape-Proxy/","3.52","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600571","NetWare-Enterprise-Web-Server/","5.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600572","NetZoom","1.00","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600573","ngd/","4.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600574","mod_wsgi/","3.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600575","nginx/","0.8.54","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600576","Niagara Web Server/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600577","NiagaraWebServer/","3.5.25.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600578","NIS/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600579","Nitix/","4.2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600580","Novell-HTTP-Server/","3.1R1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600581","NS_","6.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600582","Nucleus/","4.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600583","NUD/","3.9.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600584","NULLhttpd/","0.5.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600585","NYSED-A-Series/","2.0X","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600586","OAS/","4.57","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600587","OFIWebServer","1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600588","OmniHTTPd/","2.10","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600589","OmniSecure/","3.0a3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600590","Open-Market-Secure-WebServer/","V2.1.","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600591","Open-Market-Secure-WebServerGlobal/","2.0.10.RC0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600592","Open-Market-SecureLink-Bridge/","V2.1.RC0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600593","OpenPKG/","2.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600594","OpenSA/","1.0.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600595","OpenSSL/","1.0.0d","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER). OpenSSL 0.9.8r is also current."
"600596","oplweb/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600597","Oracle HTTP Server Powered by Apache/","1.3.22","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600598","Oracle_Web_Listener_NT_","2.1.0.3.1/1.20in2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600599","Oracle_Web_Listener/","4.0.8.2.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600600","Oracle_Web_listener2.1/","1.20in2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600601","Oracle_Web_listener3.0.2.0.0/","2.14FC1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600602","Oracle_Web_listener3.0/","2.13","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600603","Oracle_WebDb_Listener/","2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600604","Oracle-Application-Server-10g/","10.1.3.1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600605","Oracle9i Enterprise Edition Release ","9.2.0.1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600606","Oracle9iAS ","(9.0.3.0.0) Containers for J2EE","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600607","Oracle9iAS-Web-Cache/","9.0.4.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600608","Oracle9iAS/","9.0.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600609","OracleAS-Web-Cache-10g/","9.0.4.1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600610","Orion/","2.0.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600611","OSDK/","2.0.44","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600612","OSU/","3.10a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600613","OWW/","29.3.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600614","Pack/","1.0-ea1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600615","PaintChatHTTP/","3.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600616","PasteWSGIServer/","0.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600617","Patchy/","1.3.28","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600618","PBFilter/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600619","PCGI/","2.0a5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600620","Perl/","v5.12.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600621","PersonalNetFinder/","1.0 ID/ACGI","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600622","PEWG/","1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600623","Phantom/","2.2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600624","PHP-CGI/","0.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600625","PHP/","5.3.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600626","PHP/FI-","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600627","PI/","7.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600628","Pi3Web/","2.0.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600629","pks_www/","0.9.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600630","plex/","9.5.2a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600631","plexus/","3.0m","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600632","Polycom-WS/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600633","Pow Web/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600634","PowerDynamo Personal Web Server/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600635","PoweredByIISBanner/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600636","PowerWeb/","4.05r5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600637","PowWeb/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600638","Pramati Server/","5.0 SP3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600639","PRINT_SERVER WEB ","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600640","ProfiHost.com/","1.3.28","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600641","Protocol ","1.99; Server OpenSSH_2.1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600642","proxy_html/","3.1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600643","prxp_module/","1.9.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600644","prxp_solo/","1.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600645","Purveyor / ","v1.2 Windows NT","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600646","Purveyor Encrypt Export/","v2.0-1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600647","Purveyor/","v1.3.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600648","PWPWEB/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600649","PWS/","3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600650","PWSERV-","65","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600651","PyApache/","4.19","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600652","Python/","2.6.10","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600653","QTSS/","4.1.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600654","QuantumCorporation./","3.4.790","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600655","query/","1.16.83","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600656","Quid Pro Quo/","2.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600657","QuidProQuo/","2.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600658","RAID HTTP Server/","1.11","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600659","RAIDHTTPServer/","1.11","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600660","Rapid Logic/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600661","RapidLogic/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600662","Rapidsite/Apa/","1.3.27","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600663","RAQdevil/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600664","Rational_Web_Platform/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600665","RCS/","3000","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600666","RealVNC/","4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600667","Red-Hat-Secure/","3.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600668","RedHat/","3022","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600669","RedirServer/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600670","Redline Networks Accelerator ","2.3.13","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600671","REMTEK/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600672","RENSRV/v","8.43","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600673","Replicon Web Time Sheet/","6.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600674","RepliconWebTimeSheet/","6.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600675","Replique/v","0.2.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600676","Report Server/","3.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600677","Resin/","3.1.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600678","rewrit/","1.1a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600679","rewrite/","3.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600680","Rex/","9.0.0.2980","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600681","REXX_SOCKETS/","3.01","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600682","REXX/","4.01","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600683","RMSWebServer/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600684","RomPager/","4.07","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600685","Roxen/","5.0.403_NT-release2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600687","Roxen·Challenger/","1.3.126","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600688","Ruby/","1.8.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600689","rus/","PL30.22","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600690","rwh/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600691","S.u.S.E./","6.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600692","Sambar/","Sambar/5.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600693","SAPJ2EEEngine/","7.01","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600694","SAPOttpd/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600695","Savant/","3.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600696","SDD/","1.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600697","Secure/","3.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600698","secured_by_Covalent/","1.6.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600699","secured_by_Raven/","1.5.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600700","SecureEntry/","0.1.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600702","SecureTransport/","4.8.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600703","SEDWebserver/","1.3.26","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600704","Seed/","4103c","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600705","Serv-U ","v2.5j","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600706","Server:Apache/","1.2b7-dev","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600707","Server/","10.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600708","Servertec-IWS/","1.11","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600709","Service admin/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600710","Servlet/","2.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600711","ServletExec/","3.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600712","ServletExecAS/","3.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600713","Shadow-OS-390-Web-Server/","04.08.01","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600714","SHC/","1.5.8b","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600715","ShomitiTHGs/","3.10","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600716","Signature/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600717","SilverStream Server/","3.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600718","SilverStreamServer/","100.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600719","Simple, Secure Web Server ","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600720","SimpleHTTP/","1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600721","SimpleWebserver/","2.13","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600722","simwebs/","4.0.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600723","SiteScope/","7.9.5.14","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600724","SkunkWeb/","3.4b3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600725","Slinger/","1.1a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600726","Sly-ISUmods/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600727","Smart CDS/","2.9-final","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600728","SmartCDS/","2.9-final","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600729","SmartServer/","4.08.0002","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600730","SmiskigWWWServer/","69","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600731","Snap Appliances, Inc./","3.0.566","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600732","SNMP Research DR-Web Agent/","1.25.4.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600733","SomeServer/","4.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600734","SonarHosting/","1.3.27","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600735","SpaceSurfer/","1.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600736","SpecialixJETSTREAM/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600737","Speed Touch Web Server/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600738","SpeedTouchWebServer/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600739","Spinnaker/","3.12","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600740","SpinServer/","1.0.00","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600741","Spipe/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600742","Splash/","3.0.3(Foo-nix)","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600743","Spry-SafetyWEB-Server-NT/","1.3a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600744","Spyglass_MicroServer/","2.01FC1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600745","Squeegit/","1.2.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600746","Squid/","3.0.STABLE14","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600747","SSI/","POEM-iso2022-20001201","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600748","SSL/","1.15","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600749","SSLeay/","0.9.0b","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600750","SST/","210q","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600751","Statistics Server ","5.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600752","Stonghold/","2.4.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600753","StorageNetFibreChannelAccessHub/","V1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600754","StorageTekAccessHub/","V1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600755","StoreSense-Bridge/","1.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600756","Streamer-Server/","3.1.18","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600757","Stronghold/","4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600758","StummCom/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600759","StWeb/","1.3.27","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600760","Sun Directory Services ","3.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600761","Sun_WebServer/","2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600762","Sun-Java-System-Application-Server/","72004Q2UR5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600763","Sun-Java-System-Web-Server/","7.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600764","Sun-ONE-Application-Server/","7.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600765","Sun-ONE-ASP/","4.0.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600766","Sun-ONE-Web-Server/","6.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600767","SunOS/","5.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600768","SVN/","1.6.13","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600769","sw/","1.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600770","swcd/","5.2.0032","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600771","SWS-","2.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600772","sxnet/","1.2.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600773","System Management Homepage/","2.1.6.156","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600774","T-httpd/","1.2.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600775","T/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600776","TAC/","Xenta 5111.10","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600777","TagWeb/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600778","TAuth/","1.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600779","Tcl-Webserver/","3.4.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600780","TeamFile/","2.1.2-4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600781","TeamTrack/","6.1(61025)","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600782","TeleFinder/","5.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600783","Temple-of-Hate/","9.1.1-1.3.31","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600784","Texis-Monitor/","4.03.1051642764","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600785","THEO Server/","5.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600786","ThreadedDBL/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600787","thttpd/","2.25b29dec2003","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600788","Thunderstone-Texis-Vortex/","4.02.1047973790","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600789","Thunderstone-Texis/","4.03.1052723967","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600790","Thy/","0.9.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600791","tigershark/","3.0.128","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600792","TinyWeb/","1.93","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600793","tivo-httpd-","1:8.3-01-2:540","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600794","TKTAuth/","1.3.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600795","Tomcat Web Server/","3.3.2 Final ( JSP 1.1; Servlet 2.2 )","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600796","Tomcat/","4.1.27","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600797","tracd/","0.10.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600798","trakkerd/","v2.87-mm-as+re+ex+mp-WAP+WML","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600799","Tree/","8.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600800","TSM_HTTP/","0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600801","TTP/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600802","TUX/","2.0 (Linux)","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600803","TuxSQLConf/","20070207-00","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600804","TuxTrafficLogRotate/","20051209-00","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600805","Ubicom/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600806","UcoZXSrv/","1.4.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600807","UHTTPServer/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600808","Ultraseek/","5.8.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600809","UNIT_Homepage/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600810","UnrealEngine UWeb Web Server Build ","436","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600811","UPS_Server/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600812","UserLand Frontier/","9.0-WinNT","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600813","UserWeb/","v2.65","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600814","uWS/","2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600815","v.ii/","0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600816","v2h/","1.5.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600817","VCNET2-Server/","1.03","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600818","VDB/","1.1.1-se","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600819","Vernier/","5.2.0.63","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600820","vhostdb/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600821","Viking/","1.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600822","Virata-EmWeb/","R6_2_1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600823","VIRTUAL/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600824","VisiBroker/","4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600825","VisualPulse (tm) ","3.0c","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600826","Vivasoft/","8.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600827","VM_ESA/","2.3.0.9902","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600828","VM:Secure/","2.5A","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600829","VM:Webgateway/","03.1A","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600830","Vorlon SR ","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600831","Vortech_PHP/","0.1.0-p0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600832","vqServer/","vqServer/1.9.55","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600833","w/CBS::adtag/","1.0a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600834","w/CBS::gettxt/","1.0a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600835","WC/","3000","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600836","WDaemon/","10.0.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER). Versions lower than 4 have serious vulnerabilities."
"600837","Web Crossing/","4.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600838","Web Sphere Application Server/","5.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600839","Web Transaction Server For ClearPath MCP ","6.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600840","Web_Server_4D/","3.6.1b8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600841","Web-Server/","3.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600842","WEB602/","1.04","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600843","WebAuth/","3.2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600844","WebBase 4.5 build ","69","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600845","WebCo/","Build9708-2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600846","WebCollage-Syndicator/","3.2.4.4040","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600847","WebCompanion/","6.0v1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600848","webfs/","1.21","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600849","weBLink/","0.3.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600850","WebLogic ","5.1.0 Service Pack 9 04/06/2001 12:48:33 #105983","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600851","WebLogic WebLogic Server ","7.0 SP2 Sun Jan 26 23:09:32 PST 2003 234192","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600852","WebLogic WebLogic Temporary Patch ","5 for PeopleSoft","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600853","WebLogic WebLogic Temporary Patch for ","CR067505 02/12/2002 17:10:21","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600854","WebLogic/","7.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600855","WebOTX_Web_Server/","1.3.36","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600856","WEBrick/","1.3.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600857","WebSEAL/","6.1.0.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600858","Webserver/","2.71828183","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600859","Webshare/","1.2.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600860","WebSiphon/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600861","WebSite/","3.5.19","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600862","WebsiteFactory/","0.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600863","WebSitePro/","3.1.13.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600864","Websphere/","4.0.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600865","WebSphereApplicationServer/","7.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600866","WebSrv/","3.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600867","WebSTAR/","4.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600868","WebTen/","3.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600869","WebtoB/","4.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600870","WebTopia/","2.2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600871","WebTV/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600872","WebTwist/","3.0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600873","WebWhois/","2.0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600874","WebZerver/","V06.04","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600875","wg_httpd/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600876","WhatsUp_Gold/","8.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600877","whostmgr/","whostmgr/3.9.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600878","Wind Manage/","4.00","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600879","WindManage/","4.00","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600880","Windows-IIS/","5.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600881","WindWeb/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600882","WISE_Homepage/","1.0.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600883","WN/","2.4.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600884","Worldgroup/","3.30","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600885","WSGIServer/","0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600886","wti-httpd/","1.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600887","WWW Server/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600888","WWWServer/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600889","WYM/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600890","X-IVO/","1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600891","Xauth/","2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600892","Xeneo/","2.2.10","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600893","Xerox_MicroServer/","Xerox11","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600894","Xerver/","4.03","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600895","Xgate/","3.00","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600896","Xitami web server ","v2.4c0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600897","xs-httpd/","3.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600898","XunleiHttpServer/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600899","Y.G.Apache-SSLv3/","1.3.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600900","yasl/","2.25","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600901","YAWN/","1.05","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600902","Yaws/","2.49.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600903","z_VM/","4.4.0.0000","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600904","Zend-LaunchPad/","1.0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600905","Zeus/","4.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600906","Zope/","Zope/2.10.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600907","ZOT-PS-15/","6.8.0104","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600908","ZOT-PS-30/","8.2.0004","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600909","ZServer/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600910","ZyXEL-RomPager/","ZyXEL-RomPager/3.02","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600911","SAF/","4.0rc1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600912","Twisted/","2.1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600913","Plone/","3.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600914","CovalentSNMP/","2.3.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600915","Snap Appliance, Inc./","4.0.860","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600916","CJServer/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600917","Devshed/","2.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600918","mod_bla_bla_bla/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600919","G4200.GSI/","2.22.0131","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600920","KONICHIWA/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600921","CatWalk/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600922","CERNhttpd/","3.0.A(Unix)","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600923","mod_transform/","0.6.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600924","mod_auth_ianus_sso/","1.15","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600925","LANDeskManagementAgent/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600926","WebKnight/","2.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600927","AOLServer/","4.0.10","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600928","SE/","0.5.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600929","Sun-Java-System-Web-Proxy-Server/","4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600930","Jetty/\(","6.1.21","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600931","iSpit/","1.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600932","Phusion_Passenger/","2.2.15","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600933","Sun Java System Application Server ","9.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600934","tinyproxy/","1.6.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600935","ntop/","3.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600936","Mono.WebServer2/","0.2.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600937","mod_log_online/","0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600938","mod_apreq2-20050712/","2.1.3-dev","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600939","JSF/","1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600940","HTTPGW/","1.1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600941","AAISP/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600942","AppleIDiskServer-","1C105","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600943","Apusic/","4.0.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600944","cheyenne/","2.2.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600945","GlobalSCAPE-EFTServer/","6.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600946","GlobalSCAPE-SecureServer/","3.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600947","InteSoft-ASPAccelerator/","3.7.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600948","iPyramid.system2/","2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600949","MailEnable-HTTP/","5.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600950","mod_copstng/","2.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600951","mod_ddmh/","0.0.14","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600952","mod_defer/","0.1.lk","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600953","mod_dp20/","0.99.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600954","mod_gnutls/","0.5.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600955","mod_lisp2/","1.3.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600956","mod_top/","2.2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600957","mod_vhost_online/","1.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600958","ModemNV3/","1.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600959","Simple-Server/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600960","TinyHTTPProxy/","0.2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600961","WDaemon/","10.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600962","WebMail/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600963","WWW-KODEKS/","4.10","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600964","YTS/","1.18.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600965","OpenCms/","7.5.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600966","Mbedthis-AppWeb/","2.4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600967","WebProxy/","3.1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600968","MicrosoftIIS/",".6.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600969","Cherokee/","1.0.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600970","debut/","1.08","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600971","DnionOS/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600972","FAV-WebSRV/","1.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600973","gorgona/","2.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600974","HASPLM/","12.47","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600975","IntotoHttpServer//","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600976","ISS/","7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600977","LotusExpeditorWebContainer/","6.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600978","mod_fcgid/","2.3.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600979","mod_scgi_pubsub/","1.11-pubsub","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600980","mod_vhs/","1.0.30","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600981","PowerBoutique/","2.2.3/10.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600982","RemotelyAnywhere/","8.0.668","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600983","SERMEPAServer/","0.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600984","TongWeb-Director/","4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600985","uServ/","1.5.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600986","AdventAPAuthS/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600987","CPLIMS/","3.0.8.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600988","HDSHi-TrackServer/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600989","JuniperNetworksNitroCache/v","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600990","MochiWeb/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600991","SWS/","3.8.024","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600992","bit_asic/","3.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600993","ASERVER/","0.1.63","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600994","BarracudaHTTP2.0/","2.2.10","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600995","HZV/","2009","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600996","HintSoftWS/","1.0.00","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600997","Jetty/","3.1.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600998","LiveWorld/","cc_2_048","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"600999","NIServiceLocator/","1.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601000","PowerHomeWebserver/","2.1b","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601001","Seminole/","2.64","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601002","Serv-U/","10.2.0.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601003","SiemensGigaset-Server/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601004","TWebAP/","1.0.8.28","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601005","TornadoServer/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601006","W3MFC/","1.68","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601007","WebROaR-","0.3.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601008","WingFTPServer/","3.5.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601009","afts/","0.9.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601010","corehttp-","0.5.3.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601011","dhttpd/","1.02a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601012","gSOAP/","2.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601013","mod_apreq2-20051231/","2.6.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601014","mod_flog/","0.4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601015","mod_hcgi/","0.8.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601016","mod_musicindex/","1.2.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601017","mod_ort/","1.00","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601018","mod_qos_control/","7.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601019","nginx/","0.8.45","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601020","sw-cp-server/","1.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601021","Oracle-iPlanet-Web-Server/","7.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601022","CVOS/","3.9.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601023","Zeus/","4_3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601024","mod_lo/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601025","mod_ruid2/","0.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601026","mod_cluster/","1.1.x","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601027","mod_aspdotnet/","2.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601028","mod_antiloris/","0.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601029","PRTG/","8.1.0.1628","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601030","DMCRUIS/","0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601031","Easy-WebServer/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601032","EdgePrism/","4.0.10.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601033","FlashCom/","2.0.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601034","sqlmap/","1.1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601035","IOSFirewallHTTP/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601036","IPG/","7000","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601037","KWS/","2009","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601038","KWS2009/","12","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601039","junction/","1.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601040","LITBWS/","1.0.8.dev","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601041","Beacon/","3.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601042","Asterisk/","1.1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601043","BinarySEC/","3.1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601044","CentileEmbeddedHTTPSdserver/","4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601045","CM4all-JailCGI/","1.3.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601046","cPNginx.Co/","0.8.5.2","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601047","Dahlia/","1.0.7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601048","DataONTAP/","7.3.2P7","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601049","Formilux/","0.1.8","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601050","gunicorn/","0.12.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601051","HBS/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601052","HOJ-WebServer/","0.2.11","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601053","HTTPProxy/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601054","ipOS/","7.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601055","IQhttpD/","1.007oct2007","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601056","JavaPseudoHttpd/","0.4.5","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601057","LiveCache/","2.4a","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601058","LuCId-HTTPd/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601059","m4vh/","1.2.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601060","mini-http/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601061","nCore/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601062","NetworkActiv-Web-Server/","3.5.16","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601063","nginxvta/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601064","Noelios-Restlet-Engine/","1.0rc3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601065","OwilAppserv/","1.30","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601066","PHP5/","5.2.13","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601067","POSIXDLNADOC/","1.50UPnP/1.0.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601068","qjy168/","1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601069","Rocket1.0.6aPython/","2.6.4","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601070","SAPNetWeaverApplicationServer/","ABAP701","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601071","squid/","2.7.STABLE9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601072","TembriaWebServer/","1.1","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601073","TongWebApplicationServer/","4.6","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601074","TUNIX-httpscreen/","4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601075","TwistedWeb/","10.1.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601076","uhttpd/","1.0.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601077","UltiDevCassini/","2.1.4.3","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601078","WebMod/","0.48","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601079","xrl-thttpd/","2.25b08jan2011","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601080","PanWebServer/","2.4.0","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601081","mod_put/","2.0.9","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601082","mod_qos/","9.26","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
"601083","ScriptLogic.Webserver/","8.0.0.440","@RUNNING_VER appears to be outdated (current is at least @CURRENT_VER)"
nikto-2.1.4/plugins/db_realms 0000664 0000000 0000000 00000023453 11554552544 0016217 0 ustar 00root root 0000000 0000000 #VERSION,2.002
# $Id: db_realms 632 2011-02-19 02:49:31Z sullo $
#######################################################################
# Source: http://cirt.net
# This file may only be distributed and used with the full Nikto package.
# This file may not be used with any software product without written permission from CIRT, Inc.
# (c) 2007 CIRT, Inc., All Rights Reserved.
#
# NOTE: By sending any database updates to CIRT, Inc., it is assumed that you
# grant CIRT, Inc., the unlimited, non-exclusive right to reuse, modify and relicense the changes.
#######################################################################
# Notes:
# format: realm,id,password,message
# @ANY = match any realm name (generic)
# If ID and PW fields are blank, realm match is used for message only
########################################################################
"nikto_id","realm","id","password","message"
"700000","@ANY","","_Cisco","Cisco device"
"700001","@ANY","","0","Accton wireless router"
"700002","@ANY","","0000","Deutsche Telekomm T-Sinus 130 DSL"
"700003","@ANY","","00000000","Konica/Minolta Di 2010f"
"700004","@ANY","","12345","US Robotics modem"
"700005","@ANY","","admin","Generic account discovered"
"700006","@ANY","","Administrative","Avenger News System"
"700007","@ANY","","cisco","Cisco device"
"700008","@ANY","","Cisco","Cisco device"
"700009","@ANY","","connect","Fujitsu Siemens"
"700010","@ANY","","epicrouter","Conexant Router"
"700011","@ANY","","intermec","Intermec EasyLAN"
"700012","@ANY","","PASSWORD","Kyocera EcoLink"
"700013","@ANY","","password","NRG/Ricoh printer"
"700014","@ANY","","smcadmin","SMC Router"
"700015","@ANY","","Symbol","Symbol Spectrum"
"700016","@ANY","","TANDBERG","Tandberg device"
"700017","@ANY","","x6zynd56","Polycom ViewStation"
"700018","@ANY","1502","1502","X-Micro WLAN 11b router"
"700019","@ANY","admin","","Generic account discovered"
"700020","@ANY","admin","0000","Infosmart SOHO router"
"700021","@ANY","admin","1111","Xerox WorkCentre Pro"
"700022","@ANY","admin","1234","Generic account discovered"
"700023","@ANY","admin","1234","ZyXEL Prestige"
"700024","@ANY","admin","22222","Xerox DocuCentre 425"
"700025","@ANY","admin","admin","Generic account discovered."
"700026","@ANY","admin","administrator","Efficient Speedstream"
"700027","@ANY","admin","articon","Blue Coat systems"
"700028","@ANY","admin","asd","NGSec NGSecureWeb"
"700029","@ANY","admin","barney","Avaya SIP telephone"
"700030","@ANY","admin","barricade","SMC Barricade 7401BRA"
"700031","@ANY","admin","demo","OpenMarket Content Server"
"700032","@ANY","admin","epicrouter","Generic account discovered"
"700033","@ANY","admin","hagpolm1","Siemens SpeedStream 4100"
"700034","@ANY","admin","hp.com","Hewlett-Packard webmin"
"700035","@ANY","Admin","ImageFolio","BizDesign ImageFolio"
"700036","@ANY","admin","ironport","IronPrt C30"
"700037","Motive Chorus","admin","isee","Hewlett-Packard Motive Chorus"
"700038","@ANY","admin","linga","Alteon ACEswitch 180e"
"700039","@ANY","admin","motorola","Motorola wireless router"
"700040","@ANY","admin","mp3mystic","MP3Mystic"
"700041","@ANY","admin","muze","Muze Ariadne"
"700042","@ANY","admin","netadmin","Enterasys ANG-1105"
"700043","@ANY","admin","operator","iPSTAR Satellite"
"700044","@ANY","admin","password","Generic account discovered"
"700045","@ANY","admin","secure","Generic account discovered"
"700046","@ANY","admin","setup","Nortel Contivity"
"700047","@ANY","admin","smallbusiness","Pirelli AGE-SB"
"700048","@ANY","admin","smcadmin","SMC Barricade 7204BRB"
"700049","@ANY","admin","synnet","3COM CellPlex"
"700050","@ANY","admin","TANDBERG","Tandberg device"
"700051","@ANY","admin","tomcat","Apache Tomcat"
"700052","@ANY","admin@example.com","admin","MySQL Eventum"
"700053","@ANY","Administrator","","Generic account discovered"
"700054","@ANY","administrator","**#","Polycom Soundstation IP"
"700055","@ANY","Administrator","0000","Snom VoIP business phone"
"700056","@ANY","Administrator","1234","Integrated Networks IP Phone"
"700057","@ANY","administrator","1234","IntelliTouch Voip Broadband phone"
"700058","@ANY","Administrator","12345678","Integrated Networks IP Phone"
"700059","@ANY","Administrator","19750407","Luxon Communications/Integrated Networks IP Phone"
"700060","@ANY","Administrator","admin","Generic account discovered"
"700061","@ANY","administrator","administrator","Compaq WBEM"
"700062","@ANY","administrator","administrator","Generic account discovered."
"700063","@ANY","administrator","adminpass","NessusWeb"
"700064","@ANY","AdvWebadmin","advcomm500349","Hosting Controller"
"700065","@ANY","anonymous","","Sambar Server"
"700066","@ANY","apc","apc","APC UPS"
"700067","@ANY","billy-bob","","Sambar Server"
"700068","@ANY","Bobo","hello","OpenMarket Content Server"
"700069","@ANY","cac_admin","cacadmin","Openwave MSP"
"700070","@ANY","Cisco","Cisco","Cisco device"
"700071","@ANY","Coco","hello","OpenMarket Content Server"
"700072","@ANY","customer","","Aspect ACD"
"700073","@ANY","device","device","APC UPS"
"700074","@ANY","e250","e250changeme","Network Associates WebShield Security Appliance e250"
"700075","@ANY","e500","e500changeme","Network Associates WebShield Security Appliance e500"
"700076","@ANY","Flo","hello","OpenMarket Content Server"
"700077","@ANY","ftp","","Sambar Server"
"700078","@ANY","guest","","Generic account discovered"
"700079","@ANY","guest","guest","Generic account discovered."
"700080","@ANY","intel","intel","Intel wireless gateway"
"700081","@ANY","jagadmin","","Sybase EAServer"
"700082","@ANY","Jetform","","Jetform Design"
"700083","@ANY","Joe","hello","OpenMarket Content Server"
"700084","@ANY","LDAP_Anonymous","LdapPassword_1","Microsoft SiteServer"
"700085","@ANY","manager","admin","Allied Telesyn switch"
"700086","@ANY","Manager","fried","Allied Telesyn router"
"700087","@ANY","Moe","hello","OpenMarket Content Server"
"700088","@ANY","naadmin","naadmin","NetGenesis NetAnalysis Web Reporting"
"700089","@ANY","operator","","Magicolor 3100"
"700090","@ANY","operator","$schwarzepumpe","Intershop"
"700091","@ANY","piranha","piranha","Redhat 6.2"
"700092","@ANY","piranha","q","Redhat 6.2"
"700093","@ANY","Polycom","SpIp","Polycom Soundpoint VoIP phones"
"700094","@ANY","public","public","Samsung Router"
"700095","@ANY","role","changethis","Apache Tomcat"
"700096","@ANY","role1","role1","Apache Tomcat"
"700097","@ANY","Root","","3COM Netbuilder"
"700098","@ANY","root","","Generic account discovered"
"700099","@ANY","root","calvin","Dell Remote Access Card"
"700100","@ANY","root","changeme","Sun Microsystems ILOM/X4100"
"700101","@ANY","root","changethis","Apache Tomcat"
"700102","@ANY","root","changethis","Apache Tomcat"
"700103","@ANY","root","Cisco","Cisco device"
"700104","@ANY","root","nsi","NSI vmXfw"
"700105","@ANY","root","pass","Axis Webcams"
"700106","@ANY","root","password","BestPractical RT"
"700107","@ANY","root","root","Apache Tomcat"
"700108","@ANY","root","root","Generic account discovered"
"700109","@ANY","root","tslinux","Cyclades TS800"
"700110","@ANY","sadmin","","Novell NDS iMonitor"
"700111","@ANY","smc","smcadmin","SMC Barricade 7401BRA"
"700112","@ANY","storwatch","specialist","IBM TotalStorage"
"700113","@ANY","super","5777364","Netgear wireless gateway"
"700114","@ANY","superadmin","secret","IBM Web administration tool"
"700115","@ANY","superman","21241036","Netgear wireless gateway"
"700116","@ANY","superuser","admin","Efficient Speedstream"
"700117","@ANY","supervisor","PlsChgMe","Nortel Business Communications Manager"
"700118","@ANY","support","h179350","Psion Teklogix 9150"
"700119","@ANY","sys","uplink","Openwave WAP gateway"
"700120","@ANY","sysadmin","password","Ricoh Aficio"
"700121","@ANY","system","password","Mitel 3300 ICP"
"700122","@ANY","test","test","Generic account discovered."
"700123","@ANY","tomcat","changethis","Apache Tomcat"
"700124","@ANY","tomcat","tomcat","Apache Tomcat"
"700125","@ANY","user_analyst","demo","OpenMarket Content Server"
"700126","@ANY","user_approver","demo","OpenMarket Content Server"
"700127","@ANY","user_author","demo","OpenMarket Content Server"
"700128","@ANY","user_checker","demo","OpenMarket Content Server"
"700129","@ANY","user_designer","demo","OpenMarket Content Server"
"700130","@ANY","user_editor","demo","OpenMarket Content Server"
"700131","@ANY","user_expert","demo","OpenMarket Content Server"
"700132","@ANY","user_marketer","demo","OpenMarket Content Server"
"700133","@ANY","user_pricer","demo","OpenMarket Content Server"
"700134","@ANY","user_publisher","demo","OpenMarket Content Server"
"700135","@ANY","user","","D-Link router"
"700136","@ANY","User","","D-Link router"
"700137","@ANY","webadmin","1234","ZyXEL Prestige"
"700138","@ANY","webadmin","webadmin","Broadlogic XLT router"
"700139","@ANY","websecadm","changeme","Entrust getAccess"
"700140","ConfigToolPassword",,,"Realm matches a Nokia Checkpoint Firewall-1"
"700141","daap","","","DAAP (iTunes?) server with authentication."
"700142","EIC","root","ncr","Enterprise Intranet Configurator - NCR Teradata server"
"700143","Entrust GetAccess SCA","admin","admin","Entrust GetAccess Service Control Agent"
"700144","hp print server appliance","admin","admin","HP Print Server"
"700145","InterScanVirusWall","admin","admin","Trend Micro's InterScan Virus Wall"
"700146","Monitor or Admin","admin","","StorageTek's StorageNet, ID 'admin' with no password"
"700147","Monitor or Admin","monitor","","StorageTek's StorageNet, ID monitor' with no password"
"700148","Netscape Administration","admin","admin","Netscape server administration"
"700149","Netscape Mission Control","admin","admin","Netscape server administration"
"700150","Topaz Prism Site","admin","admin","Topaz Prism monitoring from Mercurity Interactive"
"700151","Topaz Site Realm","admin","admin","Mercury Interactive Topaz administrator"
"700152","UpgradeAdministrator","admin","ncr","NCR's Terradata server, Parallel Upgrade Tool (PUT)"
"700153","@ANY","manager","manager","3com switch"
nikto-2.1.4/plugins/db_server_msgs 0000664 0000000 0000000 00000077103 11554552544 0017274 0 ustar 00root root 0000000 0000000 #VERSION,2.005
# $Id: db_server_msgs 632 2011-02-19 02:49:31Z sullo $
#######################################################################
# Source: http://cirt.net
# This file may only be distributed and used with the full Nikto package.
# This file may not be used with any software product without written permission from CIRT, Inc.
# (c) 2007 CIRT, Inc., All Rights Reserved.
#
# NOTE: By sending any database updates to CIRT, Inc., it is assumed that you
# grant CIRT, Inc., the unlimited, non-exclusive right to reuse, modify and relicense the changes.
#######################################################################
# Notes:
# NiktoDB 1.0
#######################################################################
"nikto_id","server","osvdb","message"
"800000","4D_WebSTAR_S\/5\.([0-2]|3\.[0-2])","7794","May be vulnerable to multiple flaws. http://secunia.com/advisories/12063/"
"800001","4D_WebSTAR_S\/5\.([0-2]|3\.[01])","0","May be vulnerable to denial of service threw openssl implementation bug. http://secunia.com/advisories/11181/"
"800002","4D_WebSTAR_S\/5\.([0-3]|4[^.])","16154","May be vulnerable to a buffer overflow in tomcat plugin URL. http://secunia.com/advisories/15278/"
"800003","4D_WebSTAR_S\/5\.3\.1","2542","May be vulnerable to remote exploitable buffer overflow. http://secunia.com/advisories/9723/"
"800004","Abyss\/1\.0\.3","5237","May be vulnerable to directory traversal by using '%5c%2e%2e%5c' type paths."
"800005","ADSM_HTTP\/","0","May be Tivoli server administration. Default account is admin/admin."
"800006","Acme.Serve/v1.7 of 13nov96","0","Java class Acme.Serve.Serve is used as an embedded server for many devices, including APC InfraStruXure Manager. This server string is the default for the servlet. Check for port 9090, which may have a browsable c:\ drive. See: http://www.acme.com/java/software/Acme.Serve.Serve.html"
"800007","AdSubtract","0","Adsubtract.com, a Windows proxy which removes popup ads, can be configure for remote access or localhost only."
"800008","Agranat-EMWeb","0","Most likely a printer."
"800009","alibaba","10","http://alibaba.austria.eu.net/ This server has lots of problems (overflows, etc)"
"800010","Allegro-Software-RomPager","0","Most likely a printer."
"800011","allegro-software","0","Most often a printer or other embedded device"
"800012","american sitebuilder","0","http://www.american.com/product1.html"
"800013","aolserver","0","http://www.aolserver.com/ runs on Dec OSF1"
"800014","Apache Tomcat\/4\.(0\.[1-4]|1\.[0-9][^0-9]|1\.10)","8773","May be vulnerable to JSP source code exposure. CAN-2002-1148."
"800015","Apache Tomcat\/4\.0\.3","5051","Apache Tomcat 4.0.3 Win 2000 server is vulnerable to a DoS attack. Upgrade to a 4.1.3beta or higher."
"800016","apache-ssl-us","0","http://apachessl.c2.net"
"800017","Apache\/.* Ben-SSL\/1\.([0-9][^0-9]|[0-3][0-9]|4[0-6])[^0-9]","0","This version of Apache-SSl is vulnerable to a buffer overflow."
"800018","Apache\/(1\.2\.([2-9].*|1[0-9])|1\.3\.([0-1].*|2[0-4]))","838","Apache 1.x up 1.2.34 are vulnerable to a remote DoS and possible code execution. CAN-2002-0392."
"800019","Apache\/1\.0\.3","0","Probably a Xerox printer"
"800020","Apache\/1\.1\.1","0","May be able view directory contents regardless of index.html"
"800021","Apache\/1\.1\.3","9717","This version has a mod_cookies buffer overflow"
"800022","Apache\/1\.3\.(0.*|1.*|2[0-6])","4552","Apache 1.3 below 1.3.27 are vulnerable to a local buffer overflow which allows attackers to kill any process on the system. CAN-2002-0839."
"800023","Apache\/1\.3\.(0.*|1.*|2[0-8])","2733","Apache 1.3 below 1.3.29 are vulnerable to overflows in mod_rewrite and mod_cgi. CAN-2003-0542."
"800024","Apache\/1\.3\.27","9715","Windows and OS/2 version vulnerable to remote exploit. CAN-2003-0460"
"800025","Apache\/2\.0\.([0-2].*|3.*)","859","Apache 2.0 to 2.0.39 Windows may be vulnerable to arbitrary file retrieval. CAN-2002-0661."
"800026","Apache\/2\.0\.([0-2].*|3[0-8])","838","Apache 2.0 up 2.0.36 are vulnerable to a remote DoS and possible code execution. CAN-2002-0392."
"800027","Apache\/2\.0\.([0-3].*|4.[0-8])","2733","Apache 2.0 to 2.0.48: overflows in mod_alias and mod_rewrite (OSVDB-2733, OSVDB-7611), mod_cgid may send the output of CGI to the incorrect client (OSVDB-15889)."
"800028","Apache\/2\.0\.([0-3].*|4[0-6])","2672","Apache 2.0 up 2.0.46 are vulnerable to multiple remote problems. CAN-2003-0192. CAN-2003-0253. CAN-2003-0254. CERT VU#379828."
"800029","Apache\/2\.0\.([0-3].*|4[0-7])","15889","Apache 2.0 up 2.0.47 are vulnerable to multiple remote problems in mod_rewrite and mod_cgi. CAN-2003-0789. CAN-2003-0542."
"800030","Apache\/2\.0\.([0-4].*|5\.[0-1])","9994","Apache 2.0 to 2.0.51 contain multiple problems: overflow in apr-util (OSVDB-9994), config file variable overflow (OSVDB-9991), indirect lock refresh DoS (OSVDB-9948), SSL input filter DoS (OSVDB-9742), potential infinite loop (OSVDB-9523)."
"800031","Apache\/2\.0\.([0-4].*|5\.[0-2])","10218","Apache 2.0 to 2.0.52 could allow bypassing of authentication via the Satisfy directive. CAN-2004-0811. OSVDB-10218."
"800032","Apache\/2\.0\.([0-4].*|5\.[0-3])","10637","Apache 2.0 to 2.0.53 allows bypassing of an SSLCipherSuite setting. CAN-2004-0885. OSVDB-10637. Also contains a memory exhaustion DoS through MIME folded requests. CAN-2004-0942. OSVDB-11391"
"800033","Apache\/2\.0\.([0-4].*|5\.0)","6472","Apache 2.0 to 2.0.50 contain a buffer overflow in FakeBasicAuth with trusted client certificates. CAN-2004-0488. OSVDB-6472. Also a DoS with certain input data. CAN-2004-0493. OSVDB-7269."
"800034","Apache\/2\.0\.(3[7-9]|4[0-5])","0","Apache versions 2.0.37 through 2.0.45 are vulnerable to a DoS in mod_dav. CAN-2003-0245."
"800035","Apache\/2\.0\.[0-4].*","0","Apache 2.0 to 2.0.49: memory leak in plain-HTTP-on-SSL-port handling (OSVDB-4182), a DoS with short-lived connections on rarely-accessed sockets (OSVDB-4383), and may allow unescaped data into logfiles (OSVDB-4382)."
"800036","Apache\/2\.0\.4[0-5]","0","Apache versions 2.0.40 through 2.0.45 are vulnerable to a DoS in basic authentication. CAN-2003-0189."
"800037","Apache\/2\.0\.43","0","Win9x and ME servers allow arbitrary code execution, DoS and/or arbitrary file retrieval. CAN-2003-0016. CAN-2003-0017."
"800038","Apache\/2\.0\.44","0","Apache 2.0.44 is vulnerable to a DoS when linefeed characters are submitted consecutively. CAN-2003-0132."
"800039","apachejserv\/1\.(0|1\.[0-1])","0","This version of Apache JServ allows files to be retrieved and possibly executed from outside the web root. CAN-2001-0307."
"800040","aserve","0","http://www.phone.net/aws"
"800041","ATPhttpd","0","http://www.redshift.com/~yramin/atp/atphttpd/ V0.4 contains a DoS by sending a GET 3000 chars long (many times). See securityoffice.net. Also see http://bespin.org/~qitest1 for more bugs/patches."
"800042","avenida","0","http://www.avenida.co.uk/"
"800043","Avirt","0","Check www.avirt.com for updates, some versions of the proxies have buffer overflows that allow attackers to run arbitrary commands."
"800044","awhttpd","0","http://pulsar.systes.net/awhttpd/ v2.2 has a local DoS if a user has write access to the HTML directory, see http://sec.angrypacket.com for more info."
"800045","BadBlue\/([0-1].*|2\.[0-9]{1}|2\.1[0-5]{1})","0","BadBlue Web server 2.15 allow remote users to execute commands on the machine. http://www.badblue.com/"
"800046","BadBlue\/(0\..*|1\.([0-6].*|7\.0))","0","BadBlue Web server 1.7.0 and below allows directories to be listed by appending a unicode % to the end of a string. http://www.badblue.com/"
"800047","bkhttp\/0.3","0","BitKeeper may allow anyone to execute arbitrary commands on the remote system. See http://www.securiteam.com/securitynews/5TP0D0K8UQ.html."
"800048","Blazix\/1\.2\.1","0","Can view JSP source by appending a + to the end of the request."
"800049","boa","0","http://www.boa.org/"
"800050","boulevard","0","http://www.resnova.com/boulevard"
"800051","Brickserver Modifications","0","May be vulnerable to %2f type directory listing vulnerabilities if the directory contains an index.shtml but not index.html file."
"800052","capneld","0","This is a web hosting manager. It should not be running unless required, as it allows web server administration."
"800053","cern","0","http://www.w3.org/hypertext/WWW/Daemon"
"800054","ChaiServer","0","HP printer."
"800055","Cherokee\/0\.2\.7","0","This version of Cherokee allows arbitrary files to be retreived remotely. See http://www.securitytracker.com/alerts/2001/Dec/1003074.html"
"800056","cisco ios","0","Cisco Catalyst Switch"
"800057","cisco-CPA","0","Most likely a router/switch web management port"
"800058","cl-http","0","http://www.ai.mit.edu/projects/iiip/doc/cl-http/home-page.html"
"800059","Cobalt","0","Cobalt RaQ system"
"800060","commerce-builder","0","http://www.ifact.com/"
"800061","CompaqHTTPServer","0","Has had a few remote DoS issues. Can also give a lot of system information, especially if anonymous access enabled."
"800062","cosmos","0","http://www.ris.fr/"
"800063","DeleGate\/","0","www.globalintersec.com has found multiple vulnerabilities in the DeleGate proxies and recommends using Squid or another proxy device as the author(s) have not fixed previous versions."
"800064","DeleGate\/7\.7\.[0-1]","0","DeleGate 7.7.1 & 7.7.0 are vulnerable to CSS."
"800065","dwhttpd","0","Probably Sun Microsystem's AnswerBook server. v3.1a4, 4.0.2a7a and 4.1a6 have problems."
"800066","dwhttpd\/4\.(0\.2a7a|1a6)","0","May allow unauthorized users to add administrators or view logs remotely."
"800067","Embedded HTTP Server","0","Likely this is a D-Link SoHo router."
"800068","emwac","0","http://emwac.ed.ac.uk/"
"800069","enterpriseweb","0","http://www.beyond-software.com/products/eweb/eweb.html"
"800070","Eserv\/2\.97","0","Server allows pass protected directories to be retrieved by prepending '/./' to it, ie http://server/./protected/, or directory listings by appending ?"
"800071","Essentia\/2\.1","0","Essentia 2.1 is vulnerable to directory traversal problems with /../ type requests, along with a DoS on long (2000 chars) requests."
"800072","Ews/","0","Probably a printer."
"800073","falcon","0","May allow ../../ file system browsing"
"800074","fnord","0","Win 32 platform"
"800075","Folkweb","0","Win 32 platform"
"800076","frontier","0","http://www.frontiertech.com/products/superweb.htm"
"800077","frontpage","0","http://www.insecure.org/sploits/Microsoft.frontpage.insecurities.html"
"800078","^ghttpd\/1\.[0-4]","0","The Ghttpd server may contain a remote buffer overflow. Upgrade to the latest version."
"800079","glaci","0","Netware web server"
"800080","GoAhead-Webs","0","This may be a Cyclade, http://www.cyclades.com/"
"800081","GoAhead-Webs\/2\.(0.*|1)","0","GoAhead-Webs 2.1 and below is vulnerable to command execution through a buffer overflow. See http://www.securiteam.com for details."
"800082","Gordian Embedded","0","Lantronix device, may give system/networking information freely. Could be an access badge reader/card swipe."
"800083","goserve","0","http://www2.hursley.ibm.com/goserve"
"800084","gosite","0","http://www.gosite.com/"
"800085","GWS\/","0","Could be the Google Web Server. 2.0 seems to be current."
"800086","hellbent java webserver v0.1","0","This version of the server is vulnerable to a path disclosure bug and can allow attackers to view .prefs files under certain circumstances. Upgrade to 0.11 or higher. See http://www.securityfocus.com/archive/82/73778"
"800087","homedoor","0","http://www.opendoor.com/"
"800088","HP-Web-Server","0","HP Printer"
"800089","hyperwave","0","http://www.hyperwave.com/"
"800090","i\/net","0","http://www.inetmi.com/"
"800091","ibm internet connection server","0","http://www.ics.raleigh.ibm.com"
"800092","IBM-HTTP-Server\/1\.0","0","This IBM web server allows file source to be viewed by adding a '/' to the URI, like http://server/index.jsp/"
"800093","icecast/1\.3\.(7|8.*beta[0-2])","0","This version of Icecast may allow an attacker to execute commands on the server with a format string attack."
"800094","iis\/4","0","May be able to bypass security settings using 8.3 file names. ESB-98.015."
"800095","Intrusion\/","0","The server may be running Tripwire for web pages. This can allow attackers to gain sensitive information about the web setup."
"800096","Ipswitch-IMail\/7\.11","0","May be vulnerable to a remote command execution overflow, see http://online.securityfocus.com/archive/1/284465"
"800097","Jaguar Server","0","Probably a Sybase web interface"
"800098","jakarta-tomcat-4.0.1","0","Server will reveal path"
"800099","JavaWebServer","0","Probably Sun Microsystem's servlet interface. May have defualt code which is exploitable. Try admin/admin for id/password."
"800100","JetAdmin","0","HP Printer"
"800101","Jeus WebContainer\/([0-3]\.[0-2]\..*)","0","JEUS below 3.2.2 is vulnerable to XSS if a nonexistent url is requested, i.e. [victim site]/[javascript].jsp"
"800102","Jigsaw\/([0-1].*|2\.([0-1].*|2\.0))","0","Jigsaw 2.1.0 or below may be vulnerable to XSS if a nonexistent host name is requested, i.e. nosuchhost.domain.com/","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","\[SQL SERVER\] Error Code","","","","","ColdFusion may reveal SQL information in malformed requests.","",""
"000717","0","4","/upload.php?type=\"","GET","","GET",";","GET","","GET","","GET","666.jsp","GET","","GET","","GET","","GET","","GET","","GET","","GET",".shtm","GET",".stm","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET",";","GET","","GET","","GET","","GET","","GET","","GET","&file=1&keywords=vulnerable","GET","","GET","","GET","","GET",";","GET","&Where=&Sort=Photo&Dir=","GET","","GET",".aspx?aspxerrorpath=null","GET",".aspx","GET",".asp","GET","&rollid=admin&x=3da59a9da8825&","GET","&email1=","GET","alert\(\"Vulnerable\"\)<\/script>","","","","","PHP Web Chat 2.0 is vulnerable to Cross Site Scripting (XSS). CA-2000-02.","",""
"000773","0","4","/webamil/test.php","GET","IMP: 3\.\(0\|1\|2\|2\\\.1\)","","","","","IMP version 3.0, 3.1, 3.2, or 3.2.1 are vulnerabl to Cross Site Scripting (XSS). See http://marc.theaimsgroup.com/?l=imp&m=105940167329471&w=2.","",""
"000774","59444","4","/users.php?mode=profile&uid=<script>alert(document.cookie)</script>","GET","","GET","","GET","","GET","</script>","GET","</script>","GET","</script>","GET","","GET","&story=&storyext=&op=Preview","GET","","GET","&page=list_users&user=P","GET","","POST","","POST","","GET","","GET","","GET","","GET","","GET","","GET","","GET","alert\('Vulnerable'\)<\/script>","","","","","ASP.Net 1.1 may allow Cross Site Scripting (XSS) in error pages (only some browsers will render this). CA-2000-02.","",""
"000800","0","4","/script>alert('Vulnerable').cfm","GET","","GET","","GET","","GET","","GET","%3Ca%20s=%22&code=1","GET","","GET","&MMN_position=[X:X]","GET","","GET","","GET","&email1=","GET","alert\(\"Vulnerable\"\)<\/script>","","","","","PHP Web Chat 2.0 is vulnerable to Cross Site Scripting (XSS). CA-2000-02.","",""
"000814","59093","4","/phptonuke.php?filnavn=","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","200","","","","","OpenAutoClassifieds 1.0 is vulnerable to a XSS attack","",""
"000828","2767","4","/openautoclassifieds/friendmail.php?listing=<script>alert(document.domain);</script>","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","&fid=2","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","&month=3&month_l=test","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","<","GET","","GET","&PhraseSearchText=&SearchContentClassID=-1&SearchSectionID=-1&SearchDate=-1&SearchButton=Search","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET",";","GET","","GET","&comment=&pid=0&sid=0&mode=&order=&thold=op=Preview","GET","","GET","&email1=","GET","alert\(\"Vulnerable\"\)<\/script>","","","","","PHP Web Chat 2.0 is vulnerable to Cross Site Scripting (XSS). CA-2000-02.","",""
"000905","651","4","/cgi-local/cgiemail-1.6/cgicso?query=","GET","","GET","&month=03&day=05","GET","","GET","&PATH=acatalog%2f","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","&op=browse","GET",".thtml","GET",".shtml","GET",".jsp","GET",".aspx","GET",".jsp","GET","","GET",";","GET","&addressemail=junk@example.com","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET"," ","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET",">","GET","","GET","","GET","","GET",">&tzone=dmz","GET","","GET","&startline=0","GET","&startline=0(naturally)","GET",",/system/status/session","GET",",/system/status/moniter,/system/status/session","GET","&button_url=/system/status/status,/system/status/moniter,/system/status/session","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","","GET","\tNikto Databases");
}
elsif ($prefix eq "u") {
nprint("\n-->\tUser Databases");
}
for my $file (@dbs) {
my $filename = $CONFIGFILE{PLUGINDIR} . "/" . $prefix . $file;
if (!-r $filename) {
nprint("+ ERROR: Unable to read \"$filename\"");
next;
}
open(IN, "<$filename") || die nprint("+ ERROR: Can't open \"$filename\":$!\n");
nprint("Syntax Check: $filename");
if ($file eq 'db_outdated') {
foreach $line () {
$line =~ s/^\s+//;
if ($line =~ /^\#/) { next; }
chomp($line);
if ($line eq "") { next; }
my @L = parse_csv($line);
if ($#L ne 3) { nprint("\t+ ERROR: Invalid syntax ($#L): $line"); next; }
$ENTRIES{"$L[0]"}++;
}
foreach $entry (keys %ENTRIES) {
if ($ENTRIES{$entry} > 1) {
nprint("\t+ ERROR: Duplicate ($ENTRIES{$entry}): $entry");
}
}
nprint("\t" . keys(%ENTRIES) . " entries");
}
elsif ($file eq 'db_tests') {
my %ENTRIES;
foreach my $line () {
if ($line !~ /^\"/) { next; }
my @L = parse_csv($line);
if ( ($L[4] !~ /(GET|POST|TRACE|TRACK|OPTIONS|SEARCH|INDEX)/i)
&& ($L[0] ne '006433')) {
nprint("\t+ ERROR: Possibly invalid method: $L[4] on ($line)");
}
if ($L[5] eq "") { nprint("\t+ ERROR: blank conditional: $line"); next; }
if ($line !~ /^\".*\",\".*\",\".*\",\".*\",\".*\"/) {
nprint("\t+ ERROR: Invalid syntax ($#L): $line");
next;
}
if ($line !~ /^(\".*\",){11}\".*\"/) {
nprint("\t+ ERROR: Invalid syntax ($#L): $line");
next;
}
if (($L[3] =~ /^\@CG/) && ($L[3] !~ /^\@CGIDIRS/)) {
nprint("\t+ ERROR: Possible \@CGIDIRS misspelling: $line");
}
if ($L[1] =~ /[^0-9]/) { nprint("\t+ ERROR: Invalid OSVDB ID: $line"); }
$ENTRIES{"$L[3],$L[4],$L[5],$L[6],$L[7],$L[8],$L[9],$L[11],$L[12]"}++;
if ((count_fields($line, 1) ne 12) && (count_fields($line) ne '')) {
nprint("\t+ ERROR: Invalid syntax: $line");
}
for (my $i = 5 ; $i <= 9 ; $i++) {
my ($result, $bad) = validate_and_fix_regex($L[$i], 1);
if ($bad) { nprint("\t+ ERROR: Invalid regex in field $i: \"$L[$i]\""); }
}
}
foreach $entry (keys %ENTRIES) {
if ($ENTRIES{$entry} > 1) {
nprint("\t+ ERROR: Duplicate ($ENTRIES{$entry}): $entry");
}
}
nprint("\t" . keys(%ENTRIES) . " entries");
}
elsif ($file eq 'db_variables') {
my $ctr = 0;
foreach $line () {
if ($line !~ /^\@/) { next; }
if ($line !~ /^\@.+\=.+$/i) { nprint("\t+ ERROR: Invalid syntax: $line"); }
$ctr++;
}
nprint("\t$ctr entries");
}
elsif ($file eq 'db_404_strings') {
my $ctr = 1;
foreach $line () {
chomp($line);
$line =~ s/\#.*$//;
next if $line eq '';
my ($result, $bad) = validate_and_fix_regex($line, 1);
if ($bad) { nprint("\t+ ERROR: Invalid regex on line $ctr: \"$line\""); }
$ctr++;
}
$ctr--;
nprint("\t$ctr entries");
}
elsif ($file eq 'db_headers') {
my $ctr = 0;
foreach $line () {
if ((count_fields($line) ne 0) && (count_fields($line) ne '')) {
nprint("\t+ ERROR: Invalid syntax: $line");
}
$ctr++;
}
nprint("\t$ctr entries");
}
elsif ($file eq 'db_multiple_index') {
my $ctr = 0;
foreach $line () {
if ((count_fields($line) ne 0) && (count_fields($line) ne '')) {
nprint("\t+ ERROR: Invalid syntax: $line");
}
$ctr++;
}
nprint("\t$ctr entries");
}
else {
# It's a file of standard DB type, we can do this intelligently
my (@headers, @regex_fields);
my $ctr = 0, $fields = 0;
foreach $line () {
# first, grab the headers
if ($fields == 0) {
$line =~ s/\#.*//;
next if ($line eq "");
@headers = parse_csv($line);
$fields = $#headers;
# check regex fields for syntax
for (my $i = 0 ; $i <= $#headers ; $i++) {
if ( ($headers[$i] eq 'match')
|| ($headers[$i] eq 'matchstring')
|| ($headers[$i] eq 'server')) {
push(@regex_fields, $i);
}
}
next;
}
if ($regex_fields[0] ne '') {
my @entry = parse_csv($line);
foreach my $f (@regex_fields) {
my ($result, $bad) = validate_and_fix_regex($entry[$f], 1);
if ($bad) {
nprint("\t+ ERROR: Invalid regex in field $f on line $ctr: \"$line\"");
}
}
}
if ( (count_fields($line, 1) != $fields - 1)
&& (count_fields($line) ne '')) {
nprint("\t+ ERROR: Invalid syntax: $line");
}
$ctr++;
}
nprint("\t$ctr entries");
}
close(IN);
}
if ($_[0] eq "") { check_dbs('u'); } # do this once
nprint("\n");
exit;
}
###############################################################################
sub count_fields {
my $line = $_[0] || return;
my $checkid = $_[1] || 0;
if ($line !~ /^\"/) { return; }
chomp($line);
$line =~ s/\s+$//;
if ($line eq '') { return; }
my @L = parse_csv($line);
if ($checkid && ($L[0] ne 'nikto_id') && (($L[0] =~ /[^0-9]/) || ($L[0] eq ''))) { return -1; }
return $#L;
}
###############################################################################
sub port_check {
my ($hostname, $ip, $port) = @_;
my (%headers);
my $m = {};
# Check SKIPPORTS
if ($CONFIGFILE{'SKIPPORTS'} =~ /\b$port\b/) {
nprint("+ ERROR: SKIPPORTS (nikto.conf) contains $port -- not checking");
return 0;
}
$m->{hostname} = $hostname;
$m->{ip} = $ip;
$m->{port} = $port;
$m->{ssl} = 0;
my @checktypes = ('HTTP', 'HTTPS');
if ($CLI{'ssl'}) { shift(@checktypes); }
if ($CLI{'nossl'}) { pop(@checktypes); }
foreach my $method (split(/ /, $CONFIGFILE{'CHECKMETHODS'})) {
$request{'whisker'}->{'method'} = $method;
foreach my $checkssl (@checktypes) {
nprint("- Checking for $checkssl on port "
. ($hostname || $ip)
. ":$port, using $method",
"v",
$m
);
$m->{ssl} = ($checkssl eq "HTTP") ? 0 : 1;
proxy_check($m);
my ($res, $content) =
nfetch($m, "/", $method, "", \%headers,
{ noerror => 1, noprefetch => 1, nopostfetch => 1 },
"Port Check");
if ($res) {
# this will fix for some Apaches that are smart enough to answer non ssl reqs on an ssl server
if (defined $content
&& $content =~ /speaking plain HTTP to an SSL/) {
dump_var("Result Hash", \%result);
next;
}
nprint("- $checkssl Server found: "
. ($hostname || $ip)
. ":$port \t$headers{server}",
"d",
$m
);
return $m->{ssl} + 1;
}
}
}
nprint("+ No web server found on " . ($hostname || $ip) . ":$port");
nprint("---------------------------------------------------------------------------");
return 0;
}
###############################################################################
sub load_plugins {
my @pluginlist = dirlist("$CONFIGFILE{PLUGINDIR}", '\.plugin$');
my @all_names;
# populate plugin macros
$CONFIGFILE{'@@NONE'} = "";
# Check if running plugins is NONE - if so, don't bother initalising
# plugins
if ($CLI{'plugins'} eq '@@NONE') {
return;
}
foreach my $plugin (@pluginlist) {
my $plugin_name = $plugin;
$plugin_name =~ s/\.plugin$//;
my $plugin_init = $plugin_name . "_init";
eval { require "$CONFIGFILE{PLUGINDIR}/$plugin"; };
if ($@) {
nprint("- Could not load or parse plugin: $plugin_name\n Error: ");
warn $@;
nprint("- The plugin could not be run.");
}
else {
nprint("- Initialising plugin $plugin_name", "v");
# Call initialisation method
if (defined &$plugin_init) {
my $pluginhash = &$plugin_init;
# Add default weights if not already assigned
while (my ($hook, $hook_params) = each(%{ $pluginhash->{'hooks'} })) {
$hook_params->{$hook}->{'weight'} = 50
unless (defined $hook_params->{$hook}->{'weight'});
}
$pluginhash->{report_weight} = 50 unless (defined $pluginhash->{report_weight});
push(@all_names, $pluginhash->{name});
push(@PLUGINS, $pluginhash);
nprint("- Loaded \"$pluginhash->{full_name}\" plugin.", "v");
}
}
}
$CONFIGFILE{'@@ALL'} = join(';', @all_names);
my @torun = split(/;/, expand_pluginlist($CLI{'plugins'}, 0));
# Second pass to ensure that @@ALL is configured
foreach my $plugin (@PLUGINS) {
# Check that the plugin is to be run
# Perl doesn't allow us to use "in", pity
foreach my $torun_plugin (@torun) {
next if ($torun_plugin eq "");
# split up into parameters
my $name = my $suffix = $torun_plugin;
if ($torun_plugin =~ /\(/) {
$name =~ s/(.*)(\(.*\))/$1/;
$suffix =~ s/(.*)(\(.*\))/$2/;
}
else {
$name = $torun_plugin;
$suffix = "";
}
if ($plugin->{'name'} =~ /$name/i) {
$plugin->{'run'} = 1;
# Create parameters
if ($suffix ne "") {
my $parameters = {};
$suffix =~ s/(\()(.*[^\)])(\)?)/$2/;
foreach my $parameter (split(/,/, $suffix)) {
if ($parameter !~ /:/) {
$parameters->{$parameter} = 1;
}
else {
my $key = my $value = $parameter;
$key =~ s/:.*//;
$value =~ s/.*://;
$parameters->{$key} = $value;
}
}
$plugin->{'parameters'} = $parameters;
}
}
}
}
# For speed in future, create a hash of active plugins ordered by plugin weight, for
# each type of plugin
# first build a temporary hash of all known hooks
my %hooks;
foreach my $plugin (@PLUGINS) {
foreach my $hook (keys(%{ $plugin->{'hooks'} })) {
$hooks{$hook} = ();
}
}
# now we know the types of hooks, look through each plugin for them
foreach my $hook (keys(%hooks)) {
foreach my $plugin (@PLUGINS) {
if ($plugin->{'run'} == 1) {
if (defined $plugin->{'hooks'}->{$hook}->{'method'}) {
push(@{ $hooks{$hook} }, $plugin);
}
}
}
}
# Now sort each array by weight
foreach my $hook (keys(%hooks)) {
my @sorted =
sort { $a->{'hooks'}->{$hook}->{'weight'} <=> $b->{'hooks'}->{$hook}->{'weight'} }
@{ $hooks{$hook} };
$PLUGINORDER{$hook} = \@sorted;
}
}
###############################################################################
sub run_hooks {
my ($mark, $type, $request, $result) = @_;
return if $mark->{'terminate'};
foreach my $plugin (@{ $PLUGINORDER{$type} }) {
return if $mark->{'terminate'};
my ($run) = 1;
# first check for conditionals
my $condition = $plugin->{'hooks'}->{$type}->{'cond'};
if (defined $plugin->{'hooks'}->{$type}->{'cond'}) {
# Evaluate condition
$run = eval($condition);
}
if (!$run) { next; }
my $oldverbose = $OUTPUT{'verbose'};
my $olddebug = $OUTPUT{'debug'};
my $olderrors = $OUTPUT{'errors'};
nprint("- Running $type for \"$plugin->{'full_name'}\" plugin", "v")
unless ($type eq "prefetch" || $type eq "postfetch");
if (defined $plugin->{'parameters'}->{'verbose'}
&& $plugin->{'parameters'}->{'verbose'} == 1) {
$OUTPUT{'verbose'} = 1;
}
if (defined $plugin->{'parameters'}->{'debug'}
&& $plugin->{'parameters'}->{'debug'} == 1) {
$OUTPUT{'debug'} = 1;
}
unless ($type eq "prefetch" || $type eq "postfetch") {
$NIKTO{'current_plugin'} = $plugin->{'full_name'};
}
&{ $plugin->{'hooks'}->{$type}->{'method'} }($mark, $plugin->{'parameters'}, $request,
$result);
$OUTPUT{'verbose'} = $oldverbose;
$OUTPUT{'debug'} = $olddebug;
$OUTPUT{'errors'} = $olderrors;
}
return $request, $result;
}
###############################################################################
sub report_head {
my ($format, $file) = @_;
nprint("- Opening reports ($format, $file)", "v");
# For tuning set up a list of report methods, formats and handles
# This is a frig until I can think of a better way of achieving it
foreach my $i (1 .. 100) {
foreach my $plugin (@PLUGINS) {
if ($plugin->{run} && defined $plugin->{report_item} && $plugin->{report_weight} == $i)
{
my $run = 1;
# first check for conditionals
if (defined $plugin->{report_format}) {
# Evaluate condition
$run = ($format eq $plugin->{report_format});
}
if ($run) {
nprint("- Opening report for \"$plugin->{full_name}\" plugin", "v");
my $handle;
if (defined $plugin->{report_head}) {
$handle = &{ $plugin->{report_head} }($file);
}
# Now store this
my $report_entry = { host_start => $plugin->{report_host_start},
host_end => $plugin->{report_host_end},
item => $plugin->{report_item},
close => $plugin->{report_close},
summary => $plugin->{report_summary},
handle => $handle,
};
push(@REPORTS, $report_entry);
}
}
}
}
return;
}
###############################################################################
sub report_host_start {
my ($mark) = @_;
# Go through all reporting modules
foreach my $reporter (@REPORTS) {
if (defined $reporter->{host_start}) {
&{ $reporter->{host_start} }($reporter->{handle}, $mark);
}
}
}
###############################################################################
sub report_host_end {
my ($mark) = @_;
# Go through all reporting modules
foreach my $reporter (@REPORTS) {
if (defined $reporter->{host_end}) {
&{ $reporter->{host_end} }($reporter->{handle}, $mark);
}
}
}
###############################################################################
sub report_summary {
my ($mark) = @_;
# Go through all reporting modules
foreach my $reporter (@REPORTS) {
if (defined $reporter->{summary}) {
&{ $reporter->{summary} }($reporter->{handle}, $mark);
}
}
}
###############################################################################
sub report_item {
my ($mark, $item) = @_;
# Go through all reporting modules
foreach my $reporter (@REPORTS) {
if (defined $reporter->{item}) {
&{ $reporter->{item} }($reporter->{handle}, $mark, $item);
}
}
}
###############################################################################
sub report_close {
# Go through all reporting modules
foreach my $reporter (@REPORTS) {
if (defined $reporter->{close}) {
&{ $reporter->{close} }($reporter->{handle});
}
}
}
###############################################################################
sub check_updates {
LW2::http_init_request(\%request);
my (%REMOTE, %LOCAL, @DBTOGET) = ();
my ($pluginmsg, $remotemsg) = "";
my $code_updates = 0;
my $serverdir = "/nikto/UPDATES/$VARIABLES{'version'}";
my $server = "CIRT.net";
# set up our mark
my %mark = ('ident' => 'www.cirt.net',
'ssl' => 0,
'port' => 80
);
for (my $i = 0 ; $i <= $#ARGV ; $i++) {
if (($ARGV[$i] eq "-u") || ($ARGV[$i] eq "-useproxy")) {
$CLI{'useproxy'} = 1;
if (($CONFIGFILE{PROXYPORT} ne '') && ($CONFIGFILE{PROXYHOST} ne '')) {
$request{'whisker'}->{'proxy_host'} = $CONFIGFILE{PROXYHOST};
$request{'whisker'}->{'proxy_port'} = $CONFIGFILE{PROXYPORT};
}
proxy_check();
last;
}
}
($mark{'hostname'}, $mark{'ip'}, $mark{'display_name'}) = resolve('www.cirt.net');
# retrieve versions file
my ($RES, $CONTENT) = nfetch(\%mark, "$serverdir/versions.txt", "GET");
if ($RES eq 407) {
if ($CONFIGFILE{'PROXYUSER'} eq "") {
$CONFIGFILE{'PROXYUSER'} = read_data("Proxy ID: ", "");
$CONFIGFILE{'PROXYPASS'} = read_data("Proxy Pass: ", "noecho");
}
# and try again
($RES, $CONTENT) = nfetch(\%mark, "$serverdir/versions.txt", "GET");
}
if ($RES eq "") {
($RES, $CONTENT) = nfetch(\%mark, "$serverdir/versions.txt", "GET");
}
if ($RES ne 200) {
nprint("+ ERROR ($RES): Unable to get $mark{'hostname'}$serverdir/versions.txt");
exit;
}
# make hash
for (split(/\n/, $CONTENT)) {
my @l = parse_csv($_);
if ($_ =~ /^msg/) {
$remotemsg = "$l[1]";
next;
}
$REMOTE{ $l[0] } = $l[1];
}
# get local versions of plugins/dbs
my @NIKTOFILES = dirlist($CONFIGFILE{PLUGINDIR}, "");
foreach my $file (@NIKTOFILES) {
my $v = "";
open(LOCAL, "<$CONFIGFILE{PLUGINDIR}/$file")
|| print STDERR "+ ERROR: Unable to open '$CONFIGFILE{PLUGINDIR}/$file' for read: $@\n";
my @l = ;
close(LOCAL);
my @VERS = grep(/^#VERSION/, @l);
chomp($VERS[0]);
$LOCAL{$file} = (parse_csv($VERS[0]))[1];
}
# check main nikto versions
foreach my $remotefile (keys %REMOTE) {
my @l = split(/\./, $LOCAL{$remotefile});
my @r = split(/\./, $REMOTE{$remotefile});
my $update = 0;
if ($LOCAL{$remotefile} eq '') { $update = 1; }
elsif ($r[0] > $l[0]) { $update = 1; }
elsif ($r[1] > $l[1]) { $update = 1; }
elsif ($r[2] > $l[2]) { $update = 1; }
if ($update) {
if ($remotefile eq "nikto") {
nprint
"+ Nikto has been updated to $REMOTE{$remotefile}, local copy is $VARIABLES{'version'}\n";
nprint
"+ No update has taken place. Please upgrade Nikto by visiting http://$server/\n";
if ($remotemsg ne "") { nprint("+ $server message: $remotemsg"); }
exit;
}
push(@DBTOGET, $remotefile);
if ($remotefile !~ /^db_/) { $code_updates = 1; }
}
}
# replace local files if updated
foreach my $toget (@DBTOGET) {
nprint("+ Retrieving '$toget'");
my ($RES, $CONTENT) = nfetch(\%mark, "$serverdir/$toget", "GET");
if ($RES ne 200) {
nprint("+ ERROR: Unable to get $server$serverdir/$toget");
exit;
}
if ($CONTENT ne "") {
open(OUT, ">$CONFIGFILE{PLUGINDIR}/$toget")
|| die print STDERR
"+ ERROR: Unable to open '$CONFIGFILE{PLUGINDIR}/$toget' for write: $@\n";
print OUT $CONTENT;
close(OUT);
}
}
# CHANGES file
if ($code_updates) {
nprint("+ Retrieving 'CHANGES.txt'");
my ($RES, $CONTENT) = nfetch(\%mark, "$serverdir/CHANGES.txt", "GET");
if (($CONTENT ne "") && ($RES eq 200)) {
open(OUT, ">$CONFIGFILE{DOCUMENTDIR}/CHANGES.txt")
|| die print STDERR
"+ ERROR: Unable to open '$CONFIGFILE{DOCUMENTDIR}/CHANGES.txt' for write: $@\n";
print OUT $CONTENT;
close(OUT);
}
}
if ($#DBTOGET < 0) { nprint("+ No updates required."); }
if ($remotemsg ne "") { nprint("+ $server message: $remotemsg"); }
exit;
}
###############################################################################
# portions of this sub were taken from the Term::ReadPassword module.
# It has been modified to not require Term::ReadLine, but still requires
# POSIX::Termios if it's a POSIX machine
###############################################################################
sub read_data {
if ($CONFIGFILE{PROMPTS} eq 'no') { return; }
my ($prompt, $mode, $POSIX) = @_;
my $input;
my %SPECIAL = ("\x03" => 'INT', # Control-C, Interrupt
"\x08" => 'DEL', # Backspace
"\x7f" => 'DEL', # Delete
"\x0d" => 'ENT', # CR, Enter
"\x0a" => 'ENT', # LF, Enter
);
if ($NIKTO{'POSIX'}{'support'}) {
local (*TTY, *TTYOUT);
open TTY, "<&STDIN" or return;
open TTYOUT, ">>&STDOUT" or return;
# Don't buffer it!
select((select(TTYOUT), $| = 1)[0]);
print TTYOUT $prompt;
# Remember where everything was
my $fd_tty = fileno(TTY);
my $term = POSIX::Termios->new();
$term->getattr($fd_tty);
my $original_flags = $term->getlflag();
if ($mode eq "noecho") {
my $new_flags = $original_flags & ~(ISIG | ECHO | ICANON);
$term->setlflag($new_flags);
}
$term->setattr($fd_tty, TCSAFLUSH);
KEYSTROKE:
while (1) {
my $new_keys = '';
my $count = sysread(TTY, $new_keys, 99);
if ($count) {
for my $new_key (split //, $new_keys) {
if (my $meaning = $SPECIAL{$new_key}) {
if ($meaning eq 'ENT') { last KEYSTROKE; }
elsif ($meaning eq 'DEL') { chop $input; }
elsif ($meaning eq 'INT') { last KEYSTROKE; }
else { $input .= $new_key; }
}
else { $input .= $new_key; }
}
}
else { last KEYSTROKE; }
}
# Done with waiting for input. Let's not leave the cursor sitting
# there, after the prompt.
print TTY "\n";
nprint("\n");
# Let's put everything back where we found it.
$term->setlflag($original_flags);
$term->setattr($fd_tty, TCSAFLUSH);
close(TTY);
close(TTYOUT);
}
else # non-POSIX
{
print $prompt;
$input = ;
chomp($input);
}
return $input;
}
###############################################################################
sub proxy_check {
my ($mark) = @_;
if (($request{'whisker'}->{'proxy_host'} ne '') && ($CLI{'useproxy'})) # proxy is set up
{
LW2::http_close(\%request); # force-close any old connections
setup_hash(\%request, $mark, "Proxy Check");
$request{'whisker'}->{'method'} = "GET";
$request{'whisker'}->{'uri'} = "/";
LW2::http_fixup_request(\%request);
sleeper();
LW2::http_do_request_timeout(\%request, \%result);
$COUNTERS{'totalrequests'}++;
dump_var("Request Hash", \%request);
dump_var("Result Hash", \%result);
# First check that we can connect to the proxy
if (exists $result{'whisker'}{'error'}) {
if ($result{'whisker'}{'error'} =~ /Transport endpoint is not connected/) {
nprint("+ ERROR: Could not connect to the defined proxy $CONFIGFILE{PROXYHOST}");
}
nprint("+ ERROR: Proxy error: $result{'whisker'}{'error'}");
exit 1;
}
if ($result{'whisker'}{'code'} eq "407") # proxy requires auth
{
# have id/pw?
if ($CONFIGFILE{PROXYUSER} eq "") {
$CONFIGFILE{PROXYUSER} = read_data("Proxy ID: ", "");
$CONFIGFILE{PROXYPASS} = read_data("Proxy Pass: ", "noecho");
}
if ($result{'proxy-authenticate'} !~ /Basic/i) {
my @x = split(/ /, $result{'proxy-authenticate'});
nprint(
"+ Proxy server uses '$x[0]' rather than 'Basic' authentication. $VARIABLES{'name'} $VARIABLES{'version'} can't do that."
);
exit;
}
# test it...
LW2::http_close(\%request); # force-close any old connections
LW2::auth_set("proxy-basic", \%request, $CONFIGFILE{PROXYUSER}, $CONFIGFILE{PROXYPASS})
; # set auth
LW2::http_fixup_request(\%request);
sleeper();
LW2::http_do_request_timeout(\%request, \%result);
$COUNTERS{'totalrequests'}++;
dump_var("Request Hash", \%request);
dump_var("Result Hash", \%result);
if ($result{'proxy-authenticate'} ne "") {
my @pauthinfo = split(/ /, $result{'proxy-authenticate'});
my @pauthinfo2 = split(/=/, $result{'proxy-authenticate'});
$pauthinfo2[1] =~ s/^\"//;
$pauthinfo2[1] =~ s/\"$//;
nprint(
"+ Proxy requires authentication for '$pauthinfo[0]' realm '$pauthinfo2[1]', unable to authenticate."
);
exit;
}
else { nprint("- Successfully authenticated to proxy.", "v"); }
}
}
return;
}
###############################################################################
sub dirlist {
my $DIR = $_[0] || return;
my $PATTERN = $_[1] || "";
my @FILES_TMP = ();
opendir(DIRECTORY, $DIR) || die print STDERR "+ ERROR: Can't open directory '$DIR': $@";
foreach my $file (readdir(DIRECTORY)) {
if ($file =~ /^\./) { next; } # skip hidden files, '.' and '..'
if ($PATTERN ne "") {
if ($file =~ /$PATTERN/) { push(@FILES_TMP, $file); }
}
else { push(@FILES_TMP, $file); }
}
closedir(DIRECTORY);
return @FILES_TMP;
}
#######################################################################
sub dump_var {
return if !$OUTPUT{'debug'};
my $msg = $_[0];
my %hash_in = %{ $_[1] };
my $display = LW2::dump('', \%hash_in);
$display =~ s/^\$/'$msg'/;
if ($OUTPUT{'scrub'}) {
$display =~ s/'host' => '.*',/'host' => 'example.com',/g;
$display =~ s/'Host' => '.*'/'host' => 'example.com'/g;
}
nprint($display, "d");
return;
}
######################################################################
sub content_present {
my $result = FALSE;
my $res = $_[0];
# perform an extra check just in case the web server lies about finds
# basically assume that the value for a non-extension is the true
# code for "File not Found".
if ($res ne $FoF{'NONE'}{'response'}) {
foreach $found (split(' ', $VARIABLES{"\@HTTPFOUND"})) {
if ($res eq $found) {
$result = TRUE;
}
}
}
return $result;
}
#######################################################################
sub setup_hash {
my ($reqhash, $mark, $testid) = @_;
# Do the standard set up for the hash
LW2::http_init_request($reqhash);
$reqhash->{'whisker'}->{'ssl_save_info'} = 1;
$reqhash->{'whisker'}->{'keep-alive'} = 1;
$reqhash->{'whisker'}->{'lowercase_incoming_headers'} = 1;
$reqhash->{'whisker'}->{'timeout'} = $CLI{'timeout'};
if (defined $CLI{'evasion'}) {
$reqhash->{'whisker'}->{'encode_anti_ids'} = $CLI{'evasion'};
}
$reqhash->{'User-Agent'} = $VARIABLES{'useragent'};
$reqhash->{'User-Agent'} =~ s/\@TESTID/$testid/;
$reqhash->{'whisker'}->{'retry'} = 0;
$reqhash->{'whisker'}->{'host'} = $mark->{'hostname'} || $mark->{'ip'};
if ($mark->{'vhost'}) {
$request{'Host'} = $mark->{'vhost'};
}
$reqhash->{'whisker'}->{'port'} = $mark->{'port'};
$reqhash->{'whisker'}->{'ssl'} = $mark->{'ssl'};
# Proxy stuff
if (($CONFIGFILE{PROXYHOST} ne '') && ($CLI{'useproxy'})) {
$reqhash->{'whisker'}->{'proxy_host'} = $CONFIGFILE{'PROXYHOST'};
$reqhash->{'whisker'}->{'proxy_port'} = $CONFIGFILE{'PROXYPORT'};
if ($CONFIGFILE{'PROXYUSER'} ne '') {
LW2::auth_set("proxy-basic", $reqhash,
$CONFIGFILE{'PROXYUSER'},
$CONFIGFILE{'PROXYPASS'});
}
}
return $reqhash;
}
#######################################################################
sub cache_add {
if ((!defined $CLI{'nocache'}) && (!$flags_nocache)) {
my $method = shift;
my $code = shift;
my $content = shift;
my $uri = shift;
my $postdata = shift;
my $flags_nocache = shift;
my ($mark) = @_;
return if flags_nocache;
my $key =
LW2::md4( $mark->{'ip'}
. $mark->{'hostname'}
. $mark->{'port'}
. $mark->{'ssl'}
. $method
. $uri
. $postdata);
$CACHE{$key}{'method'} = $method;
$CACHE{$key}{'code'} = $code;
$CACHE{$key}{'content'} = $content;
}
}
#######################################################################
sub cache_fetch {
if ((!defined $CLI{'nocache'}) && (!$flags_nocache)) {
my $method = shift;
my $uri = shift;
my $postdata = shift;
my $flags_nocache = shift;
my ($mark) = @_;
return if flags_nocache;
my $key =
LW2::md4( $mark->{'ip'}
. $mark->{'hostname'}
. $mark->{'port'}
. $mark->{'ssl'}
. $method
. $uri
. $postdata);
if ($CACHE{$key}{'code'} ne '') {
return (1, $CACHE{$key}{'code'}, $CACHE{$key}{'content'});
}
else {
return 0;
}
}
return 0;
}
#######################################################################
sub nfetch {
my ($mark, $uri, $method, $data, $headers, $flags, $testid) = @_;
my (%request, %result);
setup_hash(\%request, $mark, $testid);
# check for keyboard input
if (($COUNTERS{'totalrequests'} % 10) == 0) {
if (check_input() eq 'term') { $mark->{'terminate'} = 1; }
}
$request{'whisker'}->{'uri'} = $mark->{'root'} . $uri; # prepend -root option's value if set
$request{'whisker'}->{'method'} = $method;
if ($data ne "") {
$data =~ s/\\\"/\"/g;
$request{'whisker'}->{'data'} = $data;
}
# check for extra HTTP headers
if (defined $headers) {
# loop through the hash ref passed and add each header to request
while (my ($key, $value) = each(%$headers)) {
$request{$key} = $value;
}
}
# set cookies
if (defined($mark->{'cookiejar'})) {
LW2::cookie_write($mark->{'cookiejar'}, \%request, 1);
}
LW2::http_fixup_request(\%request) unless ($flags->{'noclean'});
# Run pre hooks
unless ($flags->{'noprefetch'}) {
(%$request, %$result) = run_hooks($mark, "prefetch", \%request, \%result);
}
# Check cache
my ($incache, $code, $content) =
cache_fetch($request{'whisker'}->{'method'},
$request{'whisker'}->{'uri'},
$data, $flags->{'nocache'}, $mark);
if ($incache) {
nprint("- Got $request{'whisker'}->{'uri'} from cache.", "d");
$result{'whisker'}->{'code'} = $code;
$result{'whisker'}->{'data'} = $content;
}
if (!$incache) {
sleeper();
LW2::http_do_request_timeout(\%request, \%result);
$COUNTERS{'totalrequests'}++;
# If we got an error, do 1 retry. This should be much more intelligent and configurable!
if (defined $result{'whisker'}->{'error'} || $result{'whisker'}{'code'} eq '') {
sleeper();
LW2::http_do_request_timeout(\%request, \%result);
$COUNTERS{'totalrequests'}++;
}
cache_add($request{'whisker'}->{'method'},
$result{'whisker'}->{'code'},
$result{'whisker'}->{'data'},
$request{'whisker'}->{'uri'},
$data, $flags->{'nocache'}, $mark);
if ($OUTPUT{'debug'}) {
dump_var("Request Hash", \%request);
dump_var("Result Hash", \%result);
}
# Snarf what we can from the whisker hash and put in mark
if (!exists $result{'whisker'}->{'error'}) {
if (!exists $mark->{'banner'}) {
$mark->{'banner'} = $result{'server'};
}
else {
# Check banner hasn't changed
if ( exists $result{'server'}
&& $mark->{'banner'} ne $result{'server'}
&& !exists $mark->{'bannerchanged'}) {
nprint(
"+ Server banner has changed from $mark->{banner} to $result{server}, this may suggest a WAF or load balancer is in place"
);
$mark->{'bannerchanged'} = 1;
}
}
if (!exists $mark->{'ssl_cipher'} && $mark->{'ssl'}) {
# Grab ssl details
$mark->{'ssl_cipher'} = $result{'whisker'}->{'ssl_cipher'};
$mark->{'ssl_cert_issuer'} = $result{'whisker'}->{'ssl_cert_issuer'};
$mark->{'ssl_cert_subject'} = $result{'whisker'}->{'ssl_cert_subject'};
}
}
}
nprint("- $result{'whisker'}{'code'} for $method:\t$request{'whisker'}->{'uri'}", "v");
# Check for errors to reduce false positives
if ((defined $result{'whisker'}->{'error'} || $result{'whisker'}{'code'} eq '')
&& !exists $flags->{'noerror'}) {
$mark->{'total_errors'}++;
nprint(
"+ ERROR: $request{'whisker'}->{'uri'} returned an error: $result{'whisker'}{'error'}\n",
"e"
);
if (($result{'whisker'}->{'code'} eq 502) && ($CLI{'useproxy'})) {
nprint("+ ERROR: Revieved 502 'Bad Gateway' from proxy\n");
}
}
if ($OUTPUT{'show_cookies'} && (defined($result{'whisker'}->{'cookies'}))) {
foreach my $c (@{ $result{'whisker'}->{'cookies'} }) {
nprint("+ $request{'whisker'}->{'uri'} sent cookie: $c");
}
}
# If headers is defined, copy the whisker headers to the hash
if (defined $headers) {
# First clear the hash
foreach my $header (keys %$headers) {
delete($headers->{$header});
}
while (my ($key, $value) = each(%result)) {
if ($key ne "whisker" && $key ne "connection") {
$headers->{$key} = $value;
}
}
}
# Run post hooks
unless ($flags->{'nopostfetch'}) {
(%$request, %$result) = run_hooks($mark, "postfetch", \%request, \%result);
}
return $result{'whisker'}->{'code'}, $result{'whisker'}->{'data'},
$result{'whisker'}->{'error'};
}
#######################################################################
sub set_scan_items {
# load the tests
%TESTS = ();
$COUNTERS{total_checks} = 0;
my @SKIPLIST = ();
if (defined $CONFIGFILE{SKIPIDS}) {
@SKIPLIST = split(/ /, $CONFIGFILE{SKIPIDS});
}
# now load checks
foreach my $line (@DBFILE) {
if ($line =~ /^\"/) # check
{
chomp($line);
my @item = parse_csv($line);
my $add = 1;
# check tuning options
if ((defined $CLI{'tuning'}) && (defined $item[2])) {
# Work out the required tuning from the CLI string
my $exclude = 0;
foreach my $tune (split(//, $CLI{'tuning'})) {
if ($tune eq "x") {
$exclude = 1;
next;
}
if ($exclude == 0) {
if ($item[2] !~ /$tune/) { $add = 0; }
next;
}
if ($exclude == 1) {
if ($item[2] =~ /$tune/) { $add = 0; }
}
}
}
# Skip list
foreach my $id (@SKIPLIST) {
if ($id eq $item[0]) { $add = 0; }
}
# RFI URL Defined?
if (($item[2] =~ /c/) && ($VARIABLES{'@RFIURL'} eq '')) {
$add = 0;
}
if ($add) {
my $ext = get_ext($item[3]);
$db_extensions{$ext} = 1;
# validate...
for (my $y = 5 ; $y <= 9 ; $y++) {
next if $item[$y] eq '';
$item[$y] =~ s/\\"/"/g; # quotes are only escaped for csv parsing
$item[$y] = validate_and_fix_regex($item[$y]);
}
$COUNTERS{total_checks}++;
$TESTS{ $item[0] }{'uri'} = $item[3];
$TESTS{ $item[0] }{'osvdb'} = $item[1];
$TESTS{ $item[0] }{'method'} = $item[4];
$TESTS{ $item[0] }{'match_1'} = $item[5];
$TESTS{ $item[0] }{'match_1_or'} = $item[6];
$TESTS{ $item[0] }{'match_1_and'} = $item[7];
$TESTS{ $item[0] }{'fail_1'} = $item[8];
$TESTS{ $item[0] }{'fail_2'} = $item[9];
$TESTS{ $item[0] }{'message'} = $item[10];
$TESTS{ $item[0] }{'data'} = $item[11];
$TESTS{ $item[0] }{'headers'} = $item[12];
}
}
}
undef @DBFILE; # this memory hog is no longer needed!
nprint("- $COUNTERS{'total_checks'} server checks loaded", "v");
if ($COUNTERS{'total_checks'} eq 0 && !defined $CLI{'tuning'}) {
nprint("+ Unable to load valid checks!");
exit;
}
return;
}
#######################################################################
sub max_test_id {
return (sort { $a <=> $b } keys %TESTS)[-1];
}
#######################################################################
sub parse_csv {
my $text = $_[0] || return;
my @new = ();
push(@new, $+) while $text =~ m{
"([^\"\\]*(?:\\.[^\"\\]*)*)",?
| ([^,]+),?
| ,
}gx;
push(@new, undef) if substr($text, -1, 1) eq ',';
return @new;
}
#######################################################################
sub version {
my @NIKTOFILES = dirlist($CONFIGFILE{PLUGINDIR}, "(^nikto|^db_)");
nprint($VARIABLES{'DIV'});
nprint("$VARIABLES{'name'} Versions");
nprint($VARIABLES{'DIV'});
nprint("File Version Last Mod");
nprint("----------------------------- -------- ----------");
nprint("Nikto main $VARIABLES{'version'}");
nprint("LibWhisker $LW2::VERSION");
foreach my $FILE (sort @NIKTOFILES) {
open(FI, "<$CONFIGFILE{PLUGINDIR}/$FILE")
|| die print STDERR "+ ERROR: Unable to open '$CONFIGFILE{PLUGINDIR}/$FILE': $!\n";
my @F = ;
close(FI);
my @VERS = grep(/^#VERSION/, @F);
my @MODS = grep(/^# \$Id:/, @F);
chomp($VERS[0]);
chomp($MODS[0]);
my @modification = split(/ /, $MODS[0]);
$VERS[0] =~ s/^#VERSION,//;
my $ws1 = (35 - length($FILE));
my $ws2 = (13 - length($VERS[0]));
nprint("$FILE" . " " x $ws1 . "$VERS[0]" . " " x $ws2 . "$modification[4]");
}
nprint($VARIABLES{'DIV'});
# Check dependencies
eval "require RPC::XML";
if ($@) {
nprint("Module RPC::XML missing. Logging to Metasploit is disabled.");
}
eval "require RPC::XML::Client";
if ($@) {
nprint("Module RPC::XML::Client missing. Logging to Metasploit is disabled.");
}
my ($avail, $lib, $ver) = LW2::ssl_is_available();
if ($avail) {
nprint("SSL: $lib $ver");
}
else {
nprint("SSL: support not available.");
}
nprint($VARIABLES{'DIV'});
exit;
}
#######################################################################
sub send_updates {
return if ($CONFIGFILE{'UPDATES'} !~ /yes|auto/i);
my (@MARKS) = @_;
my ($updated_version, $answer, $RES);
my $have_updates = 0;
foreach my $mark (@MARKS) {
foreach my $component (keys %{ $mark->{'components'} }) {
if ($mark->{'components'}->{$component} eq 2) {
if ($component !~ /[0-9]/) { next; }
elsif ($component eq "Win32") { next; }
elsif ($component eq "(Win32)") { next; }
elsif ($component eq "Linux-Mandrake") { next; }
elsif ($component eq "") { next; }
$have_updates = 1;
$updated_version .= "$component ";
}
}
}
if ((!$have_updates) || ($updated_version eq "")) { return; }
# make sure the db_outdatedb isn't *too* old
open(OD, "<$CONFIGFILE{PLUGINDIR}/db_outdated")
|| die print STDERR "+ ERROR: Unable to open '$CONFIGFILE{PLUGINDIR}/db_outdated': $!\n";
@F = ;
close(OD);
my @LASTUPDATED = grep(/^\# \$Id: db_outdated/, @F);
$LASTUPDATED[0] =~ /([0-9]{4}\-[0-9]{2})/;
$lm = $1;
$lm =~ s/\-//g;
my @NOW = localtime(time);
$NOW[5] += 1900;
$NOW[4]++;
if ($NOW[4] < 10) { $NOW[4] = "0$NOW[4]"; }
my $now = "$NOW[5]$NOW[4]";
if (($now - $lm) > 120) { return; } # DB is 4 months old... ignore the updates!
$updated_version =~ s/\s+$//;
$updated_version =~ s/^\s+//;
if ($CONFIGFILE{'UPDATES'} eq "auto") {
$answer = "y";
}
else {
$answer = read_data(
"\n
*********************************************************************
Portions of the server's headers ($updated_version) are not in
the Nikto database or are newer than the known string. Would you like
to submit this information (*no server specific data*) to CIRT.net
for a Nikto update (or you may email to sullo\@cirt.net) (y/n)? ", ""
);
}
if ($answer !~ /y/i) { return; }
# set up our mark
my %mark = ('ident' => 'www.cirt.net',
'ssl' => 0,
'port' => 80
);
for (my $i = 0 ; $i <= $#ARGV ; $i++) {
if (($ARGV[$i] eq "-u") || ($ARGV[$i] eq "-useproxy")) {
$CLI{'useproxy'} = 1;
last;
}
}
($mark{'hostname'}, $mark{'ip'}, $mark{'display_name'}) = resolve('www.cirt.net');
($RES, $CONTENT) = nfetch(\%mark, "/cgi-bin/versions?DATA=$updated_version", "GET");
if ($RES eq 407) {
if ($CONFIGFILE{PROXYUSER} eq "") {
$CONFIGFILE{PROXYUSER} = read_data("Proxy ID: ", "");
$CONFIGFILE{PROXYPASS} = read_data("Proxy Pass: ", "noecho");
}
($RES, $CONTENT) = nfetch(\%mark, "/cgi-bin/versions?DATA=$updated_version", "GET");
}
if ($RES eq "") {
LW2::http_close(\%request); # force-close any old connections
$mark{'ip'} = $CONFIGFILE{CIRT};
($RES, $CONTENT) = nfetch(\%mark, "/cgi-bin/versions?DATA=$updated_version", "GET");
}
if ($CONTENT !~ /SUCCESS/) {
nprint("+ ERROR: ($RES, $CONTENT): Unable to send update info to CIRT.net");
}
else {
nprint("- Sent updated info to CIRT.net -- Thank you!");
}
return;
}
#######################################################################
sub usage {
if ($_[0] eq "Help") {
print "
Options:
-ask+ Whether to ask about submitting updates
yes Ask about each (default)
no Don't ask, don't send
auto Don't ask, just send
-config+ Use this config file
-Cgidirs+ Scan these CGI dirs: \"none\", \"all\", or values like \"/cgi/ /cgi-a/\"
-dbcheck Check database and other key files for syntax errors
-Display+ Turn on/off display outputs:
1 Show redirects
2 Show cookies received
3 Show all 200/OK responses
4 Show URLs which require authentication
D Debug output
E Display all HTTP errors
P Print progress to STDOUT
S Scrub output of IPs and hostnames
V Verbose output
-evasion+ Encoding technique:\n";
foreach my $k (sort keys %{ $NIKTO{'anti_ids'} }) {
print " $k $NIKTO{'anti_ids'}{$k}\n";
}
print " -Format+ Save file (-o) format:
csv Comma-separated-value
htm HTML Format
msf+ Log to Metasploit
nbe Nessus NBE format
txt Plain text (default if not specified)
xml XML Format
-host+ Target host
-Help Extended help information
-id+ Host authentication to use, format is id:pass or id:pass:realm
-list-plugins List all available plugins, perform no testing
-mutate+ Guess additional file names:\n";
foreach my $k (sort keys %{ $NIKTO{'mutate_opts'} }) {
print " $k $NIKTO{'mutate_opts'}{$k}\n";
}
print " -mutate-options Provide information for mutates
-nocache Disables the response cache
-nointeractive Disables interactive features
-nolookup Disables DNS lookups
-nossl Disables the use of SSL
-no404 Disables nikto attempting to guess a 404 page
-output+ Write output to this file
-port+ Port to use (default 80)
-Pause+ Pause between tests (seconds, integer or float)
-Plugins+ List of plugins to run (default: ALL)
-root+ Prepend root value to all requests, format is /directory
-ssl Force ssl mode on port
-Single Single request mode
-timeout+ Timeout (default 2 seconds)
-Tuning+ Scan tuning:
1 Interesting File / Seen in logs
2 Misconfiguration / Default File
3 Information Disclosure
4 Injection (XSS/Script/HTML)
5 Remote File Retrieval - Inside Web Root
6 Denial of Service
7 Remote File Retrieval - Server Wide
8 Command Execution / Remote Shell
9 SQL Injection
0 File Upload
a Authentication Bypass
b Software Identification
c Remote Source Inclusion
x Reverse Tuning Options (i.e., include all except specified)
-useproxy Use the proxy defined in nikto.conf
-update Update databases and plugins from CIRT.net
-vhost+ Virtual host (for Host header)
-Version Print plugin and database versions
+ requires a value
";
}
else {
print "
-config+ Use this config file
-Cgidirs+ scan these CGI dirs: 'none', 'all', or values like \"/cgi/ /cgi-a/\"
-dbcheck check database and other key files for syntax errors
-Display+ Turn on/off display outputs
-evasion+ ids evasion technique
-Format+ save file (-o) format
-host+ target host
-Help Extended help information
-id+ Host authentication to use, format is id:pass or id:pass:realm
-list-plugins List all available plugins
-mutate+ Guess additional file names
-mutate-options+ Provide extra information for mutations
-output+ Write output to this file
-nocache Disables the URI cache
-nossl Disables using SSL
-no404 Disables 404 checks
-port+ Port to use (default 80)
-Plugins+ List of plugins to run (default: ALL)
-root+ Prepend root value to all requests, format is /directory
-ssl Force ssl mode on port
-Single Single request mode
-timeout+ Timeout (default 2 seconds)
-Tuning+ Scan tuning
-update Update databases and plugins from CIRT.net
-vhost+ Virtual host (for Host header)
-Version Print plugin and database versions
+ requires a value
Note: This is the short help output. Use -H for full help.
";
}
exit;
}
#######################################################################
sub init_db {
my $dbname = $_[0];
my $filename = "$CONFIGFILE{PLUGINDIR}/" . $dbname;
my (@dbarray, @headers);
my $hashref = {};
# Check that the database exists
unless (open(IN, "<$filename")) {
nprint("+ ERROR: Unable to open database file $dbname: $!.");
return $dbarray;
}
# Now read the header values
while () {
chomp;
s/\#.*$//;
if ($_ eq "") { next }
unless (@headers) {
@headers = parse_csv($_);
}
else {
# contents; so split them up and apply to hash
my @contents = parse_csv($_);
my $hashref = {};
for (my $i = 0 ; $i <= $#contents ; $i++) {
$hashref->{ $headers[$i] } = $contents[$i];
}
push(@dbarray, $hashref);
}
}
close(IN);
# and now the udb_* file
$filename = "$CONFIGFILE{PLUGINDIR}/u" . $dbname;
if (open(IN, "<$filename")) {
while () {
chomp;
s/\#.*$//;
if ($_ eq "") { next; }
# contents; so split them up and apply to hash
my @contents = parse_csv($_);
my $hashref = {};
for (my $i = 0 ; $i <= $#contents ; $i++) {
$hashref->{ $headers[$i] } = $contents[$i];
}
push(@dbarray, $hashref);
}
}
close(IN);
return \@dbarray;
}
#######################################################################
sub add_vulnerability {
my ($mark, $message, $nikto_id, $osvdb, $method, $uri) = @_;
$uri = "/" unless (defined $uri);
$method = "GET" unless (defined $method);
$osvdb = "0" unless (defined $osvdb);
# check to see if we've alerted already (can be from content search, etc.)
foreach my $r (@RESULTS) {
if ( ($uri eq $r->{'uri'})
&& ($message eq $r->{'message'})
&& ($method eq $r->{'method'})
&& (${ $r->{'mark'} }{'ident'} eq $mark->{'ident'})
&& (${ $r->{'mark'} }{'port'} eq $mark->{'port'})) {
return;
}
}
my $result = "";
if (defined $_[7]) {
$result = $_[7]->{'whisker'}->{'data'};
}
my $resulthash;
%$resulthash = (mark => $mark,
message => $message,
nikto_id => $nikto_id,
osvdb => $osvdb,
method => $method,
uri => $uri,
result => $result,
);
push(@RESULTS, $resulthash);
$mark->{total_vulns}++;
unless ($osvdb eq "0") {
$message = "OSVDB-$osvdb: $message";
}
nprint("+ $message");
# Now report it
report_item($mark, $resulthash);
}
###############################################################################
sub list_plugins {
# Just do a load_plugins, then loop through the array and print out name,
# description and copyright
load_plugins();
foreach my $plugin (@PLUGINS) {
nprint("Plugin: $plugin->{'name'}");
push(@all_names, $plugin->{'name'});
nprint(" $plugin->{'full_name'} - $plugin->{'description'}");
nprint(" Written by $plugin->{'author'}, Copyright (C) $plugin->{'copyright'}");
if (defined $plugin->{'options'}) {
nprint(" Options:");
while (my ($option, $description) = each(%{ $plugin->{'options'} })) {
nprint(" $option: $description");
}
}
nprint("\n");
}
# Plugin macros
nprint("Defined plugin macros:");
foreach my $macro (keys %CONFIGFILE) {
if ($macro =~ /^@@/) {
nprint(" $macro = \"" . $CONFIGFILE{$macro} . "\"");
if ($CONFIGFILE{$macro} =~ /@@/) {
nprint(" (expanded) = \"" . expand_pluginlist($CONFIGFILE{$macro}, 0) . "\"");
}
}
}
exit(0);
}
###############################################################################
# This is overly complicated and jumps a lot between scalars and arrays. The REs are
# probably dodgy, but it works! W00!
sub expand_pluginlist {
my ($pluginlist, $parent) = @_;
my @macros;
foreach my $config (keys %CONFIGFILE) {
if ($config =~ /^@@/) {
push(@macros, $config);
}
}
# Now loop through each member of the list and expand it
my $count = 0;
my $npluginlist = $pluginlist;
do {
$count++;
my @raw = split(/;/, $npluginlist);
# cooked contains the processed list
my @cooked;
foreach my $entry (@raw) {
# Is it +; if so remap to @@DEFAULT
if ($entry eq "+") {
$entry = '@@DEFAULT';
}
# result contains the processed entry
my $result = $original = $entry;
# Is it a macro
if ($entry =~ /^-?@@/) {
# break up into components
$prefix = ($entry =~ /^-/) ? "-" : "";
$name = $suffix = $entry;
$name =~ s/(^-?)(@@[[:alpha:]]+)(\(?.*\)?$)/$2/;
$suffix =~ s/(.*)(\(.*\))/$2/;
if ($suffix eq $entry) {
$suffix = "";
}
foreach my $macro (@macros) {
if ($entry =~ /-?$macro/) {
# It's a macro, so replace the contents with the macro
# Add prefix and suffix to each member of the macro
my @temp;
foreach my $child (split(/;/, $CONFIGFILE{$macro})) {
push(@temp, "$prefix$child$suffix");
}
$result = join(';', @temp);
# stop an infinite loop
last;
}
}
}
if ($result =~ /^-?@@/ && $result eq $original) {
# macro not found or is itself - ignore
$result = "";
}
if ($count > 100) {
# check for recurstion
nprint("ERROR: Recursion found whilst expanding macros");
$result = "";
last;
}
push(@cooked, $result);
}
$npluginlist = join(';', @cooked);
} while ($npluginlist =~ /@@/ && $count <= 100);
#use re 'debug';
# Now we've expanded out macros, deal with duplicates and -
my @raw = split(/;/, $npluginlist);
# hash so we don't have to mess with duplicates
my %cooked;
foreach my $plugin (@raw) {
# break out components
my $minus;
my $name = my $suffix = $plugin;
$minus = (substr($plugin, 0, 1) eq '-');
$name =~ s/(^-?)([^\(]+)(\(?.*\)?$)/$2/;
$suffix =~ s/(.*)(\(.*\))/$2/;
if ($suffix eq $plugin) {
$suffix = "";
}
#nprint("P:$plugin M:$minus N:$name S:$suffix");
if ($minus) {
# it's a minus - remove any previous entry
if (exists $cooked{$name}) {
delete $cooked{$name};
}
}
else {
# else add it with the parameters as the value of the hash
$cooked{$name} = $suffix;
}
}
# Now rejoin into one happy whole
my $output;
foreach my $plugin (keys %cooked) {
$output .= "$plugin" . $cooked{$plugin} . ";";
}
# remove the last ;
$output =~ s/;$//g;
return $output;
}
###############################################################################
# Check a regex for validation & fix. If mode=1, return a flag which indicates
# whether the regex was changed
sub validate_and_fix_regex {
my $regex = $_[0];
my $mode = $_[1] || 0;
my $fixed = 0;
eval { qr/$regex/ };
if ($@) {
$fixed = 1;
$regex = rquote($regex);
}
if ($mode) { return $regex, $fixed; }
return $regex;
}
###############################################################################
sub rquote {
my $string = $_[0] || return;
$string =~ s/([^A-Za-z_0-9 "'\\])/\\$1/g;
return $string;
}
###############################################################################
sub nikto_core { return; } # trap for this plugin being called to run. lame.
###############################################################################
1;
nikto-2.1.4/plugins/nikto_core.plugin.debug 0000664 0000000 0000000 00000301655 11554552544 0021010 0 ustar 00root root 0000000 0000000 #VERSION,2.1.4
# $Id: nikto_core.plugin.debug 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# 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:
# Nikto core functionality
###############################################################################
sub change_variables {
# $line is the unfiltered variable
my $line = $_[0];
my @subtests; # @subtests is the returned array of expanded variables
my $cooked;
my $shname = $mark->{'hostname'} || $mark->{'ip'};
$line =~ s/\@IP/$mark->{'ip'}/g;
$line =~ s/\@HOSTNAME/$shname/g;
$line =~ s/JUNK\(([0-9]+)\)/LW2::utils_randstr($1)/e;
if ($line !~ "\@") {
push(@subtests, $line);
}
else {
foreach my $varname (keys %VARIABLES) {
if ($line =~ /$varname/) {
# We've found the variable; now to expand it!
foreach my $value (split(/ /, $VARIABLES{$varname})) {
$cooked = $line;
$cooked =~ s/$varname/$value/g;
push(@subtests, change_variables($cooked));
}
}
}
}
return @subtests;
}
###############################################################################
sub is_404 {
my ($uri, $content, $rescode, $loc_header) = @_;
$ext = get_ext($uri);
if (($FoF{$ext}{'mode'} eq "STD") && ($rescode =~ /4[0-9][0-9]/)) {
return 1;
}
elsif ($FoF{$ext}{'mode'} eq "REDIR") {
if (get_base_host($loc_header) eq $FoF{$ext}{'location'}) {
return 1;
}
}
elsif (($FoF{$ext}{'type'} eq "BLANK") && ($content eq "")) {
return 1;
}
elsif ($FoF{$ext}{'type'} eq "HASH") {
my $content = rm_active_content($content, $uri);
if (LW2::md4($content) eq $FoF{$ext}{'match'}) {
return 1;
}
}
foreach my $string (keys %{$VARIABLES->{'ERRSTRINGS'}}) {
if ($content =~ /$string/i) {
return 1;
}
}
return 0;
}
###############################################################################
sub nprint {
my $line = shift;
my $mode = shift;
my ($mark) = @_;
chomp($line);
# scrub values
if ($OUTPUT{'scrub'}) {
# name
$line =~ s/$mark->{'hostname'}/example.com/ig unless $mark->{'hostname'} eq '';
# ip
$line =~ s/$mark->{'ip'}/0.0.0.0/ig unless $mark->{'ip'} eq '';
# vhost
$line =~ s/$CLI{'vhost'}/example.com/ig unless $CLI{'vhost'} eq '';
# and in case we got here from set_target
$line =~ s/$mark->{'ident'}/example.com/ig unless $mark->{'ident'} eq '';
}
# don't print debug & verbose to output file...
if ($mode ne '') {
if ($mode eq "d" && $OUTPUT{'debug'}) {
print "D:" . localtime() . " $line\n";
}
if ($mode eq "v" && $OUTPUT{'verbose'}) {
print "V:" . localtime() . " $line\n";
}
if ($mode eq "e" && $OUTPUT{'errors'}) {
print "E:" . localtime() . " $line\n";
}
return;
}
# print errors to STDERR
if ($line =~ /^\t?\+ ERROR:/) { print STDERR "$line\n"; return; }
# don't print to STDOUT if output file is "-"
if ((defined $CLI{'file'}) && ($CLI{'file'} eq "-")) { return; }
$line =~ s/(CVE\-[12][0-9]{4}-[0-9]{4})/http:\/\/cve.mitre.org\/cgi-bin\/cvename.cgi?name\=$1/g;
$line =~ s/(CA\-[12][0-9]{3}-[0-9]{2})/http:\/\/www.cert.org\/advisories\/$1.html/g;
$line =~ s/BID\-([0-9]{4})/http:\/\/www.securityfocus.com\/bid\/$1/g;
$line =~
s/(MS[0-9]{2}\-[0-9]{3})/http:\/\/www.microsoft.com\/technet\/security\/bulletin\/$1.asp/gi;
print $line . "\n";
return;
}
###############################################################################
sub get_ext {
my $uri = $_[0] || return;
if ($uri =~ /\/$/) { return "DIRECTORY"; }
$uri =~ s/^.*\///;
if ($uri =~ /^\.[^.%]/) { return "DOTFILE"; }
$uri =~ s/[?&%].*$//;
if ($uri !~ /\./) { return "NONE"; }
$uri =~ s/\".*$//;
$uri =~ s/^.*\.//;
return $uri;
}
###############################################################################
sub status_report {
# without this we could face a div by 0 error
if ($COUNTERS{'totalrequests'} eq 0) {
nprint("- STATUS: Starting up!");
return;
}
my $secleft =
((time() - $COUNTERS{'scan_start'}) / $COUNTERS{'totalrequests'}) *
(($COUNTERS{'total_checks'} * $COUNTERS{'total_targets'}) - $COUNTERS{'totalrequests'});
my $timeleft;
if ($secleft > 60) {
my $minleft = $secleft / 60;
$timeleft = sprintf("%.1f minutes", $minleft);
if ($minleft > 60) {
my $hrsleft = $minleft / 60;
$timeleft = sprintf("%.1f hours", $hrsleft);
}
}
else { $timeleft = sprintf("%.0f seconds", $secleft); }
my $perc_compl =
($COUNTERS{'totalrequests'} / ($COUNTERS{'total_checks'} * $COUNTERS{'total_targets'}) * 100);
my $line;
# This 'if' is because I am a lazy, bad programmer.
# And also because total_checks only takes into account db_tests, not other stuff. I swear.
if (($perc_compl < 100) && ($secleft > 0)) {
$line = "- STATUS: Completed $COUNTERS{'totalrequests'} tests";
if ($COUNTERS{'total_targets'} > 1) {
$line .= " (target " . ($COUNTERS{'hosts_completed'} + 1) . "/$COUNTERS{'total_targets'})";
}
$line .= sprintf(" (~%.0f%% complete, $timeleft left", $perc_compl);
if ($NIKTO{'current_plugin'} ne '') {
$line .= ": currently in plugin '$NIKTO{'current_plugin'}'";
}
$line .= ")";
}
else { $line = "- STATUS: Finishing up!"; }
nprint($line);
return;
}
###############################################################################
sub date_disp {
my @time = localtime($_[0]);
my $result = sprintf("%d-%02d-%02d %02d:%02d:%02d",
$time[5] + 1900,
$time[4] + 1,
$time[3] + 1,
$time[2], $time[1], $time[0]);
return $result;
}
###############################################################################
sub get_base_host {
my $uri = $_[0] || return;
# uri, protocol, host, port, params, frag, user, password.
my @hd = LW2::uri_split($uri);
my $base = $hd[1] . "://" . $hd[2];
if (($hd[3] != 80) && ($hd[3] != 443)) { $base .= ":" . $hd[3]; }
$base .= "/";
return $base;
}
###############################################################################
sub map_codes {
my ($mark) = @_;
my %REQS;
my $rs = LW2::utils_randstr(8);
my ($res, $content, $error, %headers);
# / for OK response
($res, $content, $error) = nfetch($mark, "/", "GET", "", \%headers, "", "map_codes");
if (defined $headers{'location'}) {
nprint("+ Root page / redirects to: $headers{'location'}");
if ($headers{'location'} =~ /^$mark->{'hostname'}/i) # same host
{
my $uri = $headers{'location'};
%headers = ();
($res, $content, $error) = nfetch($mark, "/", "GET", "", \%headers, "", "map_codes");
}
else # different host... ugh... just guess
{
$FoF{'okay'}{'response'} = 200;
$FoF{'okay'}{'type'} = "STD";
}
}
else {
$FoF{'okay'}{'response'} = $res;
my $cooked = rm_active_content($content);
$FoF{'okay'}{'type'} = "HASH";
$FoF{'okay'}{'match'} = LW2::md4($cooked);
}
# these are some used in mutate that may not be in the db_tests
if (defined $CLI{'mutate'}) {
$db_extensions{'bak'} = 1;
$db_extensions{'data'} = 1;
$db_extensions{'dbc'} = 1;
$db_extensions{'dbf'} = 1;
$db_extensions{'lst'} = 1;
$db_extensions{'htx'} = 1;
}
foreach my $ext (keys %db_extensions) {
if ( $ext ne "DIRECTORY"
&& $ext ne "NONE"
&& $ext ne "DOTFILE") {
$REQS{"/$rs.$ext"} = $ext;
}
}
undef $db_extensions;
# add those generic type holders back as real files
$REQS{"/$rs/"} = "DIRECTORY";
$REQS{"/$rs"} = "NONE";
$REQS{"/.$rs"} = "DOTFILE";
foreach my $file (keys %REQS) {
return if $mark->{'terminate'};
nprint("- Testing error for file: $file\n", "v");
%headers = ();
($res, $content, $error) = nfetch($mark, $file, "GET", "", \%headers, "", "map_codes");
$ext = $REQS{$file};
$FoF{$ext}{'response'} = $res;
# handle .com to .org redirs or whatnot
if (defined $headers{'location'}) {
$FoF{$ext}{'location'} = get_base_host($headers{'location'});
}
# if it is not specific type, figure out Content or HASH method...
if ($FoF{$ext}{'response'} eq 404) { $FoF{$ext}{'mode'} = "STD"; next; }
elsif ($FoF{$ext}{'response'} eq 200) { $FoF{$ext}{'mode'} = "OK"; }
elsif ($FoF{$ext}{'response'} eq 410) { $FoF{$ext}{'mode'} = "STD"; next; }
elsif ($FoF{$ext}{'response'} eq 401) { $FoF{$ext}{'mode'} = "STD"; next; }
elsif ($FoF{$ext}{'response'} eq 403) { $FoF{$ext}{'mode'} = "STD"; next; }
elsif ($FoF{$ext}{'response'} eq 300) { $FoF{$ext}{'mode'} = "REDIR"; next; }
elsif ($FoF{$ext}{'response'} eq 301) { $FoF{$ext}{'mode'} = "REDIR"; next; }
elsif ($FoF{$ext}{'response'} eq 302) { $FoF{$ext}{'mode'} = "REDIR"; next; }
elsif ($FoF{$ext}{'response'} eq 303) { $FoF{$ext}{'mode'} = "REDIR"; next; }
elsif ($FoF{$ext}{'response'} eq 307) { $FoF{$ext}{'mode'} = "REDIR"; next; }
else { $FoF{$ext}{'mode'} = "OTHER"; }
# if we've got an OK/OTHER response, look at content first
# blank content, or hash...
if (length($content) == 0) {
nprint("- OK/OTHER type settled on: BLANK\n","v");
$FoF{$ext}{'type'} = "BLANK";
$FoF{$ext}{'match'} = "";
}
else {
nprint("- OK/OTHER type settled on: HASH\n","v");
my $cooked = rm_active_content($content, $file);
$FoF{$ext}{'type'} = "HASH";
$FoF{$ext}{'match'} = LW2::md4($cooked);
}
}
# lastly, get a hash of index.php so we can cut down on some false positives...
%headers = ();
($res, $content, $error) = nfetch($mark, "/index.php?", "GET", "", \%headers, "", "map_codes");
my $cooked = rm_active_content($content, "/index.php");
$FoF{'index.php'}{'match'} = LW2::md4($cooked);
$FoF{'index.php'}{'type'} = "HASH";
return;
}
###############################################################################
sub rm_active_content {
# Try to remove active content which could mess up the file's signature
my ($cont, $file) = @_;
# Dates/Times
$cont =~ s/[12][0-9]{3}[-.\/][1-3]?[0-9][-.\/][1-3]?[0-9]//g; # 2001-12-12
$cont =~ s/[1-3]?[0-9][-.\/][1-3]?[0-9][-.\/][12][0-9]{3}//g; # 12-12-2002
$cont =~ s/[0-9]{8,14}//g; # timestamp
$cont =~ s/[0-9]{6}//g; # timestamp
$cont =~ s/[0-9]{2}:[0-9]{2}(?::[0-9]{2})?//g; #12:11:33
$cont =~
s/(?:mon|tue|wed|thu|fri|sat|sun),? [1-3]?[0-9] (?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)//ig;
$cont =~ s/[12][0-9]{3}\s?(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s?[1-3]?[0-9]//gi
; # 2009 jan 29
$cont =~
s/[1-3]?[0-9]\s?(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)[, ]?(?:[12][0-9]{3})?//gi
; # 29 Jan 2009
$cont =~ s/[0-9\.]+ second//gi; # page load time
$cont =~ s/[0-9]+ queries//gi; # wordpress
# URI, if provided, plus encoded versions of it
# $_[1] has unescaped file name, and $file has escaped. use appropriate one!
if ($file ne '') {
$file = quotemeta($file);
$cont =~ s/$file//g;
# base 64
my $e = LW2::encode_base64($_[1]);
$cont =~ s/$e//gs;
# hex encoded
$e = LW2::encode_uri_hex($_[1]);
$cont =~ s/$e//gs;
# unicode encoded
$e = LW2::encode_unicode($_[1]);
$cont =~ s/$e//gs;
# url encoding, full url
$e = $_[1];
$e =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
$cont =~ s/$e//gs;
# url encoding, query portion
if ($file =~ /\?(.*$)/) {
my $qs = $1;
# match pages which link to themselves w/diff args
$cont =~ s/$qs//gs;
# url encoded
$qs =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
$cont =~ s/$qs//gs;
}
}
return $cont;
}
###############################################################################
sub dump_target_info {
my ($mark) = @_;
my $sslprint = "";
if ($mark->{ssl}) {
$sslprint = "$VARIABLES{'DIV'}\n";
$sslprint .=
"+ SSL Info: Subject: $mark->{'ssl_cert_subject'}\n"
. " Ciphers: $mark->{'ssl_cipher'}\n"
. " Issuer: $mark->{'ssl_cert_issuer'}";
}
if ($CLI{'plugins'} ne '@@NONE') {
if ($mark->{ip} =~ /[a-z]/i) {
nprint("+ Target IP: (proxied)", "", $mark);
}
else {
nprint("+ Target IP: $mark->{ip}", "", $mark);
}
nprint("+ Target Hostname: $mark->{hostname}", "", $mark);
nprint("+ Target Port: $mark->{port}");
if (defined $CLI{'root'}) { nprint("+ Target Path: $CLI{'root'}");
}
if ((defined $CLI{'vhost'}) && ($CLI{'vhost'} ne $mark->{hostname})) {
nprint("+ Virtual Host: $CLI{'vhost'}", "", $mark);
}
if ($request{'whisker'}->{'proxy_host'} ne '') {
nprint(
"+ Proxy: $request{'whisker'}->{'proxy_host'}:$request{'whisker'}->{'proxy_port'}"
);
}
if (defined $NIKTO{'hostid'}) {
nprint(
"+ Host Auth: ID: $NIKTO{'hostid'}, PW: $NIKTO{'hostpw'}, Realm: $NIKTO{'hostdomain'}",
"v"
);
}
if ($mark->{ssl}) {
nprint($sslprint);
}
if (defined $NIKTO{'anti_ids'} && defined $CLI{'evasion'}) {
for (my $i = 1 ; $i <= (keys %{ $NIKTO{'anti_ids'} }) ; $i++) {
if ($CLI{'evasion'} =~ /$i/) {
nprint("+ Using Encoding: $NIKTO{'anti_ids'}{$i}");
}
}
}
if (defined $NIKTO{'mutate_opts'} && defined $CLI{'mutate'}) {
for (my $i = 1 ; $i <= (keys %{ $NIKTO{'mutate_opts'} }) ; $i++) {
if ($CLI{'mutate'} =~ /$i/) {
nprint("+ Using Mutation: $NIKTO{'mutate_opts'}{$i}");
}
}
}
my $time = date_disp($mark->{start_time});
nprint("+ Start Time: $time");
nprint($VARIABLES{'DIV'});
}
if ($mark->{banner} ne "") {
nprint("+ Server: $mark->{banner}");
}
else {
nprint("+ Server: No banner retrieved");
}
return;
}
###############################################################################
sub general_config {
## gotta set these first
$| = 1;
# This is used in dump_target_info(), not just help output
$NIKTO{'anti_ids'}{'1'} = "Random URI encoding (non-UTF8)";
$NIKTO{'anti_ids'}{'2'} = "Directory self-reference (/./)";
$NIKTO{'anti_ids'}{'3'} = "Premature URL ending";
$NIKTO{'anti_ids'}{'4'} = "Prepend long random string";
$NIKTO{'anti_ids'}{'5'} = "Fake parameter";
$NIKTO{'anti_ids'}{'6'} = "TAB as request spacer";
$NIKTO{'anti_ids'}{'7'} = "Change the case of the URL";
$NIKTO{'anti_ids'}{'8'} = "Use Windows directory separator (\\)";
$NIKTO{'anti_ids'}{'A'} = "Use a carriage return (0x0d) as a request spacer";
$NIKTO{'anti_ids'}{'B'} = "Use binary value 0x0b as a request spacer";
# This is used in dump_target_info(), not just help output
$NIKTO{'mutate_opts'}{'1'} = "Test all files with all root directories";
$NIKTO{'mutate_opts'}{'2'} = "Guess for password file names";
$NIKTO{'mutate_opts'}{'3'} = "Enumerate user names via Apache (/~user type requests)";
$NIKTO{'mutate_opts'}{'4'} =
"Enumerate user names via cgiwrap (/cgi-bin/cgiwrap/~user type requests)";
$NIKTO{'mutate_opts'}{'5'} =
"Attempt to brute force sub-domain names, assume that the host name is the parent domain";
$NIKTO{'mutate_opts'}{'6'} =
"Attempt to guess directory names from the supplied dictionary file";
### CLI STUFF
$CLI{'pause'} = $CLI{'html'} = $OUTPUT{'verbose'} = $CLI{'skiplookup'} =
$COUNTERS{'totalrequests'} = $OUTPUT{'debug'} = $OUTPUT{'scrub'} = $OUTPUT{'errors'} = 0;
$CLI{'all_options'} = join(" ", @ARGV);
GetOptions("nolookup" => \$CLI{'skiplookup'},
"ask=s" => \$CLI{'ask'},
"config=s" => \$CLI{'config'},
"Cgidirs=s" => \$CLI{'forcecgi'},
"mutate=s" => \$CLI{'mutate'},
"mutate-options=s" => \$CLI{'mutate-options'},
"id=s" => \$CLI{'hostauth'},
"nointeractive" => \$CLI{'nointeractive'},
"evasion=s" => \$CLI{'evasion'},
"port=s" => \$CLI{'ports'},
"findonly" => \$CLI{'findonly'},
"root=s" => \$CLI{'root'},
"timeout=i" => \$CLI{'timeout'},
"Pause=f" => \$CLI{'pause'},
"ssl" => \$CLI{'ssl'},
"nocache" => \$CLI{'nocache'},
"nossl" => \$CLI{'nossl'},
"no404" => \$CLI{'nofof'},
"useproxy:s" => \$CLI{'useproxy'},
"vhost=s" => \$CLI{'vhost'},
"host=s" => \$CLI{'host'},
"output=s" => \$CLI{'file'},
"Format=s" => \$CLI{'format'},
"Display=s" => \$CLI{'display'},
"Tuning=s" => \$CLI{'tuning'},
"Plugins=s" => \$CLI{'plugins'},
"Help" => \&usage,
"Single" => \&single,
"list-plugins" => \&list_plugins,
"Version" => \&version,
"update" => \&check_updates,
"dbcheck" => \&check_dbs,
) or usage();
# deprecated -findonly overrides -Plugins
if ($CLI{'findonly'}) {
$CLI{'plugins'} = '@@NONE';
}
# CLI proxy overrides nikto.conf
if ((defined($CLI{'useproxy'})) && ($CLI{'useproxy'} ne '')) {
my @prox = LW2::uri_split($CLI{'useproxy'});
$CONFIGFILE{'PROXYHOST'} = $prox[2];
$CONFIGFILE{'PROXYPORT'} = $prox[3];
$CONFIGFILE{'PROXYUSER'} = $prox[6];
$CONFIGFILE{'PROXYPASS'} = $prox[7];
}
elsif (defined($CLI{'useproxy'})) { $CLI{'useproxy'}=1; }
# output file
if (!defined $CLI{'format'}) {
# Check what output has
$CLI{'format'} = "none";
if (defined $CLI{'file'}) {
$CLI{'format'} = lc($CLI{'file'});
$CLI{'format'} =~ s/(^.*\.)([^.]*$)/$2/g;
}
}
if ($CLI{'format'} =~ /te?xt/i) { $CLI{'format'} = "txt"; }
elsif ($CLI{'format'} =~ /html?/i) { $CLI{'format'} = "htm"; }
elsif ($CLI{'format'} =~ /csv/i) { $CLI{'format'} = "csv"; }
elsif ($CLI{'format'} =~ /nbe/i) { $CLI{'format'} = "nbe"; }
elsif ($CLI{'format'} =~ /xml/i) { $CLI{'format'} = "xml"; }
elsif ($CLI{'format'} =~ /msf/i) { $CLI{'format'} = "msf"; }
elsif ($CLI{'format'} eq 'none') { }
else { nprint("+ ERROR: Invalid output format"); exit; }
if ((defined $CLI{'file'}) && ($CLI{'format'} eq "")) {
nprint("+ERROR: Output file specified without a format");
exit;
}
# verify readable dtd
if ($CLI{'format'} eq 'xml' && !-r $CONFIGFILE{'NIKTODTD'}) {
nprint("+ ERROR: reading DTD");
exit;
}
# screen output
if (defined $CLI{'display'}) {
if ($CLI{'display'} =~ /d/i) { $OUTPUT{'debug'} = 1; }
if ($CLI{'display'} =~ /v/i) { $OUTPUT{'verbose'} = 1; }
if ($CLI{'display'} =~ /s/i) { $OUTPUT{'scrub'} = 1; }
if ($CLI{'display'} =~ /e/i) { $OUTPUT{'errors'} = 1; }
if ($CLI{'display'} =~ /p/i) { $OUTPUT{'progress'} = 1; }
if ($CLI{'display'} =~ /1/i) { $OUTPUT{'show_redirects'} = 1; }
if ($CLI{'display'} =~ /2/i) { $OUTPUT{'show_cookies'} = 1; }
if ($CLI{'display'} =~ /3/i) { $OUTPUT{'show_ok'} = 1; }
if ($CLI{'display'} =~ /4/i) { $OUTPUT{'show_auth'} = 1; }
}
# port(s)
if (defined $CLI{'ports'}) {
$CLI{'ports'} =~ s/^\s+//;
$CLI{'ports'} =~ s/\s+$//;
if ($CLI{'ports'} =~ /[^0-9\-\, ]/) {
nprint("+ ERROR: Invalid port option '$CLI{'ports'}'");
exit;
}
}
# Fixup
if (defined $CLI{'root'}) {
$CLI{'root'} =~ s/\/$//;
if (($CLI{'root'} !~ /^\//) && ($CLI{'root'} ne "")) { $CLI{'root'} = "/$CLI{'root'}"; }
}
if (defined $CLI{'hostauth'}) {
my @x = split(/:/, $CLI{'hostauth'});
if (($#x > 2) || ($x[0] eq "")) {
nprint(
"+ ERROR: \'$CLI{'hostauth'}\' (-i option) syntax is 'user:password' or 'user:password:domain' for host authentication."
);
exit;
}
}
if (defined $CLI{'evasion'}) {
$CLI{'evasion'} =~ s/[^1-8AB]//g;
}
else {
undef $NIKTO{'anti_ids'}; # we don't need this any more
}
if (!defined $CLI{'plugins'} || $CLI{'plugins'} eq "") {
$CLI{'plugins'} = '@@DEFAULT';
}
# Mapping for mutate for plugins
if (defined $CLI{'mutate'}) {
nprint("- Mutate is deprecated, use -Plugins instead");
if ($CLI{'mutate'} =~ /1/ || $CLI{'mutate'} =~ /2/) {
my $parameters;
$parameters = "passfiles" if ($CLI{'mutate'} =~ /2/);
$parameters .= ",all" if ($CLI{'mutate'} =~ /1/);
$CLI{'plugins'} .= ';tests(' . $parameters . ')';
}
if ($CLI{'mutate'} =~ /3/ || $CLI{'mutate'} =~ /4/) {
my $parameters;
$parameters = "enumerate";
$parameters .= ",home" if ($CLI{'mutate'} =~ /3/);
$parameters .= ",cgiwrap" if ($CLI{'mutate'} =~ /4/);
$parameters .= ",dictionary:" . $CLI{'mutate-opts'} if (defined $CLI{'mutate-opts'});
$CLI{'plugins'} .= ';apacheusers(' . $parameters . ')';
}
if ($CLI{'mutate'} =~ /5/) {
$CLI{'plugins'} .= ";subdomain";
}
if ($CLI{'mutate'} =~ /6/) {
$CLI{'plugins'} .= ';dictionary(dictionary:' . $CLI{'mutate-opts'} . ')';
}
}
else {
undef $NIKTO{'mutate_opts'}; # we don't need this any more
}
# Asking questions?
if ($CLI{'ask'} =~ /^(?:auto|yes|no)$/) {
$CONFIGFILE{'UPDATES'} = $CLI{'ask'}; # override nikto.conf setting
undef($CLI{'ask'});
}
$CLI{'timeout'} || 10;
# Set up User-Agent
$VARIABLES{'useragent'} = $CONFIGFILE{'USERAGENT'};
$VARIABLES{'useragent'} =~ s/\@VERSION/$VARIABLES{'version'}/g;
my $ev = $CLI{'evasion'} || "None";
$VARIABLES{'useragent'} =~ s/\@EVASIONS/$ev/g;
# RFI URL -- push it to VARIABLES
if (defined $CONFIGFILE{'RFIURL'}) {
$VARIABLES{'@RFIURL'} = $CONFIGFILE{'RFIURL'};
}
else {
nprint("- ***** RFIURL is not defined in nikto.conf--no RFI tests will run *****");
}
# SSL Test
if (!LW2::ssl_is_available()) {
nprint("- ***** SSL support not available (see docs for SSL install) *****");
}
# get core version
open(FI, "<$CONFIGFILE{PLUGINDIR}/nikto_core.plugin");
my @F = ;
close(FI);
my @VERS = grep(/^#VERSION/, @F);
$VARIABLES{'core_version'} = $VERS[0];
$VARIABLES{'core_version'} =~ s/\#VERSION,//;
chomp($VARIABLES{'core_version'});
$VARIABLES{'TEMPL_HCTR'} = 0;
# POSIX support for status?
$NIKTO{'POSIX'}{'support'} = 0;
if (!$CLI{'nointeractive'}) {
eval "use POSIX qw(:termios_h)";
if (!$@) {
$NIKTO{'SUPPORT'}{'POSIX'} = 1;
eval "use Time::HiRes qw(ualarm)";
if (!$@) {
$NIKTO{'POSIX'}{'support'} = 1;
$NIKTO{'POSIX'}{'fd_stdin'} = fileno(STDIN);
$NIKTO{'POSIX'}{'term'} = POSIX::Termios->new();
$NIKTO{'POSIX'}{'term'}->getattr($fd_stdin);
$NIKTO{'POSIX'}{'oterm'} = $NIKTO{'POSIX'}{'term'}->getlflag();
$NIKTO{'POSIX'}{'echo'} = ECHOE | ECHO | ECHOK | ICANON;
$NIKTO{'POSIX'}{'noecho'} = $oterm & ~$echo;
}
}
}
# see if we have Time::HiRes sleep support
if ($CLI{'pause'} > 0) {
my $notice = "";
eval "use Time::HiRes qw(sleep)";
if ($@ && ($CLI{'pause'} =~ /\./)) {
my $integer = int($CLI{'pause'});
$CLI{'pause'} =~ /\.(\d+)/;
if ($1 >= 5) { $integer++; }
$CLI{'pause'}=$integer;
if ($CLI{'pause'} <= 0 ) { $CLI{'pause'} = 1; } # don't sleep for 0!
nprint("-***** Pausing $CLI{'pause'} second(s) per request (rounded, as Time::HiRes is not available) *****");
}
else {
nprint("-***** Pausing $CLI{'pause'} second(s) per request *****");
}
}
# Default values
$COUNTERS{'totalrequests'} = 0;
$COUNTERS{'total_checks'} = 0;
$COUNTERS{'total_targets'} = 0;
return;
}
###############################################################################
sub sleeper {
if ($CLI{'pause'} <= 0) { return; }
sleep($CLI{'pause'});
}
###############################################################################
sub reset_term {
if (!$NIKTO{'POSIX'}{'support'}) { return; }
$NIKTO{'POSIX'}{'term'}->setlflag($NIKTO{'POSIX'}{'oterm'});
$NIKTO{'POSIX'}{'support'} = 0;
}
###############################################################################
sub safe_quit {
$mark->{'end_time'} = time();
report_host_end($mark);
report_summary($mark);
report_close($mark);
reset_term();
exit(1);
}
###############################################################################
sub check_input {
my $key = readkey();
if ($key eq '') { return; }
lc($key);
if ($key eq ' ') {
status_report();
}
elsif ($key eq 'v') {
if ($OUTPUT{'verbose'}) { $OUTPUT{'verbose'} = 0; }
else { $OUTPUT{'verbose'} = 1; }
}
elsif ($key eq 'd') {
if ($OUTPUT{'debug'}) { $OUTPUT{'debug'} = 0; }
else { $OUTPUT{'debug'} = 1; }
}
elsif ($key eq 'e') {
if ($OUTPUT{'errors'}) { $OUTPUT{'errors'} = 0; }
else { $OUTPUT{'errors'} = 1; }
}
elsif ($key eq 'p') {
if ($OUTPUT{'progress'}) { $OUTPUT{'progress'} = 0; }
else { $OUTPUT{'progress'} = 1; }
}
elsif ($key eq 'r') {
if ($OUTPUT{'show_redirects'}) { $OUTPUT{'show_redirects'} = 0; }
else { $OUTPUT{'show_redirects'} = 1; }
}
elsif ($key eq 'c') {
if ($OUTPUT{'show_cookies'}) { $OUTPUT{'show_cookies'} = 0; }
else { $OUTPUT{'show_cookies'} = 1; }
}
elsif ($key eq 'o') {
if ($OUTPUT{'show_ok'}) { $OUTPUT{'show_ok'} = 0; }
else { $OUTPUT{'show_ok'} = 1; }
}
elsif ($key eq 'a') {
if ($OUTPUT{'show_auth'}) { $OUTPUT{'show_auth'} = 0; }
else { $OUTPUT{'show_auth'} = 1; }
}
elsif (($key eq 'q') || (ord($key) eq 3)) {
safe_quit();
}
elsif ($key eq 'P') {
nprint("- Pausing--press P to resume.");
while (readkey() ne 'P') { }
nprint("- Resuming.");
}
elsif ($key eq 'N') {
nprint("- Terminating host scan.");
return 'term';
}
return;
}
###############################################################################
sub readkey {
if (!$NIKTO{'POSIX'}{'support'}) { return; }
my $key;
$NIKTO{'POSIX'}{'term'}->setlflag($NIKTO{'POSIX'}{'noecho'});
$NIKTO{'POSIX'}{'term'}->setattr($NIKTO{'POSIX'}{'fd_stdin'}, TCSANOW);
eval {
local $SIG{ALRM} = sub { die; };
ualarm(1_000);
sysread(STDIN, $key, 1);
ualarm(0);
};
$NIKTO{'POSIX'}{'term'}->setlflag($NIKTO{'POSIX'}{'oterm'});
$NIKTO{'POSIX'}{'term'}->setattr($NIKTO{'POSIX'}{'fd_stdin'}, TCSANOW);
return $key;
}
###############################################################################
sub resolve {
my $ident = $_[0] || return;
my ($name, $ip, $dn) = "";
if (($request{'whisker'}->{'proxy_host'} ne '') && $CLI{'useproxy'}) {
$name = $ident;
$ip = $name;
return $name, $ip, $name;
}
# ident is name, lookup IP
if ($ident =~ /[^0-9\.]/) # not an IP, assume name
{
if ($CLI{'skiplookup'}) {
print("+ ERROR: -skiplookup set, but given name\n");
exit;
}
$ip = gethostbyname($ident);
# can't resolve name to IP
if ($ip eq "") {
nprint("+ ERROR: Cannot resolve hostname '$ident'\n");
return;
}
else {
use IO::Socket;
$ip = inet_ntoa($ip);
if ($ip !~ /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/) {
nprint("+ ERROR: Invalid IP '$ip'\n\n");
return;
}
$name = $ident;
}
}
else # ident is IP, lookup name
{
if ($ident !~ /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/) {
nprint("+ ERROR: Invalid IP '$ident'\n\n");
return;
}
$ip = $ident;
if (!$CLI{'skiplookup'}) {
use IO::Socket;
my $temp_ip = inet_aton($ip);
$name = gethostbyaddr($temp_ip, AF_INET);
# check reverse dns to avoid an inet_aton error
my $rdnsip = gethostbyname($name);
if ($rdnsip ne "") {
$rdnsip = inet_ntoa($rdnsip);
if ($ip ne $rdnsip) { $name = $ip; } # Reverse DNS does not match
}
else { $name = $ip; } # Reverse DNS does not exist
}
if ($name eq "") { $name = $ip; }
}
# set displayname -- name takes precedence
if ($name ne "") { $dn = $name; }
else { $dn = $ip; }
return $name, $ip, $dn;
}
###############################################################################
sub set_targets {
my ($hostlist, $portlist, $ssl, $root) = @_;
my $host_ctr = 1;
my @hosts = split(/,/, $hostlist);
my @ports = split(/,/, $portlist) if defined $portlist;
my (@checkhosts, @results, @marks);
my $defaultport = ($ssl) ? 443 : 80;
# Check for old style portlist and expand
my @newports;
foreach my $port (@ports) {
if ($port =~ /-/) {
my ($start, $end);
my @temp = split(/-/, $port);
$start = $temp[0];
$end = $temp[1];
if ($start eq "") { $start = 0; }
if ($end eq "") { $end = 65535; }
if ($start > $end) {
nprint("+ ERROR port range $port doesn't make sense - assuming 80/tcp");
next;
}
for (my $i = $start ; $i <= $end ; $i++) {
push(@newports, $i);
}
}
else {
push(@newports, $port);
}
}
@ports = @newports;
nprint("- Getting targets", "v");
if (scalar(@ports) == 1) {
<<<<<<< .mine
# Only one port is set, set as the default port
=======
# Only one port is set, assume that as the default port
>>>>>>> .r620
$defaultport = $ports[0];
}
# check whether it's a file or an entry
foreach my $host (@hosts) {
if (-e $host || $host eq "-") {
@results = parse_hostfile($host);
push(@checkhosts, @results);
}
else {
push(@checkhosts, $host);
}
}
# Now parse the list of checkhosts
foreach my $host (@checkhosts) {
my $defhost;
my $defport;
$host =~ s/\s+//g;
if (!defined $host) { next; }
print "host:$host\n";
my $markhash = {};
if ($root ne '') {
$markhash->{'root'} = $root;
nprint("- Added -root value of '$root' from CLI", "v");
}
# is it a URL?
if ($host =~ /^https?:\/\//) {
my @hostdata = LW2::uri_split($host);
$defhost = $hostdata[2];
$defport = $hostdata[3];
if (($hostdata[0] ne '/') && ($hostdata[0] ne '') && ($root eq '')) {
$markhash->{'root'} = $hostdata[0];
nprint("- Added -root value of '$hostdata[0]' from URI", "v");
}
}
else {
my @h = split(/\:|\,/, $host);
$defhost = $h[0];
$defport = $h[1];
}
# Now skip through all ports if port hasn't been added
if ($defport eq "" && scalar(@ports) > 0) {
foreach $port (@ports) {
print "port:$port\n";
$markhash->{'ident'} = $defhost;
$markhash->{'port'} = $port;
nprint("- Target:$markhash->{'ident'} port:$markhash->{'port'}", "v", $markhash);
nprint("- Target:$markhash->{'ident'} port:$markhash->{'port'}", "", $markhash);
push(@marks, $markhash);
print LW2::dump('mark -1 ', \@marks);
}
}
else {
if ($defport eq "") {
$defport = $defaultport;
}
$markhash->{'ident'} = $defhost;
$markhash->{'port'} = $defport;
nprint("- Target:$markhash->{'ident'} port:$markhash->{'port'}", "v", $markhash);
push(@marks, $markhash);
}
}
print LW2::dump('mark', \@marks);
return @marks;
}
###############################################################################
sub parse_hostfile {
my ($file) = @_;
my (@results, $hostdesc, $nmap);
$nmap = 0;
open(IN, $file) || die print STDERR "+ ERROR: Cannot open '$file':$@\n";
while () {
my $found = 0;
# Check whether this is a greppable nmap file
chomp;
if (/^# Nmap [0-9.]* scan initiated/) {
$nmap = 1;
}
s/\#.*$//;
if ($_ eq "") { next; }
# Parse for nmap files
if ($nmap) {
if (($_ !~ /Host/) || ($_ !~ /Ports/) || ($_ !~ /open/) || ($_ !~ /http/i)) { next; }
# Get the host name
my @line = split(/ /);
$_ =~ /\(([^\)]+)/;
$hostdesc = ($1 ne "") ? $1 : $line[1];
# Parse the ports list from:
# Host: 1.0.0.0 () Ports: 80/open/tcp//http///, 8000/open/tcp//http-alt///
for (my $i = 3 ; $i <= $#line ; $i++) {
if (($line[$i] !~ /open\/tcp/) || ($line[$i] !~ /http/)) { next; }
$line[$i] =~ /^(\d+)\//;
push(@results, $hostdesc . ":" . $1);
}
}
else {
# just add it to the list
push(@results, $_);
}
}
close(IN);
return (@results);
}
###############################################################################
sub load_databases {
my @dbs = qw/db_404_strings db_outdated db_tests db_variables db_content_search/;
my $prefix = $_[0] || "";
# verify required files
for my $file (@dbs) {
if (!-r "$CONFIGFILE{PLUGINDIR}/$file") {
die nprint("+ ERROR: Can't find/read required file \"$CONFIGFILE{PLUGINDIR}/$file\"");
}
}
for my $file (@dbs) {
my $filename = $CONFIGFILE{PLUGINDIR} . "/" . $prefix . $file;
if (!-r $filename) { next; }
open(IN, "<$filename") || die nprint("+ ERROR: Can't open \"$filename\":$!\n");
# db_tests
if ($file eq 'db_tests') { push(@DBFILE, ); next; }
# all the other files require per-line processing
else {
my @file;
# Cleanup
while () {
chomp;
$_ =~ s/#.*$//;
$_ =~ s/\s+$//;
$_ =~ s/^\s+//;
if ($_ ne "") { push(@file, $_); }
}
# db_variables
if ($file eq 'db_variables') {
foreach my $l (@file) {
if ($l =~ /^@/) {
my @temp = split(/=/, $l);
$VARIABLES{ $temp[0] } .= "$temp[1]";
}
}
}
# db_404_strings
elsif ($file eq 'db_404_strings') {
foreach my $l (@file) {
$l = validate_and_fix_regex($l);
$VARIABLES->{'ERRSTRINGS'}->{$l} = 1;
}
}
# db_content_search
elsif ($file eq 'db_content_search') {
foreach my $l (@file) {
my @T = parse_csv($l);
$CONTENTSEARCH{ $T[0] }{'osvdb'} = $T[1];
$CONTENTSEARCH{ $T[0] }{'string'} = validate_and_fix_regex($T[2]);
$CONTENTSEARCH{ $T[0] }{'message'} = $T[3];
}
}
# db_outdated
elsif ($file eq 'db_outdated') {
foreach my $l (@file) {
my @T = parse_csv($l);
next if $T[1] eq '';
$T[1] = validate_and_fix_regex($T[1]);
$OVERS{ $T[1] }{ $T[2] } = $T[3];
$OVERS{ $T[1] }{'tid'} = $T[0];
}
}
close(IN);
}
}
return;
}
###############################################################################
sub check_dbs {
my @dbs =
qw/db_headers db_httpoptions db_multiple_index db_server_msgs db_subdomains db_favicon db_embedded db_404_strings db_outdated db_realms db_tests db_variables db_content_search/;
my $prefix = $_[0];
if (($prefix eq "") || ($prefix eq "dbcheck")) {
$prefix=""; # for options from Get::Opt
nprint("\n-->\tNikto Databases");
}
elsif ($prefix eq "u") {
nprint("\n-->\tUser Databases");
}
for my $file (@dbs) {
my $filename = $CONFIGFILE{PLUGINDIR} . "/" . $prefix . $file;
if (!-r $filename) {
nprint("+ ERROR: Unable to read \"$filename\"");
next;
}
open(IN, "<$filename") || die nprint("+ ERROR: Can't open \"$filename\":$!\n");
nprint("Syntax Check: $filename");
if ($file eq 'db_outdated') {
foreach $line () {
$line =~ s/^\s+//;
if ($line =~ /^\#/) { next; }
chomp($line);
if ($line eq "") { next; }
my @L = parse_csv($line);
if ($#L ne 3) { nprint("\t+ ERROR: Invalid syntax ($#L): $line"); next; }
$ENTRIES{"$L[0]"}++;
}
foreach $entry (keys %ENTRIES) {
if ($ENTRIES{$entry} > 1) {
nprint("\t+ ERROR: Duplicate ($ENTRIES{$entry}): $entry");
}
}
nprint("\t" . keys(%ENTRIES) . " entries");
}
elsif ($file eq 'db_tests') {
my %ENTRIES;
foreach my $line () {
if ($line !~ /^\"/) { next; }
my @L = parse_csv($line);
if (($L[4] !~ /(GET|POST|TRACE|TRACK|OPTIONS|SEARCH|INDEX)/i) && ($L[0] ne '006433')) {
nprint("\t+ ERROR: Possibly invalid method: $L[4] on ($line)");
}
if ($L[5] eq "") { nprint("\t+ ERROR: blank conditional: $line"); next; }
if ($line !~ /^\".*\",\".*\",\".*\",\".*\",\".*\"/) {
nprint("\t+ ERROR: Invalid syntax ($#L): $line");
next;
}
if ($line !~ /^(\".*\",){11}\".*\"/) {
nprint("\t+ ERROR: Invalid syntax ($#L): $line");
next;
}
if (($L[3] =~ /^\@CG/) && ($L[3] !~ /^\@CGIDIRS/)) {
nprint("\t+ ERROR: Possible \@CGIDIRS misspelling: $line");
}
if ($L[1] =~ /[^0-9]/) { nprint("\t+ ERROR: Invalid OSVDB ID: $line"); }
$ENTRIES{"$L[3],$L[4],$L[5],$L[6],$L[7],$L[8],$L[9],$L[11],$L[12]"}++;
if ((count_fields($line, 1) ne 12) && (count_fields($line) ne '')) {
nprint("\t+ ERROR: Invalid syntax: $line");
}
for (my $i=5;$i<=9;$i++) {
my ($result, $bad) = validate_and_fix_regex($L[$i], 1);
if ($bad) { nprint("\t+ ERROR: Invalid regex in field $i: \"$L[$i]\""); }
}
}
foreach $entry (keys %ENTRIES) {
if ($ENTRIES{$entry} > 1) {
nprint("\t+ ERROR: Duplicate ($ENTRIES{$entry}): $entry");
}
}
nprint("\t" . keys(%ENTRIES) . " entries");
}
elsif ($file eq 'db_variables') {
my $ctr = 0;
foreach $line () {
if ($line !~ /^\@/) { next; }
if ($line !~ /^\@.+\=.+$/i) { nprint("\t+ ERROR: Invalid syntax: $line"); }
$ctr++;
}
nprint("\t$ctr entries");
}
elsif ($file eq 'db_404_strings') {
my $ctr = 1;
foreach $line () {
chomp($line);
$line =~ s/\#.*$//;
next if $line eq '';
my ($result, $bad) = validate_and_fix_regex($line, 1);
if ($bad) { nprint("\t+ ERROR: Invalid regex on line $ctr: \"$line\""); }
$ctr++;
}
$ctr--;
nprint("\t$ctr entries");
}
elsif ($file eq 'db_headers') {
my $ctr = 0;
foreach $line () {
if ((count_fields($line) ne 0) && (count_fields($line) ne '')) {
nprint("\t+ ERROR: Invalid syntax: $line");
}
$ctr++;
}
nprint("\t$ctr entries");
}
elsif ($file eq 'db_multiple_index') {
my $ctr = 0;
foreach $line () {
if ((count_fields($line) ne 0) && (count_fields($line) ne '')) {
nprint("\t+ ERROR: Invalid syntax: $line");
}
$ctr++;
}
nprint("\t$ctr entries");
}
else {
# It's a file of standard DB type, we can do this intelligently
my (@headers, @regex_fields);
my $ctr = 0, $fields = 0;
foreach $line () {
# first, grab the headers
if ($fields == 0) {
$line =~ s/\#.*//;
next if ($line eq "");
@headers = parse_csv($line);
$fields = $#headers;
# check regex fields for syntax
for (my $i=0; $i<=$#headers; $i++) {
if (($headers[$i] eq 'match') || ($headers[$i] eq 'matchstring') || ($headers[$i] eq 'server')) {
push(@regex_fields, $i);
}
}
next;
}
if ($regex_fields[0] ne '') {
my @entry=parse_csv($line);
foreach my $f (@regex_fields) {
my ($result, $bad) = validate_and_fix_regex($entry[$f], 1);
if ($bad) { nprint("\t+ ERROR: Invalid regex in field $f on line $ctr: \"$line\""); }
}
}
if ( (count_fields($line, 1) != $fields - 1)
&& (count_fields($line) ne '')) {
nprint("\t+ ERROR: Invalid syntax: $line");
}
$ctr++;
}
nprint("\t$ctr entries");
}
close(IN);
}
if ($_[0] eq "") { check_dbs('u'); } # do this once
nprint("\n");
exit;
}
###############################################################################
sub count_fields {
my $line = $_[0] || return;
my $checkid = $_[1] || 0;
if ($line !~ /^\"/) { return; }
chomp($line);
$line =~ s/\s+$//;
if ($line eq '') { return; }
my @L = parse_csv($line);
if ($checkid && ($L[0] ne 'nikto_id') && (($L[0] =~ /[^0-9]/) || ($L[0] eq ''))) { return -1; }
return $#L;
}
###############################################################################
sub port_check {
my ($hostname, $ip, $port) = @_;
my (%headers);
my $m = {};
# Check SKIPPORTS
if ($CONFIGFILE{'SKIPPORTS'} =~ /\b$port\b/) {
nprint("+ ERROR: SKIPPORTS (nikto.conf) contains $port -- not checking");
return 0;
}
$m->{hostname} = $hostname;
$m->{ip} = $ip;
$m->{port} = $port;
$m->{ssl} = 0;
my @checktypes = ('HTTP', 'HTTPS');
if ($CLI{'ssl'}) { shift(@checktypes); }
if ($CLI{'nossl'}) { pop(@checktypes); }
foreach my $method (split(/ /, $CONFIGFILE{'CHECKMETHODS'})) {
$request{'whisker'}->{'method'} = $method;
foreach my $checkssl (@checktypes) {
nprint("- Checking for $checkssl on port " . ($hostname||$ip) . ":$port, using $method", "v", $m);
$m->{ssl} = ($checkssl eq "HTTP") ? 0 : 1;
proxy_check($m);
my ($res, $content) =
nfetch($m, "/", $method, "", \%headers,
{ noerror => 1, noprefetch => 1, nopostfetch => 1 },
"Port Check");
if ($res) {
# this will fix for some Apaches that are smart enough to answer non ssl reqs on an ssl server
if (defined $content
&& $content =~ /speaking plain HTTP to an SSL/) {
dump_var("Result Hash", \%result);
next;
}
nprint("- $checkssl Server found: " . ($hostname||$ip) . ":$port \t$headers{server}", "d", $m);
return $m->{ssl} + 1;
}
}
}
nprint("+ No web server found on " . ($hostname||$ip) . ":$port");
nprint("---------------------------------------------------------------------------");
return 0;
}
###############################################################################
sub load_plugins {
my @pluginlist = dirlist("$CONFIGFILE{PLUGINDIR}", '\.plugin$');
my @all_names;
# populate plugin macros
$CONFIGFILE{'@@NONE'} = "";
# Check if running plugins is NONE - if so, don't bother initalising
# plugins
if ($CLI{'plugins'} eq '@@NONE') {
return;
}
foreach my $plugin (@pluginlist) {
my $plugin_name = $plugin;
$plugin_name =~ s/\.plugin$//;
my $plugin_init = $plugin_name . "_init";
eval { require "$CONFIGFILE{PLUGINDIR}/$plugin"; };
if ($@) {
nprint("- Could not load or parse plugin: $plugin_name\n Error: ");
warn $@;
nprint("- The plugin could not be run.");
}
else {
nprint("- Initialising plugin $plugin_name", "v");
# Call initialisation method
if (defined &$plugin_init) {
my $pluginhash = &$plugin_init;
# Add default weights if not already assigned
while (my ($hook, $hook_params) = each(%{ $pluginhash->{'hooks'} })) {
$hook_params->{$hook}->{'weight'} = 50
unless (defined $hook_params->{$hook}->{'weight'});
}
$pluginhash->{report_weight} = 50 unless (defined $pluginhash->{report_weight});
push(@all_names, $pluginhash->{name});
push(@PLUGINS, $pluginhash);
nprint("- Loaded \"$pluginhash->{full_name}\" plugin.", "v");
}
}
}
$CONFIGFILE{'@@ALL'} = join(';', @all_names);
my @torun = split(/;/, expand_pluginlist($CLI{'plugins'}, 0));
# Second pass to ensure that @@ALL is configured
foreach my $plugin (@PLUGINS) {
# Check that the plugin is to be run
# Perl doesn't allow us to use "in", pity
foreach my $torun_plugin (@torun) {
next if ($torun_plugin eq "");
# split up into parameters
my $name = my $suffix = $torun_plugin;
if ($torun_plugin =~ /\(/) {
$name =~ s/(.*)(\(.*\))/$1/;
$suffix =~ s/(.*)(\(.*\))/$2/;
}
else {
$name = $torun_plugin;
$suffix = "";
}
if ($plugin->{'name'} =~ /$name/i) {
$plugin->{'run'} = 1;
# Create parameters
if ($suffix ne "") {
my $parameters = {};
$suffix =~ s/(\()(.*[^\)])(\)?)/$2/;
foreach my $parameter (split(/,/, $suffix)) {
if ($parameter !~ /:/) {
$parameters->{$parameter} = 1;
}
else {
my $key = my $value = $parameter;
$key =~ s/:.*//;
$value =~ s/.*://;
$parameters->{$key} = $value;
}
}
$plugin->{'parameters'} = $parameters;
}
}
}
}
# For speed in future, create a hash of active plugins ordered by plugin weight, for
# each type of plugin
# first build a temporary hash of all known hooks
my %hooks;
foreach my $plugin (@PLUGINS) {
foreach my $hook (keys(%{ $plugin->{'hooks'} })) {
$hooks{$hook} = ();
}
}
# now we know the types of hooks, look through each plugin for them
foreach my $hook (keys(%hooks)) {
foreach my $plugin (@PLUGINS) {
if ($plugin->{'run'} == 1) {
if (defined $plugin->{'hooks'}->{$hook}->{'method'}) {
push(@{ $hooks{$hook} }, $plugin);
}
}
}
}
# Now sort each array by weight
foreach my $hook (keys(%hooks)) {
my @sorted =
sort { $a->{'hooks'}->{$hook}->{'weight'} <=> $b->{'hooks'}->{$hook}->{'weight'} }
@{ $hooks{$hook} };
$PLUGINORDER{$hook} = \@sorted;
}
}
###############################################################################
sub run_hooks {
my ($mark, $type, $request, $result) = @_;
return if $mark->{'terminate'};
foreach my $plugin (@{ $PLUGINORDER{$type} }) {
return if $mark->{'terminate'};
my ($run) = 1;
# first check for conditionals
my $condition = $plugin->{'hooks'}->{$type}->{'cond'};
if (defined $plugin->{'hooks'}->{$type}->{'cond'}) {
# Evaluate condition
$run = eval($condition);
}
if (!$run) { next; }
my $oldverbose = $OUTPUT{'verbose'};
my $olddebug = $OUTPUT{'debug'};
my $olderrors = $OUTPUT{'errors'};
nprint("- Running $type for \"$plugin->{'full_name'}\" plugin", "v")
unless ($type eq "prefetch" || $type eq "postfetch");
if (defined $plugin->{'parameters'}->{'verbose'}
&& $plugin->{'parameters'}->{'verbose'} == 1) {
$OUTPUT{'verbose'} = 1;
}
if (defined $plugin->{'parameters'}->{'debug'}
&& $plugin->{'parameters'}->{'debug'} == 1) {
$OUTPUT{'debug'} = 1;
}
unless ($type eq "prefetch" || $type eq "postfetch") {
$NIKTO{'current_plugin'} = $plugin->{'full_name'};
}
&{ $plugin->{'hooks'}->{$type}->{'method'} }($mark, $plugin->{'parameters'}, $request,
$result);
$OUTPUT{'verbose'} = $oldverbose;
$OUTPUT{'debug'} = $olddebug;
$OUTPUT{'errors'} = $olderrors;
}
return $request, $result;
}
###############################################################################
sub report_head {
my ($format, $file) = @_;
nprint("- Opening reports ($format, $file)", "v");
# For tuning set up a list of report methods, formats and handles
# This is a frig until I can think of a better way of achieving it
foreach my $i (1 .. 100) {
foreach my $plugin (@PLUGINS) {
if ($plugin->{run} && defined $plugin->{report_item} && $plugin->{report_weight} == $i)
{
my $run = 1;
# first check for conditionals
if (defined $plugin->{report_format}) {
# Evaluate condition
$run = ($format eq $plugin->{report_format});
}
if ($run) {
nprint("- Opening report for \"$plugin->{full_name}\" plugin", "v");
my $handle;
if (defined $plugin->{report_head}) {
$handle = &{ $plugin->{report_head} }($file);
}
# Now store this
my $report_entry = { host_start => $plugin->{report_host_start},
host_end => $plugin->{report_host_end},
item => $plugin->{report_item},
close => $plugin->{report_close},
summary => $plugin->{report_summary},
handle => $handle,
};
push(@REPORTS, $report_entry);
}
}
}
}
return;
}
###############################################################################
sub report_host_start {
my ($mark) = @_;
# Go through all reporting modules
foreach my $reporter (@REPORTS) {
if (defined $reporter->{host_start}) {
&{ $reporter->{host_start} }($reporter->{handle}, $mark);
}
}
}
###############################################################################
sub report_host_end {
my ($mark) = @_;
# Go through all reporting modules
foreach my $reporter (@REPORTS) {
if (defined $reporter->{host_end}) {
&{ $reporter->{host_end} }($reporter->{handle}, $mark);
}
}
}
###############################################################################
sub report_summary {
my ($mark) = @_;
# Go through all reporting modules
foreach my $reporter (@REPORTS) {
if (defined $reporter->{summary}) {
&{ $reporter->{summary} }($reporter->{handle}, $mark);
}
}
}
###############################################################################
sub report_item {
my ($mark, $item) = @_;
# Go through all reporting modules
foreach my $reporter (@REPORTS) {
if (defined $reporter->{item}) {
&{ $reporter->{item} }($reporter->{handle}, $mark, $item);
}
}
}
###############################################################################
sub report_close {
# Go through all reporting modules
foreach my $reporter (@REPORTS) {
if (defined $reporter->{close}) {
&{ $reporter->{close} }($reporter->{handle});
}
}
}
###############################################################################
sub check_updates {
LW2::http_init_request(\%request);
my (%REMOTE, %LOCAL, @DBTOGET) = ();
my ($pluginmsg, $remotemsg) = "";
my $code_updates = 0;
my $serverdir = "/nikto/UPDATES/$VARIABLES{'version'}";
my $server = "CIRT.net";
# set up our mark
my %mark = ('ident' => 'www.cirt.net',
'ssl' => 0,
'port' => 80
);
for (my $i = 0 ; $i <= $#ARGV ; $i++) {
if (($ARGV[$i] eq "-u") || ($ARGV[$i] eq "-useproxy")) {
$CLI{'useproxy'} = 1;
if (($CONFIGFILE{PROXYPORT} ne '') && ($CONFIGFILE{PROXYHOST} ne '')) {
$request{'whisker'}->{'proxy_host'} = $CONFIGFILE{PROXYHOST};
$request{'whisker'}->{'proxy_port'} = $CONFIGFILE{PROXYPORT};
}
proxy_check();
last;
}
}
($mark{'hostname'}, $mark{'ip'}, $mark{'display_name'}) = resolve('www.cirt.net');
# retrieve versions file
my ($RES, $CONTENT) = nfetch(\%mark, "$serverdir/versions.txt", "GET");
if ($RES eq 407) {
if ($CONFIGFILE{'PROXYUSER'} eq "") {
$CONFIGFILE{'PROXYUSER'} = read_data("Proxy ID: ", "");
$CONFIGFILE{'PROXYPASS'} = read_data("Proxy Pass: ", "noecho");
}
# and try again
($RES, $CONTENT) = nfetch(\%mark, "$serverdir/versions.txt", "GET");
}
if ($RES eq "") {
($RES, $CONTENT) = nfetch(\%mark, "$serverdir/versions.txt", "GET");
}
if ($RES ne 200) {
nprint("+ ERROR ($RES): Unable to get $mark{'hostname'}$serverdir/versions.txt");
exit;
}
# make hash
for (split(/\n/, $CONTENT)) {
my @l = parse_csv($_);
if ($_ =~ /^msg/) {
$remotemsg = "$l[1]";
next;
}
$REMOTE{ $l[0] } = $l[1];
}
# get local versions of plugins/dbs
my @NIKTOFILES = dirlist($CONFIGFILE{PLUGINDIR}, "");
foreach my $file (@NIKTOFILES) {
my $v = "";
open(LOCAL, "<$CONFIGFILE{PLUGINDIR}/$file")
|| print STDERR "+ ERROR: Unable to open '$CONFIGFILE{PLUGINDIR}/$file' for read: $@\n";
my @l = ;
close(LOCAL);
my @VERS = grep(/^#VERSION/, @l);
chomp($VERS[0]);
$LOCAL{$file} = (parse_csv($VERS[0]))[1];
}
# check main nikto versions
foreach my $remotefile (keys %REMOTE) {
my @l = split(/\./, $LOCAL{$remotefile});
my @r = split(/\./, $REMOTE{$remotefile});
my $update = 0;
if ($LOCAL{$remotefile} eq '') { $update = 1; }
elsif ($r[0] > $l[0]) { $update = 1; }
elsif ($r[1] > $l[1]) { $update = 1; }
elsif ($r[2] > $l[2]) { $update = 1; }
if ($update) {
if ($remotefile eq "nikto") {
nprint
"+ Nikto has been updated to $REMOTE{$remotefile}, local copy is $VARIABLES{'version'}\n";
nprint
"+ No update has taken place. Please upgrade Nikto by visiting http://$server/\n";
if ($remotemsg ne "") { nprint("+ $server message: $remotemsg"); }
exit;
}
push(@DBTOGET, $remotefile);
if ($remotefile !~ /^db_/) { $code_updates = 1; }
}
}
# replace local files if updated
foreach my $toget (@DBTOGET) {
nprint("+ Retrieving '$toget'");
my ($RES, $CONTENT) = nfetch(\%mark, "$serverdir/$toget", "GET");
if ($RES ne 200) {
nprint("+ ERROR: Unable to get $server$serverdir/$toget");
exit;
}
if ($CONTENT ne "") {
open(OUT, ">$CONFIGFILE{PLUGINDIR}/$toget")
|| die print STDERR
"+ ERROR: Unable to open '$CONFIGFILE{PLUGINDIR}/$toget' for write: $@\n";
print OUT $CONTENT;
close(OUT);
}
}
# CHANGES file
if ($code_updates) {
nprint("+ Retrieving 'CHANGES.txt'");
my ($RES, $CONTENT) = nfetch(\%mark, "$serverdir/CHANGES.txt", "GET");
if (($CONTENT ne "") && ($RES eq 200)) {
open(OUT, ">$CONFIGFILE{DOCUMENTDIR}/CHANGES.txt")
|| die print STDERR
"+ ERROR: Unable to open '$CONFIGFILE{DOCUMENTDIR}/CHANGES.txt' for write: $@\n";
print OUT $CONTENT;
close(OUT);
}
}
if ($#DBTOGET < 0) { nprint("+ No updates required."); }
if ($remotemsg ne "") { nprint("+ $server message: $remotemsg"); }
exit;
}
###############################################################################
# portions of this sub were taken from the Term::ReadPassword module.
# It has been modified to not require Term::ReadLine, but still requires
# POSIX::Termios if it's a POSIX machine
###############################################################################
sub read_data {
if ($CONFIGFILE{PROMPTS} eq 'no') { return; }
my ($prompt, $mode, $POSIX) = @_;
my $input;
my %SPECIAL = ("\x03" => 'INT', # Control-C, Interrupt
"\x08" => 'DEL', # Backspace
"\x7f" => 'DEL', # Delete
"\x0d" => 'ENT', # CR, Enter
"\x0a" => 'ENT', # LF, Enter
);
if ($NIKTO{'POSIX'}{'support'}) {
local (*TTY, *TTYOUT);
open TTY, "<&STDIN" or return;
open TTYOUT, ">>&STDOUT" or return;
# Don't buffer it!
select((select(TTYOUT), $| = 1)[0]);
print TTYOUT $prompt;
# Remember where everything was
my $fd_tty = fileno(TTY);
my $term = POSIX::Termios->new();
$term->getattr($fd_tty);
my $original_flags = $term->getlflag();
if ($mode eq "noecho") {
my $new_flags = $original_flags & ~(ISIG | ECHO | ICANON);
$term->setlflag($new_flags);
}
$term->setattr($fd_tty, TCSAFLUSH);
KEYSTROKE:
while (1) {
my $new_keys = '';
my $count = sysread(TTY, $new_keys, 99);
if ($count) {
for my $new_key (split //, $new_keys) {
if (my $meaning = $SPECIAL{$new_key}) {
if ($meaning eq 'ENT') { last KEYSTROKE; }
elsif ($meaning eq 'DEL') { chop $input; }
elsif ($meaning eq 'INT') { last KEYSTROKE; }
else { $input .= $new_key; }
}
else { $input .= $new_key; }
}
}
else { last KEYSTROKE; }
}
# Done with waiting for input. Let's not leave the cursor sitting
# there, after the prompt.
print TTY "\n";
nprint("\n");
# Let's put everything back where we found it.
$term->setlflag($original_flags);
$term->setattr($fd_tty, TCSAFLUSH);
close(TTY);
close(TTYOUT);
}
else # non-POSIX
{
print $prompt;
$input = ;
chomp($input);
}
return $input;
}
###############################################################################
sub proxy_check {
my ($mark) = @_;
if (($request{'whisker'}->{'proxy_host'} ne '') && ($CLI{'useproxy'})) # proxy is set up
{
LW2::http_close(\%request); # force-close any old connections
setup_hash(\%request, $mark, "Proxy Check");
$request{'whisker'}->{'method'} = "GET";
$request{'whisker'}->{'uri'} = "/";
LW2::http_fixup_request(\%request);
sleeper();
LW2::http_do_request_timeout(\%request, \%result);
$COUNTERS{'totalrequests'}++;
dump_var("Request Hash", \%request);
dump_var("Result Hash", \%result);
# First check that we can connect to the proxy
if (exists $result{'whisker'}{'error'}) {
if ($result{'whisker'}{'error'} =~ /Transport endpoint is not connected/) {
nprint("+ ERROR: Could not connect to the defined proxy $CONFIGFILE{PROXYHOST}");
}
nprint("+ ERROR: Proxy error: $result{'whisker'}{'error'}");
exit 1;
}
if ($result{'whisker'}{'code'} eq "407") # proxy requires auth
{
# have id/pw?
if ($CONFIGFILE{PROXYUSER} eq "") {
$CONFIGFILE{PROXYUSER} = read_data("Proxy ID: ", "");
$CONFIGFILE{PROXYPASS} = read_data("Proxy Pass: ", "noecho");
}
if ($result{'proxy-authenticate'} !~ /Basic/i) {
my @x = split(/ /, $result{'proxy-authenticate'});
nprint(
"+ Proxy server uses '$x[0]' rather than 'Basic' authentication. $VARIABLES{'name'} $VARIABLES{'version'} can't do that."
);
exit;
}
# test it...
LW2::http_close(\%request); # force-close any old connections
LW2::auth_set("proxy-basic", \%request, $CONFIGFILE{PROXYUSER},
$CONFIGFILE{PROXYPASS}); # set auth
LW2::http_fixup_request(\%request);
sleeper();
LW2::http_do_request_timeout(\%request, \%result);
$COUNTERS{'totalrequests'}++;
dump_var("Request Hash", \%request);
dump_var("Result Hash", \%result);
if ($result{'proxy-authenticate'} ne "") {
my @pauthinfo = split(/ /, $result{'proxy-authenticate'});
my @pauthinfo2 = split(/=/, $result{'proxy-authenticate'});
$pauthinfo2[1] =~ s/^\"//;
$pauthinfo2[1] =~ s/\"$//;
nprint(
"+ Proxy requires authentication for '$pauthinfo[0]' realm '$pauthinfo2[1]', unable to authenticate."
);
exit;
}
else { nprint("- Successfully authenticated to proxy.", "v"); }
}
}
return;
}
###############################################################################
sub dirlist {
my $DIR = $_[0] || return;
my $PATTERN = $_[1] || "";
my @FILES_TMP = ();
opendir(DIRECTORY, $DIR) || die print STDERR "+ ERROR: Can't open directory '$DIR': $@";
foreach my $file (readdir(DIRECTORY)) {
if ($file =~ /^\./) { next; } # skip hidden files, '.' and '..'
if ($PATTERN ne "") {
if ($file =~ /$PATTERN/) { push(@FILES_TMP, $file); }
}
else { push(@FILES_TMP, $file); }
}
closedir(DIRECTORY);
return @FILES_TMP;
}
#######################################################################
sub dump_var {
return if !$OUTPUT{'debug'};
my $msg = $_[0];
my %hash_in = %{ $_[1] };
my $display = LW2::dump('', \%hash_in);
$display =~ s/^\$/'$msg'/;
if ($OUTPUT{'scrub'}) {
$display =~ s/'host' => '.*',/'host' => 'example.com',/g;
$display =~ s/'Host' => '.*'/'host' => 'example.com'/g;
}
nprint($display, "d");
return;
}
######################################################################
sub content_present {
my $result = FALSE;
my $res = $_[0];
# perform an extra check just in case the web server lies about finds
# basically assume that the value for a non-extension is the true
# code for "File not Found".
if ($res ne $FoF{'NONE'}{'response'}) {
foreach $found (split(' ', $VARIABLES{"\@HTTPFOUND"})) {
if ($res eq $found) {
$result = TRUE;
}
}
}
return $result;
}
#######################################################################
sub setup_hash {
my ($reqhash, $mark, $testid) = @_;
# Do the standard set up for the hash
LW2::http_init_request($reqhash);
$reqhash->{'whisker'}->{'ssl_save_info'} = 1;
$reqhash->{'whisker'}->{'keep-alive'} = 1;
$reqhash->{'whisker'}->{'lowercase_incoming_headers'} = 1;
$reqhash->{'whisker'}->{'timeout'} = $CLI{'timeout'};
if (defined $CLI{'evasion'}) {
$reqhash->{'whisker'}->{'encode_anti_ids'} = $CLI{'evasion'};
}
$reqhash->{'User-Agent'} = $VARIABLES{'useragent'};
$reqhash->{'User-Agent'} =~ s/\@TESTID/$testid/;
$reqhash->{'whisker'}->{'retry'} = 0;
$reqhash->{'whisker'}->{'host'} = $mark->{'hostname'} || $mark->{'ip'};
if ($mark->{'vhost'}) {
$request{'Host'} = $mark->{'vhost'};
}
$reqhash->{'whisker'}->{'port'} = $mark->{'port'};
$reqhash->{'whisker'}->{'ssl'} = $mark->{'ssl'};
# Proxy stuff
if (($CONFIGFILE{PROXYHOST} ne '') && ($CLI{'useproxy'})) {
$reqhash->{'whisker'}->{'proxy_host'} = $CONFIGFILE{'PROXYHOST'};
$reqhash->{'whisker'}->{'proxy_port'} = $CONFIGFILE{'PROXYPORT'};
if ($CONFIGFILE{'PROXYUSER'} ne '') {
LW2::auth_set("proxy-basic", $reqhash,
$CONFIGFILE{'PROXYUSER'},
$CONFIGFILE{'PROXYPASS'});
}
}
return $reqhash;
}
#######################################################################
sub cache_add {
if ((!defined $CLI{'nocache'}) && (!$flags_nocache)) {
my $method = shift;
my $code = shift;
my $content = shift;
my $uri = shift;
my $postdata = shift;
my $flags_nocache = shift;
my ($mark) = @_;
return if flags_nocache;
my $key =
LW2::md4( $mark->{'ip'}
. $mark->{'hostname'}
. $mark->{'port'}
. $mark->{'ssl'}
. $method
. $uri
. $postdata);
$CACHE{$key}{'method'} = $method;
$CACHE{$key}{'code'} = $code;
$CACHE{$key}{'content'} = $content;
}
}
#######################################################################
sub cache_fetch {
if ((!defined $CLI{'nocache'}) && (!$flags_nocache)) {
my $method = shift;
my $uri = shift;
my $postdata = shift;
my $flags_nocache = shift;
my ($mark) = @_;
return if flags_nocache;
my $key =
LW2::md4( $mark->{'ip'}
. $mark->{'hostname'}
. $mark->{'port'}
. $mark->{'ssl'}
. $method
. $uri
. $postdata);
if ($CACHE{$key}{'code'} ne '') {
return (1, $CACHE{$key}{'code'}, $CACHE{$key}{'content'});
}
else {
return 0;
}
}
return 0;
}
#######################################################################
sub nfetch {
my ($mark, $uri, $method, $data, $headers, $flags, $testid) = @_;
sleeper();
my (%request, %result);
setup_hash(\%request, $mark, $testid);
# check for keyboard input
if (($COUNTERS{'totalrequests'} % 10) == 0) {
if (check_input() eq 'term') { $mark->{'terminate'}=1; }
}
$request{'whisker'}->{'uri'} = $mark->{'root'} . $uri; # prepend -root option's value if set
$request{'whisker'}->{'method'} = $method;
if ($data ne "") {
$data =~ s/\\\"/\"/g;
$request{'whisker'}->{'data'} = $data;
}
# check for extra HTTP headers
if (defined $headers) {
# loop through the hash ref passed and add each header to request
while (my ($key, $value) = each(%$headers)) {
$request{$key} = $value;
}
}
# set cookies
if (defined($mark->{'cookiejar'})) {
LW2::cookie_write($mark->{'cookiejar'}, \%request, 1);
}
LW2::http_fixup_request(\%request) unless ($flags->{'noclean'});
# Run pre hooks
unless ($flags->{'noprefetch'}) {
(%$request, %$result) = run_hooks($mark, "prefetch", \%request, \%result);
}
# Check cache
my ($incache, $code, $content) =
cache_fetch($request{'whisker'}->{'method'}, $request{'whisker'}->{'uri'}, $data, $flags->{'nocache'}, $mark);
if ($incache) {
nprint("- Got $request{'whisker'}->{'uri'} from cache.", "d");
$result{'whisker'}->{'code'} = $code;
$result{'whisker'}->{'data'} = $content;
}
if (!$incache) {
LW2::http_do_request_timeout(\%request, \%result);
$COUNTERS{'totalrequests'}++;
# If we got an error, do 1 retry. This should be much more intelligent and configurable!
if (defined $result{'whisker'}->{'error'} || $result{'whisker'}{'code'} eq '') {
LW2::http_do_request_timeout(\%request, \%result);
$COUNTERS{'totalrequests'}++;
}
cache_add($request{'whisker'}->{'method'},
$result{'whisker'}->{'code'},
$result{'whisker'}->{'data'},
$request{'whisker'}->{'uri'}, $data, $flags->{'nocache'}, $mark);
if ($OUTPUT{'debug'}) {
dump_var("Request Hash", \%request);
dump_var("Result Hash", \%result);
}
# Snarf what we can from the whisker hash and put in mark
if (!exists $result{'whisker'}->{'error'}) {
if (!exists $mark->{'banner'}) {
$mark->{'banner'} = $result{'server'};
}
else {
# Check banner hasn't changed
if ( exists $result{'server'}
&& $mark->{'banner'} ne $result{'server'}
&& !exists $mark->{'bannerchanged'}) {
nprint(
"+ Server banner has changed from $mark->{banner} to $result{server}, this may suggest a WAF or load balancer is in place"
);
$mark->{'bannerchanged'} = 1;
}
}
if (!exists $mark->{'ssl_cipher'} && $mark->{'ssl'}) {
# Grab ssl details
$mark->{'ssl_cipher'} = $result{'whisker'}->{'ssl_cipher'};
$mark->{'ssl_cert_issuer'} = $result{'whisker'}->{'ssl_cert_issuer'};
$mark->{'ssl_cert_subject'} = $result{'whisker'}->{'ssl_cert_subject'};
}
}
}
nprint("- $result{'whisker'}{'code'} for $method:\t$request{'whisker'}->{'uri'}", "v");
# Check for errors to reduce false positives
if ((defined $result{'whisker'}->{'error'} || $result{'whisker'}{'code'} eq '')
&& !exists $flags->{'noerror'}) {
$mark->{'total_errors'}++;
nprint("+ ERROR: $request{'whisker'}->{'uri'} returned an error: $result{'whisker'}{'error'}\n", "e");
if (($result{'whisker'}->{'code'} eq 502) && ($CLI{'useproxy'})) {
nprint("+ ERROR: Revieved 502 'Bad Gateway' from proxy\n");
}
}
if ($OUTPUT{'show_cookies'} && (defined($result{'whisker'}->{'cookies'}))) {
foreach my $c (@{ $result{'whisker'}->{'cookies'} }) {
nprint("+ $request{'whisker'}->{'uri'} sent cookie: $c");
}
}
# If headers is defined, copy the whisker headers to the hash
if (defined $headers) {
# First clear the hash
foreach my $header (keys %$headers) {
delete($headers->{$header});
}
while (my ($key, $value) = each(%result)) {
if ($key ne "whisker" && $key ne "connection") {
$headers->{$key} = $value;
}
}
}
# Run post hooks
unless ($flags->{'nopostfetch'}) {
(%$request, %$result) = run_hooks($mark, "postfetch", \%request, \%result);
}
return $result{'whisker'}->{'code'}, $result{'whisker'}->{'data'},
$result{'whisker'}->{'error'};
}
#######################################################################
sub set_scan_items {
# load the tests
%TESTS = ();
$COUNTERS{total_checks}=0;
my @SKIPLIST = ();
if (defined $CONFIGFILE{SKIPIDS}) {
@SKIPLIST = split(/ /, $CONFIGFILE{SKIPIDS});
}
# now load checks
foreach my $line (@DBFILE) {
if ($line =~ /^\"/) # check
{
chomp($line);
my @item = parse_csv($line);
my $add = 1;
# check tuning options
if ((defined $CLI{'tuning'}) && (defined $item[2])) {
# Work out the required tuning from the CLI string
my $exclude = 0;
foreach my $tune (split(//, $CLI{'tuning'})) {
if ($tune eq "x") {
$exclude = 1;
next;
}
if ($exclude == 0) {
if ($item[2] !~ /$tune/) { $add = 0; }
next;
}
if ($exclude == 1) {
if ($item[2] =~ /$tune/) { $add = 0; }
}
}
}
# Skip list
foreach my $id (@SKIPLIST) {
if ($id eq $item[0]) { $add = 0; }
}
# RFI URL Defined?
if (($item[2] =~ /c/) && ($VARIABLES{'@RFIURL'} eq '')) {
$add = 0;
}
if ($add) {
my $ext = get_ext($item[3]);
$db_extensions{$ext} = 1;
# validate...
for (my $y = 5 ; $y <= 9 ; $y++) {
next if $item[$y] eq '';
$item[$y] =~ s/\\"/"/g; # quotes are only escaped for csv parsing
$item[$y]=validate_and_fix_regex($item[$y]);
}
$COUNTERS{total_checks}++;
$TESTS{ $item[0] }{'uri'} = $item[3];
$TESTS{ $item[0] }{'osvdb'} = $item[1];
$TESTS{ $item[0] }{'method'} = $item[4];
$TESTS{ $item[0] }{'match_1'} = $item[5];
$TESTS{ $item[0] }{'match_1_or'} = $item[6];
$TESTS{ $item[0] }{'match_1_and'} = $item[7];
$TESTS{ $item[0] }{'fail_1'} = $item[8];
$TESTS{ $item[0] }{'fail_2'} = $item[9];
$TESTS{ $item[0] }{'message'} = $item[10];
$TESTS{ $item[0] }{'data'} = $item[11];
$TESTS{ $item[0] }{'headers'} = $item[12];
}
}
}
undef @DBFILE; # this memory hog is no longer needed!
nprint("- $COUNTERS{'total_checks'} server checks loaded", "v");
if ($COUNTERS{'total_checks'} eq 0 && !defined $CLI{'tuning'}) {
nprint("+ Unable to load valid checks!");
exit;
}
return;
}
#######################################################################
sub max_test_id {
return (sort { $a <=> $b } keys %TESTS)[-1];
}
#######################################################################
sub parse_csv {
my $text = $_[0] || return;
my @new = ();
push(@new, $+) while $text =~ m{
"([^\"\\]*(?:\\.[^\"\\]*)*)",?
| ([^,]+),?
| ,
}gx;
push(@new, undef) if substr($text, -1, 1) eq ',';
return @new;
}
#######################################################################
sub version {
my @NIKTOFILES = dirlist($CONFIGFILE{PLUGINDIR}, "(^nikto|^db_)");
nprint($VARIABLES{'DIV'});
nprint("$VARIABLES{'name'} Versions");
nprint($VARIABLES{'DIV'});
nprint("File Version Last Mod");
nprint("----------------------------- -------- ----------");
nprint("Nikto main $VARIABLES{'version'}");
nprint("LibWhisker $LW2::VERSION");
foreach my $FILE (sort @NIKTOFILES) {
open(FI, "<$CONFIGFILE{PLUGINDIR}/$FILE")
|| die print STDERR "+ ERROR: Unable to open '$CONFIGFILE{PLUGINDIR}/$FILE': $!\n";
my @F = ;
close(FI);
my @VERS = grep(/^#VERSION/, @F);
my @MODS = grep(/^# \$Id:/, @F);
chomp($VERS[0]);
chomp($MODS[0]);
my @modification = split(/ /, $MODS[0]);
$VERS[0] =~ s/^#VERSION,//;
my $ws1 = (35 - length($FILE));
my $ws2 = (13 - length($VERS[0]));
nprint("$FILE" . " " x $ws1 . "$VERS[0]" . " " x $ws2 . "$modification[4]");
}
nprint($VARIABLES{'DIV'});
# Check dependencies
eval "require RPC::XML";
if ($@) {
nprint("Module RPC::XML missing. Logging to Metasploit is disabled.");
}
eval "require RPC::XML::Client";
if ($@) {
nprint("Module RPC::XML::Client missing. Logging to Metasploit is disabled.");
}
my ($avail, $lib, $ver) = LW2::ssl_is_available();
if ($avail) {
nprint("SSL: $lib $ver");
}
else {
nprint("SSL: support not available.");
}
nprint($VARIABLES{'DIV'});
exit;
}
#######################################################################
sub send_updates {
return if ($CONFIGFILE{'UPDATES'} !~ /yes|auto/i);
my (@MARKS) = @_;
my ($updated_version, $answer, $RES);
my $have_updates = 0;
foreach my $mark (@MARKS) {
foreach my $component (keys %{$mark->{'components'}}) {
if ($mark->{'components'}->{$component} eq 2) {
if ($component !~ /[0-9]/) { next; }
elsif ($component eq "Win32") { next; }
elsif ($component eq "(Win32)") { next; }
elsif ($component eq "Linux-Mandrake") { next; }
$have_updates = 1;
$updated_version .= "$ver ";
}
}
}
if ((!$have_updates) || ($updated_version eq "")) { return; }
# make sure the db_outdatedb isn't *too* old
open(OD, "<$CONFIGFILE{PLUGINDIR}/db_outdated")
|| die print STDERR "+ ERROR: Unable to open '$CONFIGFILE{PLUGINDIR}/db_outdated': $!\n";
@F = ;
close(OD);
my @LASTUPDATED = grep(/^\# \$Id: db_outdated/, @F);
$LASTUPDATED[0] =~ /([0-9]{4}\-[0-9]{2})/;
$lm = $1;
$lm =~ s/\-//g;
my @NOW = localtime(time);
$NOW[5] += 1900;
$NOW[4]++;
if ($NOW[4] < 10) { $NOW[4] = "0$NOW[4]"; }
my $now = "$NOW[5]$NOW[4]";
if (($now - $lm) > 120) { return; } # DB is 4 months old... ignore the updates!
$updated_version =~ s/\s+$//;
$updated_version =~ s/^\s+//;
if ($CONFIGFILE{'UPDATES'} eq "auto") {
$answer = "y";
}
else {
$answer = read_data(
"\n
*********************************************************************
Portions of the server's headers ($updated_version) are not in
the Nikto database or are newer than the known string. Would you like
to submit this information (*no server specific data*) to CIRT.net
for a Nikto update (or you may email to sullo\@cirt.net) (y/n)? ", ""
);
}
if ($answer !~ /y/i) { return; }
# set up our mark
my %mark = ('ident' => 'www.cirt.net',
'ssl' => 0,
'port' => 80
);
for (my $i = 0 ; $i <= $#ARGV ; $i++) {
if (($ARGV[$i] eq "-u") || ($ARGV[$i] eq "-useproxy")) {
$CLI{'useproxy'} = 1;
last;
}
}
($mark{'hostname'}, $mark{'ip'}, $mark{'display_name'}) = resolve('www.cirt.net');
($RES, $CONTENT) = nfetch(\%mark, "/cgi-bin/versions?DATA=$updated_version", "GET");
if ($RES eq 407) {
if ($CONFIGFILE{PROXYUSER} eq "") {
$CONFIGFILE{PROXYUSER} = read_data("Proxy ID: ", "");
$CONFIGFILE{PROXYPASS} = read_data("Proxy Pass: ", "noecho");
}
($RES, $CONTENT) = nfetch(\%mark, "/cgi-bin/versions?DATA=$updated_version", "GET");
}
if ($RES eq "") {
LW2::http_close(\%request); # force-close any old connections
$mark{'ip'} = $CONFIGFILE{CIRT};
($RES, $CONTENT) = nfetch(\%mark, "/cgi-bin/versions?DATA=$updated_version", "GET");
}
if ($CONTENT !~ /SUCCESS/) {
nprint("+ ERROR: ($RES, $CONTENT): Unable to send update info to CIRT.net");
}
else {
nprint("- Sent updated info to CIRT.net -- Thank you!");
}
return;
}
#######################################################################
sub usage {
if ($_[0] eq "Help") {
print "
Options:
-ask+ Whether to ask about submitting updates
yes Ask about each (default)
no Don't ask, don't send
auto Don't ask, just send
-config+ Use this config file
-Cgidirs+ Scan these CGI dirs: \"none\", \"all\", or values like \"/cgi/ /cgi-a/\"
-dbcheck Check database and other key files for syntax errors
-Display+ Turn on/off display outputs:
1 Show redirects
2 Show cookies received
3 Show all 200/OK responses
4 Show URLs which require authentication
D Debug output
E Display all HTTP errors
P Print progress to STDOUT
S Scrub output of IPs and hostnames
V Verbose output
-evasion+ Encoding technique:\n";
foreach my $k (sort keys %{ $NIKTO{'anti_ids'} }) {
print " $k $NIKTO{'anti_ids'}{$k}\n";
}
print " -Format+ Save file (-o) format:
csv Comma-separated-value
htm HTML Format
msf+ Log to Metasploit
nbe Nessus NBE format
txt Plain text (default if not specified)
xml XML Format
-host+ Target host
-Help Extended help information
-id+ Host authentication to use, format is id:pass or id:pass:realm
-list-plugins List all available plugins, perform no testing
-mutate+ Guess additional file names:\n";
foreach my $k (sort keys %{ $NIKTO{'mutate_opts'} }) {
print " $k $NIKTO{'mutate_opts'}{$k}\n";
}
print " -mutate-options Provide information for mutates
-nocache Disables the response cache
-nointeractive Disables interactive features
-nolookup Disables DNS lookups
-nossl Disables the use of SSL
-no404 Disables nikto attempting to guess a 404 page
-output+ Write output to this file
-port+ Port to use (default 80)
-Pause+ Pause between tests (seconds, integer or float)
-Plugins+ List of plugins to run (default: ALL)
-root+ Prepend root value to all requests, format is /directory
-ssl Force ssl mode on port
-Single Single request mode
-timeout+ Timeout (default 2 seconds)
-Tuning+ Scan tuning:
1 Interesting File / Seen in logs
2 Misconfiguration / Default File
3 Information Disclosure
4 Injection (XSS/Script/HTML)
5 Remote File Retrieval - Inside Web Root
6 Denial of Service
7 Remote File Retrieval - Server Wide
8 Command Execution / Remote Shell
9 SQL Injection
0 File Upload
a Authentication Bypass
b Software Identification
c Remote Source Inclusion
x Reverse Tuning Options (i.e., include all except specified)
-useproxy Use the proxy defined in nikto.conf
-update Update databases and plugins from CIRT.net
-vhost+ Virtual host (for Host header)
-Version Print plugin and database versions
+ requires a value
";
}
else {
print "
-config+ Use this config file
-Cgidirs+ scan these CGI dirs: 'none', 'all', or values like \"/cgi/ /cgi-a/\"
-dbcheck check database and other key files for syntax errors
-Display+ Turn on/off display outputs
-evasion+ ids evasion technique
-Format+ save file (-o) format
-host+ target host
-Help Extended help information
-id+ Host authentication to use, format is id:pass or id:pass:realm
-list-plugins List all available plugins
-mutate+ Guess additional file names
-mutate-options+ Provide extra information for mutations
-output+ Write output to this file
-nocache Disables the URI cache
-nossl Disables using SSL
-no404 Disables 404 checks
-port+ Port to use (default 80)
-Plugins+ List of plugins to run (default: ALL)
-root+ Prepend root value to all requests, format is /directory
-ssl Force ssl mode on port
-Single Single request mode
-timeout+ Timeout (default 2 seconds)
-Tuning+ Scan tuning
-update Update databases and plugins from CIRT.net
-vhost+ Virtual host (for Host header)
-Version Print plugin and database versions
+ requires a value
Note: This is the short help output. Use -H for full help.
";
}
exit;
}
#######################################################################
sub init_db {
my $dbname = $_[0];
my $filename = "$CONFIGFILE{PLUGINDIR}/" . $dbname;
my (@dbarray, @headers);
my $hashref = {};
# Check that the database exists
unless (open(IN, "<$filename")) {
nprint("+ ERROR: Unable to open database file $dbname: $!.");
return $dbarray;
}
# Now read the header values
while () {
chomp;
s/\#.*$//;
if ($_ eq "") { next }
unless (@headers) {
@headers = parse_csv($_);
}
else {
# contents; so split them up and apply to hash
my @contents = parse_csv($_);
my $hashref = {};
for (my $i = 0 ; $i <= $#contents ; $i++) {
$hashref->{ $headers[$i] } = $contents[$i];
}
push(@dbarray, $hashref);
}
}
close(IN);
# and now the udb_* file
$filename = "$CONFIGFILE{PLUGINDIR}/u" . $dbname;
if (open(IN, "<$filename")) {
while () {
chomp;
s/\#.*$//;
if ($_ eq "") { next; }
# contents; so split them up and apply to hash
my @contents = parse_csv($_);
my $hashref = {};
for (my $i = 0 ; $i <= $#contents ; $i++) {
$hashref->{ $headers[$i] } = $contents[$i];
}
push(@dbarray, $hashref);
}
}
close(IN);
return \@dbarray;
}
#######################################################################
sub add_vulnerability {
my ($mark, $message, $nikto_id, $osvdb, $method, $uri) = @_;
$uri = "/" unless (defined $uri);
$method = "GET" unless (defined $method);
$osvdb = "0" unless (defined $osvdb);
# check to see if we've alerted already (can be from content search, etc.)
foreach my $r (@RESULTS) {
if (($uri eq $r->{'uri'}) &&
($message eq $r->{'message'}) &&
($method eq $r->{'method'}) &&
(${$r->{'mark'}}{'ident'} eq $mark->{'ident'}) &&
(${$r->{'mark'}}{'port'} eq $mark->{'port'})) {
return;
}
}
my $result = "";
if (defined $_[7]) {
$result = $_[7]->{'whisker'}->{'data'};
}
my $resulthash;
%$resulthash = (mark => $mark,
message => $message,
nikto_id => $nikto_id,
osvdb => $osvdb,
method => $method,
uri => $uri,
result => $result,
);
push(@RESULTS, $resulthash);
$mark->{total_vulns}++;
unless ($osvdb eq "0") {
$message = "OSVDB-$osvdb: $message";
}
nprint("+ $message");
# Now report it
report_item($mark, $resulthash);
}
###############################################################################
sub list_plugins {
# Just do a load_plugins, then loop through the array and print out name,
# description and copyright
load_plugins();
foreach my $plugin (@PLUGINS) {
nprint("Plugin: $plugin->{'name'}");
push(@all_names, $plugin->{'name'});
nprint(" $plugin->{'full_name'} - $plugin->{'description'}");
nprint(" Written by $plugin->{'author'}, Copyright (C) $plugin->{'copyright'}");
if (defined $plugin->{'options'}) {
nprint(" Options:");
while (my ($option, $description) = each(%{ $plugin->{'options'} })) {
nprint(" $option: $description");
}
}
nprint("\n");
}
# Plugin macros
nprint("Defined plugin macros:");
foreach my $macro (keys %CONFIGFILE) {
if ($macro =~ /^@@/) {
nprint(" $macro = \"" . $CONFIGFILE{$macro} . "\"");
if ($CONFIGFILE{$macro} =~ /@@/) {
nprint(" (expanded) = \"" . expand_pluginlist($CONFIGFILE{$macro}, 0) . "\"");
}
}
}
exit(0);
}
###############################################################################
# This is overly complicated and jumps a lot between scalars and arrays. The REs are
# probably dodgy, but it works! W00!
sub expand_pluginlist {
my ($pluginlist, $parent) = @_;
my @macros;
foreach my $config (keys %CONFIGFILE) {
if ($config =~ /^@@/) {
push(@macros, $config);
}
}
# Now loop through each member of the list and expand it
my $count = 0;
my $npluginlist = $pluginlist;
do {
$count++;
my @raw = split(/;/, $npluginlist);
# cooked contains the processed list
my @cooked;
foreach my $entry (@raw) {
# Is it +; if so remap to @@DEFAULT
if ($entry eq "+") {
$entry = '@@DEFAULT';
}
# result contains the processed entry
my $result = $original = $entry;
# Is it a macro
if ($entry =~ /^-?@@/) {
# break up into components
$prefix = ($entry =~ /^-/) ? "-" : "";
$name = $suffix = $entry;
$name =~ s/(^-?)(@@[[:alpha:]]+)(\(?.*\)?$)/$2/;
$suffix =~ s/(.*)(\(.*\))/$2/;
if ($suffix eq $entry) {
$suffix = "";
}
foreach my $macro (@macros) {
if ($entry =~ /-?$macro/) {
# It's a macro, so replace the contents with the macro
# Add prefix and suffix to each member of the macro
my @temp;
foreach my $child (split(/;/, $CONFIGFILE{$macro})) {
push(@temp, "$prefix$child$suffix");
}
$result = join(';', @temp);
# stop an infinite loop
last;
}
}
}
if ($result =~ /^-?@@/ && $result eq $original) {
# macro not found or is itself - ignore
$result = "";
}
if ($count > 100) {
# check for recurstion
nprint("ERROR: Recursion found whilst expanding macros");
$result = "";
last;
}
push(@cooked, $result);
}
$npluginlist = join(';', @cooked);
} while ($npluginlist =~ /@@/ && $count <= 100);
#use re 'debug';
# Now we've expanded out macros, deal with duplicates and -
my @raw = split(/;/, $npluginlist);
# hash so we don't have to mess with duplicates
my %cooked;
foreach my $plugin (@raw) {
# break out components
my $minus;
my $name = my $suffix = $plugin;
$minus = (substr($plugin, 0, 1) eq '-');
$name =~ s/(^-?)([^\(]+)(\(?.*\)?$)/$2/;
$suffix =~ s/(.*)(\(.*\))/$2/;
if ($suffix eq $plugin) {
$suffix = "";
}
#nprint("P:$plugin M:$minus N:$name S:$suffix");
if ($minus) {
# it's a minus - remove any previous entry
if (exists $cooked{$name}) {
delete $cooked{$name};
}
}
else {
# else add it with the parameters as the value of the hash
$cooked{$name} = $suffix;
}
}
# Now rejoin into one happy whole
my $output;
foreach my $plugin (keys %cooked) {
$output .= "$plugin" . $cooked{$plugin} . ";";
}
# remove the last ;
$output =~ s/;$//g;
return $output;
}
###############################################################################
# Check a regex for validation & fix. If mode=1, return a flag which indicates
# whether the regex was changed
sub validate_and_fix_regex {
my $regex = $_[0];
my $mode = $_[1] || 0;
my $fixed=0;
eval { qr/$regex/ };
if ($@) {
$fixed=1;
$regex = rquote($regex);
}
if ($mode) { return $regex, $fixed; }
return $regex;
}
###############################################################################
sub rquote {
my $string = $_[0] || return;
$string =~ s/([^A-Za-z_0-9 "'\\])/\\$1/g;
return $string;
}
###############################################################################
sub nikto_core { return; } # trap for this plugin being called to run. lame.
###############################################################################
1;
nikto-2.1.4/plugins/nikto_dictionary_attack.plugin 0000664 0000000 0000000 00000006176 11554552544 0022467 0 ustar 00root root 0000000 0000000 #VERSION,2.03
# $Id: nikto_dictionary_attack.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2004 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:
# Run dictionary tests
###############################################################################
sub nikto_dictionary_attack_init {
my $id = { name => "dictionary",
full_name => "Dictionary attack",
author => "Deity",
description => "Attempts to dictionary attack commonly known directories/files",
hooks => {
recon => { method => \&nikto_dictionary_attack,
weight => 20,
},
},
copyright => "2009 CIRT Inc"
};
return $id;
}
sub nikto_dictionary_attack {
return if $mark->{'terminate'};
my ($mark, $parameters) = @_;
my $dictfile = "";
if ( defined $parameters
&& defined $parameters->{'dictionary'}) {
$dictfile = $parameters->{'dictionary'};
}
elsif (defined($CLI{'mutate-options'})) {
$dictfile = $CLI{'mutate-options'};
}
else {
nprint("- No dictionary file given in plugin options, skipping check", "v");
return;
}
my $ctr = 0;
if (!defined $dictfile) {
nprint("- No dictionary file given in mutate-options, skipping check");
return;
}
# Record the host for future use
my $host = $mark->{'hostname'};
nprint("- Guessing directories/files (using dictionary $dictfile).", "v");
unless (open(IN, "<$dictfile")) {
nprint("+ ERROR: Unable to open dictionary file $dictfile: $!.");
}
# Now attempt on each entry
while () {
return if $mark->{'terminate'};
chomp;
s/\#.*$//;
next if ($_ eq "");
my $dir = $_;
if (($ctr % 100) == 0) { nprint("- Directory enumeration guess $ctr ($dir): /$dir/", "v"); }
my ($result, $content) = nfetch($mark, "/$dir/", "HEAD", "", "", "", "dictionary_attack");
foreach my $found (split(/ /, $VARIABLES{"\@HTTPFOUND"})) {
if ($result eq $found) {
add_vulnerability($mark, "Found directory /$dir/", 999969, "0", "HEAD", "/$dir/");
}
}
$ctr++;
}
close(IN);
} # End sub
1;
nikto-2.1.4/plugins/nikto_embedded.plugin 0000664 0000000 0000000 00000005741 11554552544 0020521 0 ustar 00root root 0000000 0000000 #VERSION,2.06
# $Id: nikto_embedded.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# 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_embedded_init {
my $id = { name => "embedded",
full_name => "Embedded Detection",
author => "Deity",
description => "Checks to see whether the host is an embedded server.",
hooks => { scan => { method => \&nikto_embedded, }, },
copyright => "2009 CIRT Inc."
};
return $id;
}
sub nikto_embedded {
return if $mark->{'terminate'};
my ($mark) = @_;
my $dbarray;
$dbarray = init_db("db_embedded");
foreach my $item (@$dbarray) {
return if $mark->{'terminate'};
(my $res, $content) =
nfetch($mark, $item->{'uri'}, "GET", "", "", "", "embedded detection");
if ($res eq "200") {
$item->{'match'} = validate_and_fix_regex($item->{'match'});
my @lines = split(/\n/, $content);
foreach my $line (@lines) {
# Check for the matches and pull out information
if ($line =~ /$item->{'match'}/) {
# Now pull out the make
my $model = $line;
$model =~ s/$item->{'match'}/$item->{'model'}/ee;
$model =~ s/\+/ /g;
if ($model ne "") {
add_vulnerability($mark, "$item->{'message'} $model",
$item->{'nikto_id'}, 0, "GET", $item->{'uri'});
}
}
}
}
}
}
1;
nikto-2.1.4/plugins/nikto_favicon.plugin 0000664 0000000 0000000 00000004165 11554552544 0020414 0 ustar 00root root 0000000 0000000 #VERSION,2.08
# $Id: nikto_favicon.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2007 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:
# Get a favicon.ico file & MD5 fingerprint
###############################################################################
sub nikto_favicon_init {
my $id = { name => "favicon",
full_name => "Favicon",
author => "Sullo",
description => "Checks the web server's favicon against known favicons.",
copyright => "2008 CIRT Inc.",
hooks => { scan => { method => \&nikto_favicon, }, },
};
return $id;
}
sub nikto_favicon {
return if $mark->{'terminate'};
my ($mark) = @_;
my ($RES, $CONTENT) = nfetch($mark, "/favicon.ico", "GET", "", "", "", "favicon");
my $dbarray = init_db("db_favicon");
if ($RES eq "200" && $CONTENT ne "") {
my $hash = LW2::md5($CONTENT);
$hash =~ s/^.*://;
nprint("Got favicon.ico hash:$hash", "d", "");
foreach my $item (@$dbarray) {
if ($item->{'md5hash'} eq $hash) {
add_vulnerability($mark,
"/favicon.ico file identifies this server as: $item->{'description'}",
$item->{'nikto_id'}, 39272);
}
}
}
}
1;
nikto-2.1.4/plugins/nikto_headers.plugin 0000664 0000000 0000000 00000022127 11554552544 0020400 0 ustar 00root root 0000000 0000000 #VERSION,2.09
# $Id: nikto_headers.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2007 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:
# General HTTP headers checks
###############################################################################
sub nikto_headers_init {
my $id = {
name => "headers",
full_name => "HTTP Headers",
author => "Sullo",
description => "Performs various checks against the headers returned from an HTTP request.",
hooks => {
scan => { method => \&nikto_headers, },
postfetch => { method => \&nikto_headers_postfetch, },
},
copyright => "2008 CIRT Inc."
};
# some global variables
use vars qw/%HFOUND/;
return $id;
}
sub nikto_headers_postfetch {
return if $mark->{'terminate'};
my ($mark, $parameters, $request, $result) = @_;
if (exists $result->{'whisker'}->{'error'}) {
return $request, $result;
}
# Check for know headers
my @interesting_headers =
qw /x-powered-by servlet-engine microsoftofficewebserver ms-author-via dasl dav daap-server x-aspnet-version/;
foreach my $header (@interesting_headers) {
nikto_headers_check($mark, $result, $header, 'Retrieved ' . $header . ' header:', 999986);
}
return $request, $result;
}
sub nikto_headers_check {
return if $mark->{'terminate'};
my ($mark, $result, $header, $message, $tid) = @_;
if (exists $result->{$header}) {
my $key =
LW2::md4( $mark->{'ip'}
. $mark->{'hostname'}
. $mark->{'port'}
. $mark->{'ssl'}
. $result->{'whisker'}->{'method'}
. $header);
if (!exists $HFOUND{$key}) {
my $value = $result->{$header};
$HFOUND{$key} = $value;
add_vulnerability($mark, $message . " " . $value,
$tid, "0",
$result->{'whisker'}->{'method'},
$result->{'whisker'}->{'uri'});
}
}
}
sub nikto_headers {
return if $mark->{'terminate'};
my ($mark) = @_;
my $dbarray = init_db("db_headers");
my %headers;
#######################################################################
# look for to see whether its vulnerable to the Translate: f
my %transheaders;
foreach
my $f (qw/\/index.asp \/junk999.asp \/index.aspx \/junk988.aspx \/login.asp \/login.aspx/) {
return if $mark->{'terminate'};
(my $res, $content) =
nfetch($mark, $f, "GET", "", \%transheaders, "", "headers: Translate-f #1");
if ($res eq "200") {
$transheaders{'Translate'} = "f";
($res, $content) =
nfetch($mark, $f . "\\", "GET", "", \%transheaders, "", "headers: Translate-f #2");
if ($res eq "200") {
if ($content =~ /{'uri'} = "/";
$request{'whisker'}->{'method'} = "GET";
$request{'whisker'}{'version'} = "1.0";
LW2::http_do_request_timeout(\%request, \%result);
$COUNTERS{'totalrequests'}++;
if ( ($result{'content-location'} ne "")
&& ($result{'content-location'} =~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/)
&& ($result{'content-location'} !~ /$mark->{'ip'}/)) {
add_vulnerability(
$mark,
"IIS may reveal its internal IP or real IP in the Content-Location header via a request to the root file. The value is \"$result{'content-location'}\".",
999989,
630
);
}
LW2::http_close(\%request); # force-close any old connections
$request{'whisker'}->{'version'} = $CONFIGFILE{'DEFAULTHTTPVER'};
LW2::http_fixup_request(\%request);
LW2::http_reset();
$request{'whisker'}->{'uri'} = "/images";
$request{'whisker'}->{'method'} = "GET";
$request{'whisker'}{'version'} = "1.0";
delete $request{'whisker'}{'Host'};
delete $request{'Host'};
sleeper();
LW2::http_do_request_timeout(\%request, \%result);
$COUNTERS{'totalrequests'}++;
if ( ($result{'location'} ne "")
&& ($result{'location'} =~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/)
&& ($result{'location'} !~ /$mark->{'ip'}/)) {
add_vulnerability(
$mark,
"IIS may reveal its internal or real IP in the Location header via a request to the /images directory. The value is \"$result{'location'}\".",
999988,
630,
"GET",
"/images"
);
}
$request{'whisker'}{'Host'} = $wh;
$request{'Host'} = $h;
#######################################################################
# Location header in WebLogic
LW2::http_close(\%request); # force-close any old connections
$request{'whisker'}->{'version'} = $CONFIGFILE{'DEFAULTHTTPVER'};
LW2::http_fixup_request(\%request);
LW2::http_reset();
$request{'whisker'}->{'uri'} = ".";
$request{'whisker'}->{'method'} = "GET";
$request{'whisker'}{'version'} = "1.0";
sleeper();
LW2::http_do_request_timeout(\%request, \%result);
$COUNTERS{'totalrequests'}++;
if (($result{'location'} ne "") && ($result{'location'} =~ /http:\/\//)) {
add_vulnerability(
$mark,
"WebLogic may reveal its internal IP or hostname in the Location header. The value is \"$result{'location'}\".",
999987,
5737,
"GET",
"."
);
}
$request{'whisker'}->{'version'} = $CONFIGFILE{'DEFAULTHTTPVER'};
LW2::http_fixup_request(\%request);
LW2::http_reset();
#######################################################################
# Look for any uncommon headers
my $reportnum = 999100;
foreach my $header (sort keys %headers) {
my $found = 0;
foreach my $st_header (@$dbarray) {
if ($header eq $st_header->{'header'}) {
$found = 1;
}
}
if ($found == 0) {
my $x = $headers{$header};
$x =~ s/\s+.*$//;
$mark->{'components'}->{$x} = 1;
add_vulnerability($mark,
"Uncommon header '$header' found, with contents: $headers{$header}",
$reportnum, 0);
$reportnum++;
}
}
#######################################################################
# ETag header
# Try to grab a standard file
foreach my $f (qw/\/index.html \/index.htm \/robots.txt/) {
return if $mark->{'terminate'};
(my $res, $content) = nfetch($mark, $f, "GET", "", \%headers, "", "headers: etag");
last if (defined $headers{'etag'});
}
# Now we have a header, let's check ETag for inode
if (defined $headers{'etag'}) {
my $etag = $headers{'etag'};
$etag =~ s/"//g;
my @fields = split("-", $etag);
my $message = "ETag header found on server";
if ($#fields == 2) {
my $inode = "0x$fields[0]";
my $size = "0x$fields[1]";
my $mtime = "0x$fields[2]";
# for some reason $mtime is mangled
$message .=
sprintf(", inode: %d, size: %d, mtime: %s", hex($inode), hex($size), $mtime);
}
else {
$message .= ", fields: ";
foreach my $field (@fields) {
$message .= "0x$field ";
}
}
add_vulnerability($mark, $message, 999984, 0);
}
}
1;
nikto-2.1.4/plugins/nikto_httpoptions.plugin 0000664 0000000 0000000 00000015335 11554552544 0021363 0 ustar 00root root 0000000 0000000 #VERSION,2.09
# $Id: nikto_httpoptions.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# 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:
# HTTP options check
###############################################################################
sub nikto_httpoptions_init {
my $id = { name => "httpoptions",
full_name => "HTTP Options",
author => "Sullo",
description =>
"Performs a variety of checks against the HTTP options returned from the server.",
hooks => { scan => { method => \&nikto_httpoptions,
weight => 20,
},
},
copyright => "2008 CIRT Inc."
};
return $id;
}
# This just gets the HTTP options & checks 'em out.
# See RFC 2626 for more info...
sub nikto_httpoptions {
return if $mark->{'terminate'};
my ($mark) = @_;
my %headers;
# test for both OPTIONS / and OPTIONS * as they may give different results
(my $res, $content) =
nfetch($mark, "*", "OPTIONS", "", \%headers, "", "httpoptions: OPTIONS *");
my $aoptions = "$headers{'allow'}, ";
my $poptions = "$headers{'public'}, ";
my ($allow_methods, $public_methods);
my $txt = "";
my $dbarray;
$dbarray = init_db("db_httpoptions");
($res, $content) = nfetch($mark, "/", "OPTIONS", "", \%headers, "", "httpoptions: OPTIONS /");
$aoptions .= $headers{'allow'};
$poptions .= $headers{'public'};
foreach my $o (split(/,[ ]?/, $aoptions)) {
$allow_methods .= ", $o" unless ($allow_methods =~ /\b$o\b/ || $o eq '');
}
$allow_methods =~ s/^[ ]?, //;
foreach my $o (split(/,[ ]?/, $poptions)) {
$public_methods .= ", $o" unless ($public_methods =~ /\b$o\b/ || $o eq '');
}
$public_methods =~ s/^[ ]?, //;
# proxy can impose its methods... should actually check this not just warn
if ($CLI{'useproxy'} ne "") { $txt = "(May be proxy's methods, not server's)"; }
%davmethods = ();
if ($allow_methods ne "") {
add_vulnerability($mark, "Allowed HTTP Methods: $allow_methods $txt", 999990, 0);
foreach my $m (split /,? /, $allow_methods) {
my $method = eval_methods($m, "Allow", $dbarray, $mark);
if ($method ne "") { $davmethods{$method} = 1 }
}
}
if ($public_methods ne "") {
add_vulnerability($mark, "Public HTTP Methods: $public_methods $txt", 999985, 0);
foreach my $m (split /,? /, $public_methods) {
my $method = eval_methods($m, "Public", $dbarray, $mark);
if ($method ne "") { $davmethods{$method} = 1 }
}
}
if (scalar(keys(%davmethods)) > 0) {
$message = "WebDAV enabled (";
for my $key (keys %davmethods) {
$message .= "$key ";
}
$message .= "listed as allowed)";
add_vulnerability($mark, "$message", "999977", "0");
}
# Check for other weirdness
# IIS Debug
return if $mark->{'terminate'};
($res, $content) = nfetch($mark, "/", "DEBUG", "", "", "", "httpoptions: DEBUG");
if ($res == 200) {
add_vulnerability(
$mark,
"DEBUG HTTP verb may show server debugging information. See http://msdn.microsoft.com/en-us/library/e8z01xdh%28VS.80%29.aspx for details.",
999972,
0,
"DEBUG"
);
}
# IIS PROPFIND HEADER
return if $mark->{'terminate'};
%headers = ("Host" => "",
"Content-Length" => "0",);
($res, $content) =
nfetch($mark, "/", "PROPFIND", "", \%headers, { noclean => 1 }, "httpoptions: PROPFIND");
if ($res == 207) {
if ($content =~ "http://") {
my $ipfound = $content;
$ipfound =~ s/^.*//g;
$ipfound =~ s/<\/a:href>.*$//g;
add_vulnerability($mark,
"PROPFIND HTTP verb may show the server's internal IP address: $ipfound",
999973, 13431);
}
}
# Special checks for TRACE/TRACK to see whether its vulnerable
%headers = ("Host" => "Nikto",);
foreach my $method (split(/ /, "TRACE TRACK")) {
# Check for all flavours of HTTP
foreach my $version (split(/ /, "1.0 1.1")) {
return if $mark->{'terminate'};
$request{'whisker'}{'version'} = $version;
($res, $content) =
nfetch($mark, "/", $method, "", \%headers, "", "httpoptions: $method");
if ($res == 200) {
if ($content =~ "Nikto") {
add_vulnerability($mark,
"HTTP $method method is active, suggesting the host is vulnerable to XST",
999971, 877);
# now we know its vulnerable stop testing
last;
}
}
}
}
$request{'whisker'}->{'version'} = $NIKTOCONFIG{'DEFAULTHTTPVER'};
# Now release memory for the dbarray
undef @$dbarray;
return;
}
sub eval_methods {
my $method = $_[0] || return;
my $type = $_[1];
my $dbarray = $_[2];
my $mark = $_[3];
my $message;
$method = uc($method);
# Now search database for the method.
foreach my $item (@$dbarray) {
if ( $method eq "PROPPATCH"
|| $method eq "SEARCH"
|| $method eq "PROPFIND"
|| $method eq "COPY"
|| $method eq "LOCK"
|| $method eq "UNLOCK") {
return $method;
}
if ($item->{'method'} eq $method) {
if ($item->{'nikto_id'} eq "0") {
# is webdav
return $method;
}
else {
$message = $item->{'message'};
$message =~ s/\@TYPE\@/$type/;
add_vulnerability($mark, "$message", $item->{'nikto_id'}, $item->{'osvdb'});
}
}
}
return "";
}
1;
nikto-2.1.4/plugins/nikto_msgs.plugin 0000664 0000000 0000000 00000010356 11554552544 0017737 0 ustar 00root root 0000000 0000000 #VERSION,2.06
# $Id: nikto_msgs.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# 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 the 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.",
hooks => {
scan => { method => \&nikto_msgs,
weight => 20,
},
},
copyright => "2008 CIRT Inc."
};
return $id;
}
sub nikto_msgs {
return if $mark->{'terminate'};
my ($mark) = @_;
my $dbarray;
$dbarray = init_db("db_server_msgs");
foreach my $item (@$dbarray) {
$item->{'server'} = validate_and_fix_regex($item->{'server'});
if ($mark->{'banner'} =~ /($item->{'server'})\b/i) {
add_vulnerability($mark, "$1 - $item->{'message'}",
$item->{'nikto_id'}, $item->{'osvdb'});
}
}
# 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", "", "", "", "msgs: Agent-ListenServer-HttpSvr");
next unless ($RES == 200);
# Computer name
return if $mark->{'terminate'};
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", "", "", "", "msgs: CompaqHTTPServer");
next unless ($RES == 200);
return if $mark->{'terminate'};
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;
nikto-2.1.4/plugins/nikto_multiple_index.plugin 0000664 0000000 0000000 00000005773 11554552544 0022017 0 ustar 00root root 0000000 0000000 #VERSION,2.02
# $Id: nikto_multiple_index.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2004 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:
# Look for multiple unique index files
###############################################################################
sub nikto_multiple_index_init {
my $id = { name => "mutiple_index",
full_name => "Multiple Index",
author => "deity",
description => "Checks for multiple index files",
hooks => { scan => { method => \&nikto_multiple_index, }, },
copyright => "2009 CIRT Inc"
};
return $id;
}
sub nikto_multiple_index {
my ($mark) = @_;
my $dbarray = init_db("db_multiple_index");
my ($found, $hashes);
foreach my $item (@$dbarray) {
return if $mark->{'terminate'};
# Use nfetch to minimise extra code
# First we need to mangle the host.
my ($res, $content) =
nfetch($mark, "/$item->{'index'}", "GET", "", "", "", "multiple_index");
if ($res == 200) {
$content = rm_active_content($content, "/$item->{'index'}");
my $hash = LW2::md4($content);
$found{ $item->{'index'} } = $hash;
$hashes{$hash}++;
}
} # End foreach
if (keys(%found) > 1) {
# make sure we have unique pages
$total_unique = 0;
foreach my $hash (keys %hashes) {
if ($hashes{$hash} eq 1) {
$total_unique++;
}
}
# one unique hash... bogus responses
if ($total_unique <= 1) {
return;
}
my $tempstring;
foreach my $f (keys %found) { $tempstring .= "$f, "; }
$tempstring =~ s/,$//;
# some unique... report slightly differently
if ($total_unique < keys(%found)) {
add_vulnerability($mark,
"Multiple index files found (note, these may not all be unique): $tempstring",
740000, 0);
}
# all unique... report
if ($total_unique eq keys(%found)) {
add_vulnerability($mark, "Multiple index files found: $tempstring", 740000, 0);
}
}
}
1;
nikto-2.1.4/plugins/nikto_outdated.plugin 0000664 0000000 0000000 00000014750 11554552544 0020601 0 ustar 00root root 0000000 0000000 #VERSION,2.08
# $Id: nikto_outdated.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# 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:
# Check for outdated items in banner
###############################################################################
sub nikto_outdated_init {
my $id = { name => "outdated",
full_name => "Outdated",
author => "Sullo",
description => "Checks to see whether the web server is the latest version.",
copyright => "2008 CIRT Inc.",
hooks => { scan => { method => \&nikto_outdated, }, },
};
return $id;
}
sub nikto_outdated {
return if $mark->{'terminate'};
my ($mark) = @_;
# populate @BUILDITEMS with appropriate values
# if Apache, split on space...
if ($mark->{'banner'} =~ /apache/i) {
foreach my $item (split(/ /, $mark->{'banner'})) {
$mark->{'components'}->{$item} = 1;
}
}
elsif ($mark->{'banner'} =~ /weblogic/i) # strip all the date info...
{
my @T = split(/ /, $mark->{'banner'});
$mark->{'components'}->{ $T[0] . '\/' . $T[1] } = 1;
}
elsif ($mark->{'banner'} =~ /sitescope/i) # strip all the date info...
{
my @T = split(/ /, $mark->{'banner'});
$mark->{'components'}->{ $T[0] } = 1;
}
else {
if ($mark->{'banner'} !~ /\s/) # has no spaces
{
$MATCHSTRING = $mark->{'banner'};
}
elsif ($mark->{'banner'} =~ /\//) # has spaces and / sepr
{
$MATCHSTRING = $mark->{'banner'};
$MATCHSTRING =~ s/\s+//g;
}
else # must create sepr
{
# use the last non 0-9 . a-z char as a sepr (' ', '-', '_' etc)
my $sepr = $mark->{'banner'};
$sepr =~ s/[a-zA-Z0-9\.\(\)]//gi;
$sepr = substr($sepr, (length($sepr) - 1), 1);
# $sepr=~ s/\s+/ /g;
# break up ID string on $sepr
my @T = split(/$sepr/, $mark->{'banner'});
# assume last is version...
for ($i = 0 ; $i < $#T ; $i++) { $MATCHSTRING .= "$T[$i] "; }
}
$MATCHSTRING =~ s/\s+$//;
$mark->{'components'}->{$MATCHSTRING} = 1;
nprint("Server Version String:$MATCHSTRING", "d");
}
my ($v, $V, $BI, $k) = "";
foreach $BI (keys %{ $mark->{'components'} }) {
my $have_match = 0;
foreach $V (sort keys %OVERS) {
next if $V eq '';
if ($BI =~ /^$V/i) # software name matched
{
$have_match = 1;
foreach $k (keys %{ $OVERS{$V} }) {
if ($k eq "") { next; }
if ($k eq "tid") { next; }
$v = $k;
}
if (vereval($v, $BI, $V, $mark)) # version check
{
my $msg = $OVERS{$V}{$v};
$msg =~ s/\@RUNNING_VER/$BI/g;
$msg =~ s/\@CURRENT_VER/$v/g;
chomp($msg);
add_vulnerability($mark, $msg, $OVERS{$V}{'tid'}, 0, "HEAD");
}
}
}
if (!$have_match) { $mark->{'components'}->{'$BI'} = 2; }
}
return;
}
sub vereval {
# split both by last char of @_[0], as it is the name to version separator
my $sepr = substr($_[2], (length($_[2]) - 1), 1);
nprint("nikto_outdated.plugin: verstring: $_[2], sepr:$sepr", "d");
my $CURRENT = lc($_[0]);
my $RUNNING = lc($_[1]);
my $CURRENT_ORIG = $CURRENT;
my $RUNNING_ORIG = $RUNNING;
my $mark = $_[3];
nprint("nikto_outdated.plugin: \$CURRENT:$CURRENT:\$RUNNING:$RUNNING:", "d");
my @T = split(/$sepr/, $CURRENT);
$CURRENT = $T[$#T]; # should be version...
@T = split(/$sepr/, $RUNNING);
$RUNNING = $T[$#T]; # should be version...
# convert alphas to numerics so we can do a real comparison
$CURRENT =~ s/([^0-9\.]){1}/"." . ord($1) . "."/eg;
$RUNNING =~ s/([^0-9\.]){1}/"." . ord($1) . "."/eg;
$RUNNING =~ s/\.+/\./g;
$CURRENT =~ s/\.+/\./g;
$RUNNING =~ s/^\.//;
$CURRENT =~ s/^\.//;
$RUNNING =~ s/\.$//;
$CURRENT =~ s/\.$//;
nprint("nikto_outdated.plugin: \$CURRENT:$CURRENT:\$RUNNING:$RUNNING\: (after numberifcation)",
"d");
if (($CURRENT !~ /[a-z]/) && ($RUNNING !~ /[a-z]/)) {
@CUR = split(/\./, $CURRENT);
@RUN = split(/\./, $RUNNING);
}
else {
@CUR = split(//, $CURRENT);
@RUN = split(//, $RUNNING);
}
# Check to see whether the arrays both have the same length
if (scalar(@RUN) != scalar(@CUR)) {
add_vulnerability(
$mark,
"Number of sections in the version string differ from those in the database, the server reports: $RUNNING_ORIG while the database has: $CURRENT. This may cause false positives.",
699999,
0,
"HEAD"
);
}
# start with 0... eval each in turn...
for (my $i = 0 ; $i <= $#CUR ; $i++) {
nprint("nikto_outdated.plugin: major compare: \$CUR[$i]:$CUR[$i]: \$RUN[$i]:$RUN[$i]:",
"d");
if ($CUR[$i] > $RUN[$i]) { return 1; } # running is older
if (($CUR[$i] ne "") && ($RUN[$i] eq "")) { return 1; } # running is older
if ($CUR[$i] < $RUN[$i]) # running is newer
{
my $string = $_[1];
$string =~ s/\s/\%20/g;
$mark->{'components'}->{$string} = 2;
return 0;
}
}
return 0; # running is the same version if we make it here
}
1;
nikto-2.1.4/plugins/nikto_put_del_test.plugin 0000664 0000000 0000000 00000005416 11554552544 0021462 0 ustar 00root root 0000000 0000000 #VERSION,2.04
# $Id: nikto_put_del_test.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2007 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:
# Try put and then delete a file
###############################################################################
sub nikto_put_del_test_init {
my $id = { name => "put_del_test",
full_name => "Put/Delete test",
author => "Sullo",
description =>
"Attempts to upload and delete files through the PUT and DELETE HTTP methods.",
hooks => { scan => { method => \&nikto_put_del_test, }, },
copyright => "2008 CIRT Inc."
};
return $id;
}
sub nikto_put_del_test {
return if $mark->{'terminate'};
my ($mark) = @_;
my $msg;
# PUT a page
my $uri = "/nikto-test-" . LW2::utils_randstr(8) . ".html";
my ($RES, $CONTENT) =
nfetch($mark, $uri, "PUT", "This was a Nikto test.", "", "", "put_del_test: PUT");
# Request it back
if ($RES eq 201) {
my ($RES, $CONTENT) = nfetch($mark, $uri, "GET", "", "", "", "put_del_test: GET");
if ($CONTENT =~ /This was a Nikto test/) {
add_vulnerability($mark,
"HTTP method 'PUT' allows clients to save files on the web server.",
999995, 397, "PUT", $uri);
# we were able to put it there--can we delete it?
my ($RES, $CONTENT) = nfetch($mark, $uri, "DELETE", "", "", "", "put_del_test: DELETE");
if ($RES eq 200) {
my ($RES, $CONTENT) = nfetch($mark, $uri, "GET", "", "", "", "put_del_test: GET");
if ($CONTENT !~ /This was a Nikto test/) # gone now
{
add_vulnerability($mark,
"HTTP method 'DELETE' allows clients to delete files on the web server.",
999994, 5646, "DELETE", $uri);
}
}
}
}
}
1;
nikto-2.1.4/plugins/nikto_report_csv.plugin 0000664 0000000 0000000 00000004464 11554552544 0021157 0 ustar 00root root 0000000 0000000 #VERSION,2.05
# $Id: nikto_report_csv.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2007 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:
# Reporting
###############################################################################
sub nikto_report_csv_init {
my $id = { name => "report_csv",
full_name => "CSV reports",
author => "Deity",
description => "Produces a CSV report.",
report_head => \&csv_open,
report_item => \&csv_item,
report_format => 'csv',
copyright => "2008 CIRT Inc."
};
return $id;
}
sub csv_open {
my ($file) = @_;
# Open file and produce header
open(OUT, ">>$file") || die print STDERR "+ ERROR: Unable to open '$file' for write: $@\n";
# Write header
print OUT
"\"meta\",\"meta\",\"$VARIABLES{'name'}\",\"v$VARIABLES{'version'}/$VARIABLES{'core_version'}\"\n";
return OUT;
}
sub csv_item {
my ($handle, $mark, $item) = @_;
foreach my $uri (split(' ', $item->{'uri'})) {
my $line;
$line .= "\"$item->{'mark'}->{'hostname'}\",";
$line .= "\"$item->{'mark'}->{'port'}\",";
$line .= "\"";
if ($item->{'osvdb'}) { $line .= "OSVDB-$item->{'osvdb'}: " }
if ($item->{'method'}) { $line .= "$item->{'method'} " }
if ($uri) { $line .= "${'uri'}: " }
$line .= $item->{'message'};
$line .= "\"";
print $handle "$line\n";
}
}
1;
nikto-2.1.4/plugins/nikto_report_html.plugin 0000664 0000000 0000000 00000017545 11554552544 0021334 0 ustar 00root root 0000000 0000000 #VERSION,2.05
# $Id: nikto_report_html.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2007 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:
# Reporting
###############################################################################
sub nikto_report_html_init {
my $id = { name => "report_html",
full_name => "Report as HTML",
author => "Sullo/Jabra",
description => "Produces an HTML report.",
report_head => \&html_head,
report_summary => \&html_summary,
report_host_start => \&html_host_start,
report_host_end => \&html_host_end,
report_item => \&html_item,
report_close => \&html_close,
report_format => 'htm',
copyright => "2008 CIRT Inc."
};
# load up the templates now
html_open_templates();
return $id;
}
###############################################################################
sub html_head {
my ($file) = @_;
# Write header for html file, return file handle
open(OUT, ">>$file") || die print STDERR "+ ERROR: Unable to open '$file' for write: $@\n";
my $html = html_change_vars($TEMPLATES{'htm_start'});
$html =~ s/\#NIKTODTD/$CONFIGFILE{'NIKTODTD'}/;
print OUT "$html";
return OUT;
}
###############################################################################
sub html_close {
my ($handle, $mark) = @_;
my $html = html_change_vars($TEMPLATES{'htm_close'}, $mark);
print $handle "$html\n";
close($handle);
return;
}
###############################################################################
sub html_summary {
my ($handle, $mark) = @_;
my $html = html_change_vars($TEMPLATES{'htm_summary'}, $mark);
print $handle $html;
return;
}
###############################################################################
sub html_host_start {
my ($handle, $mark) = @_;
my $html = html_change_vars($TEMPLATES{'htm_host_head'}, $mark);
print $handle "$html\n";
return;
}
###############################################################################
sub html_host_end {
my ($handle, $mark) = @_;
my $html = html_change_vars($TEMPLATES{'htm_end'}, $mark);
print $handle "$html\n";
return;
}
###############################################################################
sub html_item {
my ($handle, $mark, $item) = @_;
my $html = html_change_vars($TEMPLATES{'htm_host_item'}, $mark, $item);
print $handle "$html\n";
return;
}
###############################################################################
sub html_open_templates {
foreach my $t (dirlist($CONFIGFILE{'TEMPLATEDIR'}, "htm.*")) {
open(T, "<$CONFIGFILE{'TEMPLATEDIR'}/$t");
my @TEMPLATE = ;
close(T);
my $T = join("", @TEMPLATE);
$t =~ s/\..*$//;
$TEMPLATES{$t} = $T;
}
return;
}
###############################################################################
sub html_change_vars {
my ($template, $mark, $item) = @_;
my %variables;
my $protocol = "http";
if ($mark->{'ssl'}) { $protocol .= "s"; }
$variables{"#TEMPL_HCTR"} = $VARIABLES{'TEMPL_HCTR'};
$variables{"#TEMPL_END"} = date_disp($mark->{'end_time'});
$variables{"#TEMPL_HOSTNAME"} = simple_enc($mark->{'hostname'});
$variables{"#TEMPL_HOST_HEADER"} = $mark->{'hostname'};
if (defined $mark->{'vhost'}) {
$variables{"#TEMPL_HOST_HEADER"} = $mark->{'vhost'};
}
$variables{"#TEMPL_IP"} = simple_enc($mark->{'ip'});
$variables{"#TEMPL_ITEMS_TESTED"} = $COUNTERS{'total_checks'};
$variables{"#TEMPL_PORT"} = $mark->{'port'};
$variables{"#TEMPL_START"} = date_disp($mark->{'start_time'});
$variables{"#TEMPL_NIKTO_VER"} = $VARIABLES{'version'};
$variables{"#TEMPL_BANNER"} = simple_enc($mark->{'banner'});
$variables{"#TEMPL_NIKTO_CLI"} = $CLI{'all_options'};
$variables{"#TEMPL_CTR"} = $COUNTERS{'total_checks'};
$variables{"#TEMPL_NIKTO_HOSTS_TESTED"} = $COUNTERS{'hosts_completed'};
$variables{"#TEMPL_ELAPSED"} = $mark->{'end_time'} - $mark->{'start_time'};
$variables{"#TEMPL_LINK_NAME"} = "$protocol://$mark->{'hostname'}:$mark->{'port'}";
$variables{"#TEMPL_LINK_IP"} = "$protocol://$mark->{'ip'}:$mark->{'port'}/";
$variables{"#TEMPL_ITEMS_FOUND"} = $mark->{'total_vulns'};
$variables{"#TEMPL_SCAN_START"} = localtime($COUNTERS{'scan_start'});
$variables{"#TEMPL_SCAN_END"} = localtime($COUNTERS{'scan_end'});
$variables{"#TEMPL_SCAN_ELAPSED"} = $COUNTERS{'scan_elapsed'} . " seconds";
$variables{"#TEMPL_LINK_NAME"} = "N/A";
if ($mark->{'hostname'} ne "") {
$variables{"#TEMPL_LINK_NAME"} = "$protocol://$mark->{'hostname'}:$mark->{'port'}/";
}
# do now in case we return early
foreach my $var (keys %variables) {
$template =~ s/$var/$variables{$var}/g;
}
if ($item->{'uri'} eq '') { return $template }
$variables{"#ID"} = $item->{'nikto_id'};
# OSVDB info
my $OSVDB = $item->{'osvdb'};
if ($OSVDB !~ /\d+/) { $OSVDB = 0; }
$OSVDB_LINK = "http://osvdb.org/$OSVDB";
$variables{"#TEMPL_OSVDB_LINK"} = $OSVDB_LINK;
$variables{"#TEMPL_OSVDB"} = $OSVDB;
# Scanner Messages Handling
$variables{"#TEMPL_SMMSG"} = $item->{'message'};
# Positives Handling
if ($template =~ /\#TEMPL_MSG/) {
my $msg = simple_enc($item->{'message'});
# Message & handling for customized html output
# 740000 = multiple index files -- linkify file names
if ($item->{'nikto_id'} == 740000) {
$item->{'message'} =~ /^(.*: )(.*)$/;
$msg = $1;
my @links;
foreach my $f (parse_csv($2)) { #@files) {
$f =~ s/\s//g;
next if $f eq '';
push(@links,
"{'display_name'}:$mark->{'port'}/$f\">$f");
}
$msg .= join(", ", @links);
}
$variables{"#TEMPL_URI"} = simple_enc($item->{'uri'});
$variables{"#TEMPL_MSG"} = $msg;
$variables{"#TEMPL_HTTP_METHOD"} = $item->{'method'};
$variables{"#TEMPL_ITEM_IP_LINK"} =
"$protocol://$variables{\"#TEMPL_IP\"}:$mark->{'port'}$variables{\"#TEMPL_URI\"}";
$variables{"#TEMPL_ITEM_NAME_LINK"} = "";
if ($mark->{'hostname'} ne "") {
$variables{"#TEMPL_ITEM_NAME_LINK"} =
"$protocol://$variables{\"#TEMPL_HOSTNAME\"}:$mark->{'port'}$variables{\"#TEMPL_URI\"}";
}
}
foreach my $var (keys %variables) { $template =~ s/$var/$variables{$var}/g; }
return $template;
}
###############################################################################
sub simple_enc {
my $var = $_[0] || return;
$var =~ s/</g;
$var =~ s/>/>/g;
$var =~ s/"/"/g;
return $var;
}
1;
nikto-2.1.4/plugins/nikto_report_msf.plugin 0000664 0000000 0000000 00000015465 11554552544 0021154 0 ustar 00root root 0000000 0000000 #VERSION,1.00
# $Id: nikto_report_msf.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2009 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:
# Log to Metasploit via XML::RPC service
###############################################################################
sub nikto_report_msf_init {
my $id;
eval "require RPC::XML";
if (!$@) {
eval "require RPC::XML::Client";
if (!$@) {
$id = { name => "report_metasploit",
full_name => "Report data to Metasploit",
author => "Sussurro",
description => "Logs data to Metasploit.",
report_head => \&msf_head,
report_host_start => \&msf_host_start,
report_host_end => \&msf_host_end,
report_item => \&msf_item,
report_format => 'msf',
};
}
}
if (($CLI{'format'} eq 'msf') && ($id eq '')) {
nprint("+ ERROR: Missing required module RPC::XML and/or RPC::XML::Client for MSF logging");
exit;
}
return $id;
}
###############################################################################
sub msf_head {
my ($url) = @_;
my ($msfuser, $msfpass, $msfurl);
if ($url =~ /^(\S+)\:(\S+)\@(.*)/) {
$msfuser = $1;
$msfpass = $2;
$msfurl = $3;
}
else {
$msfurl = $url;
$msfuser = "msf";
$msfpass = "abc123";
}
$TEMPLATES{'msfuser'} = $msfuser;
$TEMPLATES{'msfpass'} = $msfpass;
$TEMPLATES{'msftoken'} = 0;
$cli = RPC::XML::Client->new($msfurl);
msfLogin($cli);
return $cli;
}
###############################################################################
sub msf_host_start {
my ($handle, $mark) = @_;
msfLogin($handle);
my $xopts = RPC::XML::struct->new('host' => $mark->{'ip'},
'name' => 'nikto_scan_start',);
my $req = RPC::XML::request->new("db.report_event", $TEMPLATES{'msftoken'}, $xopts);
my $resp = $cli->send_request($req);
$xopts = RPC::XML::struct->new('host' => $mark->{'ip'},
'name' => $mark->{'display_name'},);
$req = RPC::XML::request->new("db.report_host", $TEMPLATES{'msftoken'}, $xopts);
$resp = $cli->send_request($req);
if (ref $resp && $resp->{'result'}->value eq "success") {
$xopts = RPC::XML::struct->new('host' => $mark->{'ip'},
'proto' => 'tcp',
'state' => 'open',
'port' => $mark->{'port'},
'name' => $mark->{'banner'},
);
$req = RPC::XML::request->new("db.report_service", $TEMPLATES{'msftoken'}, $xopts);
$resp = $cli->send_request($req);
}
return;
}
###############################################################################
sub msf_host_end {
my ($handle, $mark) = @_;
msfLogin($handle);
my $xopts = RPC::XML::struct->new(
'host' => $mark->{'ip'},
'name' => 'nikto_scan_end',
);
my $req = RPC::XML::request->new("db.report_event", $TEMPLATES{'msftoken'}, $xopts);
my $resp = $cli->send_request($req);
return;
}
###############################################################################
sub msf_item {
my ($handle, $mark, $item) = @_;
msfLogin($handle);
my ($refs, $req, $resp, $xopts);
my $isVuln = 0;
$isVuln = 1 if ($item->{'osvdb'} ne "0");
if ($isVuln) {
$refs = RPC::XML::array->new("OSVDB-" . $item->{'osvdb'},) if ($item->{'osvdb'});
$info =
"Message: "
. $item->{'message'}
. ", uri = "
. $item->{'uri'}
. ", method = "
. $item->{'method'}
. ", result = "
. $item->{'result'};
$xopts = RPC::XML::struct->new('host' => $mark->{'ip'},
'port' => $mark->{'port'},
'proto' => 'tcp',
'name' => 'nikto.' . $item->{'nikto_id'},
'refs' => $refs,
'info' => $info
);
$req = RPC::XML::request->new("db.report_vuln", $TEMPLATES{'msftoken'}, $xopts);
}
else {
my $data = RPC::XML::struct->new('message' => $item->{'message'},
'uri' => $item->{'uri'},
'method' => $item->{'method'},
'result' => $item->{'result'}
);
$xopts = RPC::XML::struct->new('host' => $mark->{'ip'},
'port' => $mark->{'port'},
'proto' => 'tcp',
'ntype' => 'nikto.' . $item->{'nikto_id'},
'data' => $data
);
$req = RPC::XML::request->new("db.report_note", $TEMPLATES{'msftoken'}, $xopts);
}
$resp = $cli->send_request($req);
return;
}
###############################################################################
sub msfLogin {
($cli) = @_;
return if ($TEMPLATES{'msflasttoken'} && time() - $TEMPLATES{'msflasttoken'} < (60 * 10));
$req = RPC::XML::request->new("auth.login",
RPC::XML::string->new($TEMPLATES{'msfuser'}),
RPC::XML::string->new($TEMPLATES{'msfpass'})
);
$resp = $cli->send_request($req);
if ($resp->{'result'}->value eq "success") {
$TEMPLATES{'msftoken'} = $resp->{'token'}->value;
$TEMPLATES{'msflasttoken'} = time();
}
else {
nprint("Metasploit Login/Password failed... exiting");
exit;
}
}
1;
nikto-2.1.4/plugins/nikto_report_nbe.plugin 0000664 0000000 0000000 00000006566 11554552544 0021135 0 ustar 00root root 0000000 0000000 #VERSION,2.01
# $Id: nikto_report_nbe.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2010 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:
# Reporting in NBE format.
###############################################################################
sub nikto_report_nbe_init {
my $id = { name => "report_nbe",
full_name => "NBE reports",
author => "Seccubus",
description => "Produces a NBE report.",
report_head => \&nbe_open,
report_item => \&nbe_item,
report_format => 'nbe',
copyright => "2010 CIRT Inc."
};
return $id;
}
sub nbe_open {
my ($file) = @_;
# Open file and produce header
open(OUT, ">>$file") || die print STDERR "+ ERROR: Unable to open '$file' for write: $@\n";
# Write header
print OUT
"timestamps|network|host|port|nikto_id|prio|$VARIABLES{'name'} v$VARIABLES{'version'}/$VARIABLES{'core_version'}\n";
return OUT;
}
sub nbe_item {
my ($handle, $mark, $item) = @_;
foreach my $uri (split(' ', $item->{'uri'})) {
my ($line, $network);
if ($item->{'mark'}->{'hostname'} && $item->{'mark'}->{'port'} && $item->{'nikto_id'}) {
if ($item->{'mark'}->{'hostname'} =~ /^(\d+\.\d+\.\d+)\.\d+$/) {
$network = $1;
}
$line .= "results|";
$line .= "$network|";
$line .= "$item->{'mark'}->{'hostname'}|";
$line .= "$item->{'mark'}->{'port'}|";
$line .= "$item->{'nikto_id'}|";
$line .= "Security Warning|";
if ($item->{'osvdb'}) { $line .= "OSVDB-$item->{'osvdb'}: " }
if ($item->{'method'}) { $line .= "$item->{'method'} " }
if ($uri) { $line .= "${'uri'}: " }
$line .= $item->{'message'};
print $handle "$line\n";
}
else {
my $debug = "Data provided:\n$handle, $mark, $item";
$debug .= "\nContents of \$mark:";
foreach my $key (sort keys %$mark) {
$debug .= "\n$key - $mark->{$key}";
}
$debug .= "\nContents of \$item:";
foreach my $key (sort keys %$item) {
$debug .= "\n$key - $item->{$key}";
}
$debug .= "\nContents of \$item->{mark}:";
foreach my $key (sort keys %{ $item->{mark} }) {
$debug .= "\n$key - $item->{mark}->{$key}";
}
#die $debug;
nprint("+ Invalid reporting line: $debug");
}
}
}
1;
nikto-2.1.4/plugins/nikto_report_text.plugin 0000664 0000000 0000000 00000004617 11554552544 0021350 0 ustar 00root root 0000000 0000000 #VERSION,2.05
# $Id: nikto_report_text.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2007 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:
# Reporting
###############################################################################
sub nikto_report_text_init {
my $id = { name => "report_text",
full_name => "Text reports",
author => "Deity",
description => "Produces a text report.",
report_head => \&text_open,
report_host_start => \&text_host,
report_item => \&text_item,
report_format => 'txt',
copyright => "2008 CIRT Inc."
};
return $id;
}
sub text_open {
my ($file) = @_;
# Open file and produce header
open(OUT, ">>$file") || die print STDERR "+ ERROR: Unable to open '$file' for write: $@\n";
# Write header
print OUT "- $VARIABLES{'name'} v$VARIABLES{'version'}/$VARIABLES{'core_version'}\n";
return OUT;
}
sub text_host {
my ($handle, $mark) = @_;
my ($curr_host, $curr_port);
print $handle "+ Target Host: $mark->{hostname}\n";
print $handle "+ Target Port: $mark->{port}\n";
}
sub text_item {
my ($handle, $mark, $item) = @_;
foreach my $uri (split(' ', $item->{uri})) {
my $line = "+ ";
if ($item->{osvdb}) { $line .= "OSVDB-$item->{osvdb}: " }
if ($item->{method}) { $line .= "$item->{method} " }
if ($uri) { $line .= "${uri}: " }
$line .= $item->{message};
print $handle "$line\n";
}
}
1;
nikto-2.1.4/plugins/nikto_report_xml.plugin 0000664 0000000 0000000 00000017601 11554552544 0021161 0 ustar 00root root 0000000 0000000 #VERSION,2.05
# $Id: nikto_report_xml.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2007 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:
# Reporting
###############################################################################
sub nikto_report_xml_init {
my $id = { name => "report_xml",
full_name => "Report as XML",
author => "Sullo/Jabra",
description => "Produces an XML report.",
report_head => \&xml_head,
report_host_start => \&xml_host_start,
report_host_end => \&xml_host_end,
report_item => \&xml_item,
report_summary => \&xml_summary,
report_close => \&xml_close,
report_format => 'xml',
copyright => "2008 CIRT Inc."
};
# load up the templates now
xml_open_templates();
return $id;
}
sub xml_head {
my ($file) = @_;
# Write header for xml file, return file handle
open(OUT, ">>$file") || die print STDERR "+ ERROR: Unable to open '$file' for write: $@\n";
my $xml = xml_change_vars($TEMPLATES{xml_start});
$xml =~ s/\#NIKTODTD/$CONFIGFILE{NIKTODTD}/;
print OUT "$xml";
return OUT;
}
###############################################################################
sub xml_summary {
my ($handle, $mark) = @_;
my $xml = xml_change_vars($TEMPLATES{'xml_summary'}, $mark);
print $handle "$xml\n";
return;
}
###############################################################################
sub xml_close {
my ($handle, $mark) = @_;
my $xml = xml_change_vars($TEMPLATES{xml_close}, $mark);
print $handle $xml;
close($handle);
return;
}
###############################################################################
sub xml_host_start {
my ($handle, $mark) = @_;
my $xml = xml_change_vars($TEMPLATES{xml_host_head}, $mark);
print $handle "$xml\n";
return;
}
###############################################################################
sub xml_host_end {
my ($handle, $mark) = @_;
my $xml = xml_change_vars($TEMPLATES{xml_end}, $mark);
print $handle "$xml\n";
return;
}
###############################################################################
sub xml_item {
my ($handle, $mark, $item) = @_;
my $xml = xml_change_vars($TEMPLATES{xml_host_item}, $mark, $item);
print $handle "$xml\n";
return;
}
###############################################################################
sub xml_open_templates {
foreach my $t (dirlist($CONFIGFILE{TEMPLATEDIR}, "xml.*")) {
open(T, "<$CONFIGFILE{TEMPLATEDIR}/$t");
my @TEMPLATE = ;
close(T);
my $T = join("", @TEMPLATE);
$t =~ s/\..*$//;
$TEMPLATES{$t} = $T;
}
return;
}
###############################################################################
sub xml_change_vars {
my ($template, $mark, $item) = @_;
my %variables;
my $protocol = "http";
if ($mark->{ssl}) { $protocol .= "s"; }
$variables{"#TEMPL_HCTR"} = $VARIABLES{'TEMPL_HCTR'};
$variables{"#TEMPL_END"} = date_disp($mark->{'end_time'});
$variables{"#TEMPL_HOSTNAME"} = hex_enc($mark->{'hostname'});
$variables{"#TEMPL_HOST_HEADER"} = $mark->{'hostname'};
if (defined $mark->{vhost}) {
$variables{"#TEMPL_HOST_HEADER"} = $mark->{'vhost'};
}
$variables{"#TEMPL_SSL_INFO"} = "";
if (defined $mark->{'ssl_cipher'}) {
$variables{"#TEMPL_SSL_INFO"} =
"{ssl_cipher}\" issuers=\"$mark->{ssl_cert_issuer}\" info=\"$mark->{ssl_cert_subject}\" />";
}
$variables{"#TEMPL_IP"} = simple_enc($mark->{'ip'});
$variables{"#TEMPL_ITEMS_TESTED"} = $COUNTERS{total_checks};
$variables{"#TEMPL_PORT"} = $mark->{'port'};
$variables{"#TEMPL_START"} = date_disp($mark->{'start_time'});
$variables{"#TEMPL_END"} = date_disp($mark->{'end_time'});
$variables{"#TEMPL_NIKTO_VER"} = $VARIABLES{'version'};
$variables{"#TEMPL_BANNER"} = hex_enc($mark->{'banner'});
$variables{"#TEMPL_NIKTO_CLI"} = $CLI{'all_options'};
$variables{"#TEMPL_CTR"} = $COUNTERS{'total_checks'};
$variables{"#TEMPL_NIKTO_HOSTS_TESTED"} = $COUNTERS{'hosts_completed'};
$variables{"#TEMPL_ELAPSED"} = $mark->{'end_time'} - $mark->{'start_time'};
$variables{"#TEMPL_LINK_NAME"} = "$protocol://$mark->{'hostname'}:$mark->{'port'}";
$variables{"#TEMPL_LINK_IP"} = "$protocol://$mark->{'ip'}:$mark->{'port'}/";
$variables{"#TEMPL_ITEMS_FOUND"} = $mark->{'total_vulns'};
$variables{"#TEMPL_SCAN_START"} = localtime($COUNTERS{'scan_start'});
$variables{"#TEMPL_SCAN_END"} = localtime($COUNTERS{'scan_end'});
$variables{"#TEMPL_SCAN_ELAPSED"} = $COUNTERS{'scan_elapsed'} . " seconds";
$variables{"#TEMPL_LINK_NAME"} = "N/A";
if ($mark->{hostname} ne "") {
$variables{"#TEMPL_LINK_NAME"} = "$protocol://$mark->{hostname}:$mark->{port}/";
}
# do now in case we return early
foreach my $var (keys %variables) {
$template =~ s/$var/$variables{$var}/g;
}
if ($item->{'uri'} eq '') { return $template; }
$variables{"#ID"} = $item->{'nikto_id'};
# OSVDB info
my $OSVDB = $item->{'osvdb'};
if ($OSVDB !~ /\d+/) { $OSVDB = 0; }
$OSVDB_LINK = "http://osvdb.org/$OSVDB";
$variables{"#TEMPL_OSVDB_LINK"} = $OSVDB_LINK;
$variables{"#TEMPL_OSVDB"} = $OSVDB;
# Scanner Messages Handling
$variables{"#TEMPL_SMMSG"} = $item->{'message'};
# Positives Handling
if ($template =~ /\#TEMPL_MSG/) {
$variables{"#TEMPL_URI"} = simple_enc($item->{'uri'});
$variables{"#TEMPL_MSG"} = $item->{'message'};
$variables{"#TEMPL_HTTP_METHOD"} = $item->{'method'};
$variables{"#TEMPL_ITEM_IP_LINK"} =
"$protocol://$variables{\"#TEMPL_IP\"}:$mark->{port}$variables{\"#TEMPL_URI\"}";
$variables{"#TEMPL_ITEM_NAME_LINK"} = "";
if ($mark->{'hostname'} ne "") {
$variables{"#TEMPL_ITEM_NAME_LINK"} =
"$protocol://$variables{\"#TEMPL_HOSTNAME\"}:$mark->{port}$variables{\"#TEMPL_URI\"}";
}
}
foreach my $var (keys %variables) { $template =~ s/$var/$variables{$var}/g; }
return $template;
}
###############################################################################
sub hex_enc {
my $invar = $_[0] || return;
my $outvar;
foreach my $c (split(//, $invar)) {
my $n = ord($c);
if (($n > 127) || ($n < 32) || ($n == 38) || ($n == 60) || ($n == 62) | ($n == 34)) {
$outvar .= sprintf '%#x', $n;
}
else { $outvar .= $c; }
}
return $outvar;
}
###############################################################################
sub simple_enc {
my $var = $_[0] || return;
$var =~ s/</g;
$var =~ s/>/>/g;
$var =~ s/"/"/g;
return $var;
}
sub nikto_reports { } # so core doesn't freak
1;
nikto-2.1.4/plugins/nikto_robots.plugin 0000664 0000000 0000000 00000011100 11554552544 0020262 0 ustar 00root root 0000000 0000000 #VERSION,2.04
# $Id: nikto_robots.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2004 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:
# Check out the robots.txt file
###############################################################################
sub nikto_robots_init {
my $id = {
name => "robots",
full_name => "Robots",
author => "Sullo",
description =>
"Checks whether there's anything within the robots.txt file and analyses it for other paths to pass to other scripts.",
hooks => { recon => { method => \&nikto_robots,
weight => 49,
},
},
copyright => "2008 CIRT Inc."
};
return $id;
}
sub nikto_robots {
return if $mark->{'terminate'};
my ($mark) = @_;
my %headers;
my ($RES, $CONTENT) = nfetch($mark, "/robots.txt", "GET", "", \%headers, "", "robots");
if (($RES eq 200) || ($RES eq $FoF{'okay'}{'response'})) {
if (is_404("robots.txt", $CONTENT, $RES, $headers{'location'})) { return; }
my ($DIRS, $RFILES) = "";
my $DISCTR = 0;
my @DOC = split(/\n/, $CONTENT);
foreach my $line (@DOC) {
$line = quotemeta($line);
if ($line =~ /allow/i) {
chomp($line);
$line =~ s/\#.*$//;
$line =~ s/(?:^\s+|\s+$)//g;
$line =~ s/\s+/ /g;
$line =~ s/\\t/ /g;
$line =~ s/(?:dis)?allow(?:\\:)?\s?//i;
$line =~ s/\*//g;
$line =~ s/\/+/\//g;
if ($line eq "") { next; }
# try to figure out file vs dir... just guess...
if (($line !~ /\./) && ($line !~ /\/$/)) { $line .= "/"; }
$line = LW2::uri_normalize($line);
# figure out dirs/files...
my $realdir = LW2::uri_get_dir($line);
my $realfile = $line;
$realfile =~ s/^$realdir//;
nprint("- robots.txt entry dir:$realdir -- file:$realfile", "d");
if (($realdir ne "") && ($realdir ne "/")) { $DIRS{$realdir}++; }
if (($realfile ne "") && ($realfile ne "/")) { $RFILES{$realfile}++; }
$DISCTR++;
} # end if $line =~ disallow
} # end foreach my $line (@DOC)_
# add them to mutate dir/file
my $raw;
foreach $raw (sort keys %DIRS) {
$raw =~ s/\\//g;
if ($VARIABLES{"\@MUTATEDIRS"} !~ /$raw/) {
$VARIABLES{"\@MUTATEDIRS"} .= " $raw";
}
if ($raw =~ /cgi/ && $VARIABLES{"\@CGIDIRS"} !~ /$raw/) {
$VARIABLES{"\@CGIDIRS"} .= " $raw";
}
if ($raw =~ /forum/ && $VARIABLES{"\@NUKE"} !~ /$raw/) {
$VARIABLES{"\@NUKE"} .= " $raw";
}
if ($raw =~ /pass/ && $VARIABLES{"\@PASSWORDDIRS"} !~ /$raw/) {
$VARIABLES{"\@PASSWORDDIRS"} .= " $raw";
}
}
foreach $raw (sort keys %RFILES) {
$raw =~ s/\\//g;
if ($VARIABLES{"\@MUTATEFILES"} !~ /$raw/) {
$VARIABLES{"\@MUTATEFILES"} .= " $raw";
}
if ($raw =~ /pass/ && $VARIABLES{"\@PASSWORDFILES"} !~ /$raw/) {
$VARIABLES{"\@PASSWORDFILES"} .= " $raw";
}
}
my $msg;
if ($DISCTR eq 1) { $msg = "contains $DISCTR entry which should be manually viewed."; }
elsif ($DISCTR > 1) { $msg = "contains $DISCTR entries which should be manually viewed."; }
else { $msg = "retrieved but it does not contain any 'disallow' entries (which is odd)."; }
add_vulnerability($mark, "robots.txt $msg", 999996, 0, "GET", "/robots.txt", \%result);
}
}
1;
nikto-2.1.4/plugins/nikto_single.plugin 0000664 0000000 0000000 00000020230 11554552544 0020237 0 ustar 00root root 0000000 0000000 #VERSION,2.03
# $Id: nikto_single.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2004 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:
# Perform single request mode
###############################################################################
sub single {
LW2::http_init_request(\%request);
$width = 44;
# never ask for @SKIPS in questions
my @SKIPS = qw/normalize_incoming_headers lowercase_incoming_headers MAGIC http_eol/;
# set this to defaults so it will ask
$request{'whisker'}->{'force_close'} = 1;
$request{'whisker'}->{'uri_user'} = "";
$request{'whisker'}->{'uri_password'} = "";
$request{'whisker'}->{'include_host_in_uri'} = 0;
$request{'whisker'}->{'retry'} = 0;
$request{'User-Agent'} = "Mozilla/4.75 ($VARIABLES{'name'}/$VARIABLES{'version'}";
#### Ask
print "-" x $width, " Nikto $VARIABLES{'version'}\n";
print "-" x $width, " Single Request Mode\n";
$request{'whisker'}{'host'} = ask("Hostname or IP") || die print "Must specify host\n";
$request{'whisker'}{'port'} = ask("Port (80)") || 80;
$request{'whisker'}{'uri'} = ask("URI (/)") || "/";
$request{'whisker'}{'ssl'} = ask("SSL (0)") || $request{'whisker'}{'ssl'};
$request{'whisker'}->{'proxy_host'} = ask("Proxy host") || "";
$request{'whisker'}->{'proxy_port'} = ask("Proxy port") || "";
if ($request{'whisker'}->{'proxy_host'} ne "") {
my $id = ask("Proxy ID");
my $pw = ask("Proxy PW");
if (($id ne "") || ($pw ne "")) { LW2::auth_set("proxy-basic", \%request, $id, $pw); }
}
else {
delete $request{'whisker'}->{'proxy_host'};
delete $request{'whisker'}->{'proxy_port'};
}
$VARS{'html'} = ask("Show HTML Response (1)") || 1;
$request{'whisker'}{'version'} = ask("HTTP Version ($request{'whisker'}{'version'})")
|| $request{'whisker'}{'version'};
$request{'whisker'}{'method'} = ask("HTTP Method ($request{'whisker'}{'method'})")
|| $request{'whisker'}{'method'};
#$request{'Host'} = ask("Virtual Host") || "";
$request{'User-Agent'} = ask("User-Agent ($request{'User-Agent'})") || $request{'User-Agent'};
$request{'Connection'} = ask("Connection ($request{'Connection'})") || $request{'Connection'};
$request{'data'} = ask("Data");
if ($request{'data'} ne "") {
$request{'Content-Length'} = length($request{'data'});
$request{'Content-Length'} = ask("Content-Length ($request{'Content-Length'})")
|| $request{'Content-Length'};
}
# get request->whisker hash answers
foreach my $key (sort keys %{ $request{'whisker'} }) {
# already asked these
if ($key eq "whisker") { next; }
if ($key eq "host") { next; }
if ($key eq "port") { next; }
if ($key eq "uri") { next; }
if ($key eq "ssl") { next; }
if ($key eq "version") { next; }
if ($key eq "method") { next; }
if ($key eq "data") { next; }
if ($key eq "uri_param_sep") { next; }
if ($key eq "trailing_slurp") { next; }
if ($key eq "ignore_duplicate_headers") { next; }
if ($key eq "force_open") { next; }
if ($key eq "proxy_host") { next; }
if ($key eq "proxy_port") { next; }
# skips
my $s = 0;
foreach my $skip (@SKIPS) {
if ($key eq $skip) { $s = 1; last; }
}
if ($s) { next; }
$request{'whisker'}{$key} = ask("$key ($request{'whisker'}{$key})")
|| $request{'whisker'}{$key};
}
$request{'whisker'}->{'encode_anti_ids'} = ask("Enable Encoding (0)");
if ($request{'whisker'}->{'encode_anti_ids'} eq 1) {
print "
\t1 Random URI encoding (non-UTF8)
\t2 Directory self-reference (/./)
\t3 Premature URL ending
\t4 Prepend long random string
\t5 Fake parameter
\t6 TAB as request spacer
\t7 Random case sensitivity
\t8 Use Windows directory separator (\\)\n";
$request{'whisker'}{'encode_anti_ids'} = ask("Encoding Methods");
if ($request{'whisker'}{'encode_anti_ids'} eq "") {
delete($request{'whisker'}->{'encode_anti_ids'});
}
}
else {
delete($request{'whisker'}->{'encode_anti_ids'});
}
print "-" x $width, " Done with questions\n";
#### fixup
if ($request{'whisker'}{'ssl'}) { $request{'whisker'}->{'ssl_save_info'} = 1; }
if ($request{'whisker'}{'data'} eq "") {
delete $request{'whisker'}{'data'};
delete $request{'whisker'}{'Content-Length'};
}
if ($request{'whisker'}->{'uri_user'} eq "") { delete $request{'whisker'}->{'uri_user'}; }
if ($request{'whisker'}->{'uri_password'} eq "") {
delete $request{'whisker'}->{'uri_password'};
}
if ($request{'whisker'}->{'host'} eq "") { delete $request{'whisker'}->{'host'}; }
my ($hostname, $ip) = resolve($request{'whisker'}{'host'});
if ($ip eq "") { nprint("+ ERROR: could not resolve host name"); exit; }
#### do request
LW2::http_reset(); # force-close any old connections
LW2::http_fixup_request(\%request);
LW2::http_do_request_timeout(\%request, \%result);
#### print output
print "\tHost Name: $hostname\n";
print "\tHost IP: $ip\n";
print "\tHTTP Response Code: $result{'whisker'}->{'code'}\n";
print "-" x $width, " Connection Details\n";
foreach my $item (sort keys %request) {
if ($item eq "whisker") { next; }
if ($item eq "ssl_save_info") { next; }
print "\t$item: $request{$item}\n";
}
foreach my $item (sort keys %{ $request{'whisker'} }) {
if ($item eq "MAGIC") { next; }
if ($item eq "lowercase_incoming_headers") { next; }
if ($item eq "normalize_incoming_headers") { next; }
if ($item eq "stats_reqs") { next; }
if ($item eq "stats_syns") { next; }
if ($item eq "socket_state") { next; }
if ($item eq "http_eol") { next; }
print "\t$item: $request{'whisker'}->{$item}\n";
}
print "-" x $width, " Response Headers\n";
foreach my $item (sort keys %result) {
if ($item eq "whisker") { next; }
print "\t$item: $result{$item}\n";
}
foreach my $item (sort keys %{ $result{'whisker'} }) {
if ($item eq "data") { next; }
if ($item eq "MAGIC") { next; }
if ($item eq "header_order") { next; }
if ($item eq "lowercase_incoming_headers") { next; }
if ($item eq "stats_reqs") { next; }
if ($item eq "stats_syns") { next; }
if ($item eq "socket_state") { next; }
print "\t$item: $result{'whisker'}->{$item}\n";
}
if ($VARS{'html'}) {
print "-" x $width, " Response Content\n";
print "$result{'whisker'}->{'data'}\n";
}
exit;
}
sub ask {
my $q = $_[0];
$q =~ s/\s$//;
print " " x ($width - length($q)), "$q: ";
my $input = ;
chomp($input);
return $input;
}
sub nikto_single { } # so core doesn't freak
1;
nikto-2.1.4/plugins/nikto_ssl.plugin 0000664 0000000 0000000 00000003461 11554552544 0017566 0 ustar 00root root 0000000 0000000 #VERSION,2.00
# $Id: nikto_ssl.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2010 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:
# Test certificate information
###############################################################################
sub nikto_ssl_init {
my $id = { name => "ssl",
full_name => "SSL and cert checks",
author => "Sullo",
description => "Perform checks on SSL/Certificates",
hooks => { scan => { method => \&nikto_ssl, } },
copyright => "2010 CIRT Inc."
};
return $id;
}
sub nikto_ssl {
my ($mark) = @_;
if ($mark->{ssl}) {
$mark->{'ssl_cert_subject'} =~ /CN=([^$\/ ]+)/;
my $cn_name = $1;
if (($mark->{'hostname'} ne $cn_name) && ($cn_name ne '')) {
add_vulnerability($mark,
"Hostname '$mark->{'hostname'}' does not match certificate's CN '$cn_name'",
999992, 0);
}
}
}
1;
nikto-2.1.4/plugins/nikto_subdomain.plugin 0000664 0000000 0000000 00000005507 11554552544 0020751 0 ustar 00root root 0000000 0000000 #VERSION,2.01
# $Id: nikto_subdomain.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2004 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:
# Look for subdomains
###############################################################################
sub nikto_subdomain_init {
my $id = { name => "subdomain",
full_name => "Sub-domain forcer",
author => "Ryan Dewhurst",
description => "Attempts to bruteforce commonly known sub-domains",
hooks => {
scan => { method => \&nikto_subdomain,
weight => 20,
},
},
copyright => "2009 Ryan Dewhurst"
};
return $id;
}
sub nikto_subdomain {
return if $mark->{'terminate'};
my ($mark) = @_;
my $dbarray = init_db("db_subdomains");
# Record the host for future use
my $host = $mark->{'hostname'};
# Check whether the host is an IP address
if (index($host, '.') < 0 || $host =~ /^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$/) {
# Host is an IP address, don't bother!
nprint("Host given to subdomain is an IP address or an unqualified hostname; skipping",
"v");
return;
}
# Check if the start of the domain is "www"
$host =~ s/^www\.//;
my $nocache_enabled = 0;
if ($CLI{'nocache'}) { $nocache_enabled = 1; }
$CLI{'nocache'} = 1;
foreach my $item (@$dbarray) {
return if $mark->{'terminate'};
# Use nfetch to minimize extra code
# First we need to mangle the host.
$mark->{'hostname'} = $item->{'subdomain'} . "." . $host;
my ($result, $content, $error) = nfetch($mark, "/", "GET", "", "subdomain");
if ($error eq "") {
add_vulnerability($mark, "Subdomain $item->{'subdomain'} found", $item->{'nikto_id'},
0);
}
} # End foreach
if (!$nocache_enabled) { undef $CLI{'nocache'}; }
} # End sub
1;
nikto-2.1.4/plugins/nikto_tests.plugin 0000664 0000000 0000000 00000024462 11554552544 0020133 0 ustar 00root root 0000000 0000000 #VERSION,2.03
# $Id: nikto_tests.plugin 632 2011-02-19 02:49:31Z sullo $
###############################################################################
# Copyright (C) 2007 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:
# Perform the full database of nikto tests against a target
###############################################################################
sub nikto_tests_init {
my $id = { name => "tests",
full_name => "Nikto Tests",
author => "Sullo, Deity",
description => "Test host with the standard Nikto tests",
copyright => "2008 CIRT Inc.",
hooks => {
scan => { method => \&nikto_tests,
weight => 99,
},
},
options => {
passfiles => "Flag to indicate whether to check for common password files",
all => "Flag to indicate whether to check all files with all directories",
report => "Report a status after the passed number of tests",
}
};
return $id;
}
sub nikto_tests {
return if $mark->{'terminate'};
my ($mark, $parameters) = @_;
# this is the actual the looped code for all the checks
foreach my $checkid (sort keys %TESTS) {
return if $mark->{'terminate'};
if ($checkid >= 500000) { next; } # skip TESTS added manually during run (for reports)
# replace variables in the uri
my @urilist = change_variables($TESTS{$checkid}{'uri'});
# Now repeat for each uri
foreach my $uri (@urilist) {
return if $mark->{'terminate'};
my %headers;
(my $res, $content, $error) =
nfetch($mark, $uri,
$TESTS{$checkid}{'method'},
$TESTS{$checkid}{'data'},
\%headers, "", $checkid);
# auth is now done in nfetch
if ($res eq 200) {
nprint("+ $uri - 200/OK Response could be $TESTS{$checkid}{'message'}")
if $OUTPUT{'show_ok'};
}
elsif ($res =~ /30(?:[0-3]|7)/) {
nprint( "+ $uri - Redirects ($res) to "
. $headers{'location'}
. " , $TESTS{$checkid}{'message'}")
if $OUTPUT{'show_redirects'};
}
my $m1_method = my $m1o_method = my $m1a_method = my $f2_method = my $f1_method =
"content";
my $positive = 0;
# how to check each conditional
if ($TESTS{$checkid}{'match_1'} =~ /^[0-9]{3}$/) { $m1_method = "code"; }
if ($TESTS{$checkid}{'match_1_or'} =~ /^[0-9]{3}$/) { $m1o_method = "code"; }
if ($TESTS{$checkid}{'match_1_and'} =~ /^[0-9]{3}$/) { $m1a_method = "code"; }
if ($TESTS{$checkid}{'fail_1'} =~ /^[0-9]{3}$/) { $f1_method = "code"; }
if ($TESTS{$checkid}{'fail_2'} =~ /^[0-9]{3}$/) { $f2_method = "code"; }
# basic match for positive result
if ($m1_method eq "content") {
if ($content =~ /$TESTS{$checkid}{'match_1'}/) {
$positive = 1;
}
}
else {
if (($res eq $TESTS{$checkid}{'match_1'}) || ($res eq $FoF{'okay'}{'response'})) {
$positive = 1;
}
}
# no match, check optional match
if ((!$positive) && ($TESTS{$checkid}{'match_1_or'} ne "")) {
if ($m1o_method eq "content") {
if ($content =~ /$TESTS{$checkid}{'match_1_or'}/) {
$positive = 1;
}
}
else {
if ( ($res eq $TESTS{$checkid}{'match_1_or'})
|| ($res eq $FoF{'okay'}{'response'})) {
$positive = 1;
}
}
}
# matched on something, check fails/ands
if ($positive) {
if ($TESTS{$checkid}{'fail_1'} ne "") {
if ($f1_method eq "content") {
if ($content =~ /$TESTS{$checkid}{'fail_1'}/) { next; }
}
else {
if ($res eq $TESTS{$checkid}{'fail_1'}) { next; }
}
}
if ($TESTS{$checkid}{'fail_2'} ne "") {
if ($f2_method eq "content") {
if ($content =~ /$TESTS{$checkid}{'fail_2'}/) { next; }
}
else {
if ($res eq $TESTS{$checkid}{'fail_2'}) { next; }
}
}
if ($TESTS{$checkid}{'match_1_and'} ne "") {
if ($m1a_method eq "content") {
if ($content !~ /$TESTS{$checkid}{'match_1_and'}/) { next; }
}
else {
if ($res ne $TESTS{$checkid}{'match_1_and'}) { next; }
}
}
# if it's an index.php, check for normal /index.php to see if it's a FP
if ($uri =~ /^\/index.php\?/) {
my $content = rm_active_content($content, $uri);
if (LW2::md4($content) eq $FoF{'index.php'}{'match'}) { next; }
}
# lastly check for a false positive based on file extension or type
if (($m1_method eq "code") || ($m1o_method eq "code")) {
if (is_404($uri, $content, $res, $headers{'location'})) { next; }
}
$TESTS{$checkid}{'osvdb'} =~ s/\s+/ OSVDB\-/g;
add_vulnerability($mark, "$uri: $TESTS{$checkid}{'message'}",
$checkid,
$TESTS{$checkid}{'osvdb'},
$TESTS{$checkid}{'method'}, $uri);
}
}
# Percentages
if (($OUTPUT{'progress'}) && ($parameters->{'report'})) {
if (($COUNTERS{'totalrequests'} % $parameters->{'report'}) == 0) {
status_report();
}
}
} # end check loop
# Perform mutation tests
if ($parameters->{'passfiles'}) {
passchecks($mark);
}
if ($parameters->{'all'}) {
allchecks($mark);
}
return;
}
sub passchecks {
my ($mark) = @_;
my @DIRS = (split(/ /, $VARIABLES{"\@PASSWORDDIRS"}));
my @PFILES = (split(/ /, $VARIABLES{"\@PASSWORDFILES"}));
my @EXTS = qw(asp bak dat data dbc dbf exe htm html htx ini lst txt xml php php3 phtml);
nprint("- Performing passfiles mutation", "v");
# Update total requests for status reports
my @CGIS = split(/ /, $VARIABLES{'@CGIDIRS'});
$COUNTERS{'total_checks'} =
$COUNTERS{'total_checks'} +
(scalar(@DIRS) * scalar(@PFILES)) +
(scalar(@DIRS) * scalar(@PFILES) * scalar(@EXTS)) +
((scalar(@DIRS) * scalar(@PFILES) * scalar(@EXTS) * scalar(@CGIS)) * 2);
foreach my $dir (@DIRS) {
return if $mark->{'terminate'};
foreach my $file (@PFILES) {
next if ($file eq "");
# dir/file
testfile($mark, "$dir$file", "passfiles", "299998");
foreach my $ext (@EXTS) {
return if $mark->{'terminate'};
# dir/file.ext
testfile($mark, "$dir$file.$ext", "passfiles", "299998");
foreach my $cgi (@CGIS) {
$cgi =~ s/\/$//;
# dir/file.ext
testfile($mark, "$cgi$dir$file.$ext", "passfiles", "299998");
# dir/file
testfile($mark, "$cgi$dir$file", "passfiles", "299998");
}
}
}
}
}
sub allchecks {
my ($mark) = @_;
# Hashes to temporarily store files/dirs in
# We're using hashes to ensure that duplicates are removed
my (%FILES, %DIRS);
# build the arrays
nprint("- Loading root level files", "v");
foreach my $checkid (keys %TESTS) {
# Expand out vars so we get full matches
my @uris = change_variables($TESTS{$checkid}{'uri'});
foreach my $uri (@uris) {
my $dir = LW2::uri_get_dir($uri);
my $file = $uri;
if ($dir ne "") {
$DIRS{$dir} = "";
$dir =~ s/([^a-zA-Z0-9])/\\$1/g;
$file =~ s/$dir//;
}
if (($file ne "") && ($file !~ /^\?/)) {
$FILES{$file} = "";
}
}
}
# Update total requests for status reports
$COUNTERS{'total_checks'} = $COUNTERS{'total_checks'} + (keys(%DIRS) * keys(%FILES));
# Now do a check for each item - just check the return status, nothing else
foreach my $dir (keys %DIRS) {
foreach my $file (keys %FILES) {
return if $mark->{'terminate'};
testfile($mark, "$dir$file", "all checks", 299999);
}
}
}
sub testfile {
return if $mark->{'terminate'};
my ($mark, $uri, $name, $tid) = @_;
my ($res, $content, $error) = nfetch($mark, "$uri", "GET", "", "", "", "Tests: $name");
nprint("- $res for $uri (error: $error)", "v");
if ($error) {
$mark->{'total_errors'}++;
nprint("+ ERROR: $uri returned an error: $error", "e");
return;
}
if ($res == 200) {
add_vulnerability($mark, "$uri: file found during $name mutation", "$tid", "0", "GET");
}
}
1;
nikto-2.1.4/templates/ 0000775 0000000 0000000 00000000000 11554552544 0014652 5 ustar 00root root 0000000 0000000 nikto-2.1.4/templates/htm_close.tmpl 0000664 0000000 0000000 00000000137 11554552544 0017526 0 ustar 00root root 0000000 0000000 © 2008 CIRT, Inc.
nikto-2.1.4/templates/htm_end.tmpl 0000664 0000000 0000000 00000000010 11554552544 0017155 0 ustar 00root root 0000000 0000000
nikto-2.1.4/templates/htm_host_head.tmpl 0000664 0000000 0000000 00000001653 11554552544 0020363 0 ustar 00root root 0000000 0000000
Target IP |
#TEMPL_IP |
Target hostname |
#TEMPL_HOSTNAME |
Target Port |
#TEMPL_PORT |
HTTP Server |
#TEMPL_BANNER |
Start Time |
#TEMPL_START |
Site Link (Name) |
#TEMPL_LINK_NAME
|
Site Link (IP) |
#TEMPL_LINK_IP
|
nikto-2.1.4/templates/htm_host_im.tmpl 0000664 0000000 0000000 00000000535 11554552544 0020065 0 ustar 00root root 0000000 0000000
nikto-2.1.4/templates/htm_host_item.tmpl 0000664 0000000 0000000 00000001414 11554552544 0020413 0 ustar 00root root 0000000 0000000
nikto-2.1.4/templates/htm_start.tmpl 0000664 0000000 0000000 00000001473 11554552544 0017562 0 ustar 00root root 0000000 0000000
Nikto Report
nikto-2.1.4/templates/htm_stop.tmpl 0000664 0000000 0000000 00000000137 11554552544 0017406 0 ustar 00root root 0000000 0000000 © 2007 CIRT, Inc.
nikto-2.1.4/templates/htm_summary.tmpl 0000664 0000000 0000000 00000001246 11554552544 0020120 0 ustar 00root root 0000000 0000000
Software Details |
Nikto #TEMPL_NIKTO_VER |
CLI Options |
#TEMPL_NIKTO_CLI |
Hosts Tested |
#TEMPL_NIKTO_HOSTS_TESTED |
Start Time |
#TEMPL_SCAN_START |
End Time |
#TEMPL_SCAN_END |
Elapsed Time |
#TEMPL_SCAN_ELAPSED |
nikto-2.1.4/templates/xml_close.tmpl 0000664 0000000 0000000 00000000015 11554552544 0017531 0 ustar 00root root 0000000 0000000
nikto-2.1.4/templates/xml_end.tmpl 0000664 0000000 0000000 00000000216 11554552544 0017175 0 ustar 00root root 0000000 0000000
nikto-2.1.4/templates/xml_host_head.tmpl 0000664 0000000 0000000 00000000367 11554552544 0020374 0 ustar 00root root 0000000 0000000
#TEMPL_SSL_INFO
nikto-2.1.4/templates/xml_host_im.tmpl 0000664 0000000 0000000 00000000100 11554552544 0020061 0 ustar 00root root 0000000 0000000 -
#TEMPL_SMMSG
nikto-2.1.4/templates/xml_host_item.tmpl 0000664 0000000 0000000 00000000445 11554552544 0020426 0 ustar 00root root 0000000 0000000 -
nikto-2.1.4/templates/xml_start.tmpl 0000664 0000000 0000000 00000000423 11554552544 0017564 0 ustar 00root root 0000000 0000000
nikto-2.1.4/templates/xml_summary.tmpl 0000664 0000000 0000000 00000000000 11554552544 0020113 0 ustar 00root root 0000000 0000000 |