Lucene search

K
openvasCopyright (C) 2017 Greenbone AGOPENVAS:1361412562310112074
HistoryOct 09, 2017 - 12:00 a.m.

Apache OpenMeetings Web Services Detection

2017-10-0900:00:00
Copyright (C) 2017 Greenbone AG
plugins.openvas.org
12

This host is running Apache OpenMeetings, a software used for
presenting, online training, web conferencing, collaborative whiteboard drawing and document
editing, and user desktop sharing.

# SPDX-FileCopyrightText: 2017 Greenbone AG
# Some text descriptions might be excerpted from (a) referenced
# source(s), and are Copyright (C) by the respective right holder(s).
#
# SPDX-License-Identifier: GPL-2.0-or-later

CPE = "cpe:/a:apache:openmeetings";

if(description)
{
  script_oid("1.3.6.1.4.1.25623.1.0.112074");
  script_version("2023-03-31T10:19:34+0000");
  script_tag(name:"last_modification", value:"2023-03-31 10:19:34 +0000 (Fri, 31 Mar 2023)");
  script_tag(name:"creation_date", value:"2017-10-09 11:54:21 +0200 (Mon, 09 Oct 2017)");
  script_tag(name:"cvss_base_vector", value:"AV:N/AC:L/Au:N/C:N/I:N/A:N");
  script_tag(name:"cvss_base", value:"0.0");

  script_tag(name:"qod_type", value:"remote_banner");

  script_name("Apache OpenMeetings Web Services Detection");

  script_category(ACT_GATHER_INFO);
  script_family("Product detection");
  script_copyright("Copyright (C) 2017 Greenbone AG");
  script_dependencies("gb_apache_openmeetings_http_detect.nasl");
  script_require_ports("Services/www", 5080);
  script_mandatory_keys("apache/openmeetings/http/detected");

  script_tag(name:"summary", value:"This host is running Apache OpenMeetings, a software used for
  presenting, online training, web conferencing, collaborative whiteboard drawing and document
  editing, and user desktop sharing.");

  script_xref(name:"URL", value:"https://openmeetings.apache.org/");

  exit(0);
}

include("http_func.inc");
include("http_keepalive.inc");
include("host_details.inc");

if(!port = get_app_port(cpe: CPE))
  exit(0);

if(!dir = get_app_location(cpe: CPE, port: port))
  exit(0);

if(dir == "/")
  dir = "";

url = dir + "/services/services";

req = http_get(item: url, port: port);
buf = http_keepalive_send_recv(port: port, data: req, bodyonly: FALSE);

if("/services/services" >< buf && "Service list" >< buf) {
  report = 'The following services were detected at ' + http_report_vuln_url(url: url, port: port, url_only: TRUE) + ' :\n';
  found_service = FALSE;

  #SOAP
  if ("Available SOAP services" >< buf) {
    soap_sep = '?wsdl">';
    soap_pattern = '<a href="(.*)\\?wsdl">';

    services = egrep(string: buf, pattern: soap_pattern, icase: TRUE);

    if(services) {
      report += '\nSOAP Services:\n';

      foreach service(split(services, sep: soap_sep)) {
        service_url = eregmatch(string: service, pattern: soap_pattern, icase: TRUE);

        if(!isnull(service_url[1])) {
          service_name = eregmatch(string: service_url[1], pattern:"services\/(.*)", icase: TRUE);

          set_kb_item(name:"openmeetings/services", value:service_name[1]);
          report = report + '\nName: ' + service_name[1] + '\nWSDL: ' + service_url[1] + '?wsdl\n';
          found_service = TRUE;
        }
      }
    }
  }

  # REST
  if("Available RESTful services" >< buf) {
    rest_sep = '?_wadl">';
    rest_pattern = '<a href="(.*)\\?_wadl">';

    services = eregmatch(string: buf, pattern: 'Available RESTful services(.*)', icase: TRUE);

    if(services[1]) {
      report += '\n\nREST Services:\n';

      foreach service(split(services[1], sep: rest_sep)) {
        service_url = eregmatch(string: service, pattern: rest_pattern, icase: TRUE);

        if(!isnull(service_url[1])) {
          report = report + '\nWADL: ' + service_url[1] + '?_wadl\n';
          found_service = TRUE;
        }
      }
    }
  }

  if(found_service)
    log_message(data: report, port: port);
}

exit(0);