Lucene search
+L

Apache Axis Detection (HTTP)

🗓️ 06 Apr 2016 00:00:00Reported by Copyright (C) 2016 SCHUTZWERK GmbHType 
openvas
 openvas
🔗 plugins.openvas.org👁 125 Views

Apache Axis SOAP stack HTTP detection and version chec

Refs
Code
# SPDX-FileCopyrightText: 2016 SCHUTZWERK GmbH
# SPDX-FileCopyrightText: Reworked detection methods / pattern / code since 2016 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

if(description)
{
  script_oid("1.3.6.1.4.1.25623.1.0.111093");
  script_version("2026-04-17T15:51:27+0000");
  script_tag(name:"last_modification", value:"2026-04-17 15:51:27 +0000 (Fri, 17 Apr 2026)");
  script_tag(name:"creation_date", value:"2016-04-06 07:12:12 +0200 (Wed, 06 Apr 2016)");
  script_tag(name:"cvss_base", value:"0.0");
  script_tag(name:"cvss_base_vector", value:"AV:N/AC:L/Au:N/C:N/I:N/A:N");

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

  script_name("Apache Axis Detection (HTTP)");

  script_category(ACT_GATHER_INFO);

  script_copyright("Copyright (C) 2016 SCHUTZWERK GmbH");
  script_family("Product detection");
  script_dependencies("find_service.nasl", "no404.nasl", "webmirror.nasl", "DDI_Directory_Scanner.nasl", "global_settings.nasl");
  script_exclude_keys("Settings/disable_cgi_scanning");
  script_require_ports("Services/www", 8080);

  script_tag(name:"summary", value:"HTTP based detection of the Apache Axis SOAP stack.");

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

  exit(0);
}

include("cpe.inc");
include("host_details.inc");
include("http_func.inc");
include("http_keepalive.inc");
include("list_array_func.inc");
include("port_service_func.inc");

port = http_get_port( default:8080 );
host = http_host_name( dont_add_port:TRUE );

foreach dir( make_list_unique(
  "/axis",              # Standard one
  "/imcws",             # SAP Business Objects 12 and/or 3com IMC (See CVE-2010-2103)
  "/WebServiceImpl",    # Computer Associates ARCserve D2D r15 Web Service (See CVE-2010-0219 / https://www.exploit-db.com/exploits/15869)
  "/dswsbobje",         # SAP BusinessObjects Enterprise XI 3.2 (See CVE-2010-0219)
  "/BusinessProcessBI", # SAP BusinessObjects as well
  "/ws",                # Currently unknown
  "/MicroStrategyWS",   # Microstrategy Web 10.4 (See CVE-2020-11450)
  "/Api",               # VMware Smarts NCM
  "/jboss-net",         # JBoss.net Axis integration
  "/tomcat",            # Both for Tomcat, seen "in the wild"
  "/tomcat/axis",
  "/wssgs",             # Both for JBuilder Apache Axis
  "/tresearch",
  "/infranetwebsvc",    # Both for Oracle Communications Billing and Revenue Management Web Services Manager from:
  "/BrmWebServices",    # https://docs.oracle.com/cd/E16754_01/doc.75/e16724/wsm_deploy.htm
  http_cgi_dirs( port:port, host:host ) ) ) {

  found = FALSE;
  install = dir;

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

  if( dir == "/services" )
    continue; # This would create a duplicated detection at / and /services

  # nb: Version service
  url = dir + "/services/Version?method=getVersion";
  req = http_get( item:url, port:port );
  buf = http_keepalive_send_recv( port:port, data:req );

  # nb: Second check just to be safe
  url2 = dir + "/services/non-existent";
  req2 = http_get( item:url2, port:port );
  buf2 = http_keepalive_send_recv( port:port, data:req2 );

  # nb: Index page
  url3 = dir + "/index.jsp";
  buf3 = http_get_cache( item:url3, port:port );

  # nb: Second index page as sometimes other services / URLs are not available or blocked
  url4 = dir + "/";
  buf4 = http_get_cache( item:url4, port:port );

  if( "<h2>AXIS error</h2>" >< buf2 || "No service is available at this URL" >< buf2 ||
      "<h1>Axis HTTP Servlet</h1>" >< buf2 ) {
    conclUrl = "  " + http_report_vuln_url( url:url2, port:port, url_only:TRUE );
    found = TRUE;
  }

  if( "Apache Axis version:" >< buf ||
      "The AXIS engine could not find a target service to invoke!" >< buf ||
      "<h1>Axis HTTP Servlet</h1>" >< buf ) {
    if( conclUrl )
      conclUrl += '\n';
    conclUrl += "  " + http_report_vuln_url( url:url, port:port, url_only:TRUE );
    found = TRUE;
  }

  # <title>Apache-Axis</title>
  # *snip*
  # <h1 align="center">Apache-AXIS</h1>
  #
  # <p>Hello! <em>Welcome</em> to Apache-Axis.</p>
  #
  # <p>What do you want to do today?</p>
  #
  # or (in multiple lines and with tabs):
  #
  #     <h1 align="center">Apache-AXIS</h1>
  #
  #     <p>
  #          Hello! <em>Welcome</em> to Apache-Axis.
  #     </p>
  #
  #     <p>What do you want to do today?</p>
  #
  # and in one example one line of the above was just (all others were the same):
  #
  # Hello! Welcome to Apache-Axis.<p/>What do you want to do today?
  #
  # And this one was from a jboss-net installation:
  # <title>Apache-Axis (JBoss.net)</title>
  # *snip*
  # <h1 align="center"><img src="images/jboss-net.png" alt="JBoss.net"/><img src="images/axis.jpg" alt="Apache Axis"/></h1>
  #
  # <p>Hello! <em>Welcome</em> to JBoss.net (Apache-Axis).</p>
  #
  # <p>What do you want to do today?</p>
  #
  if( "<title>Apache-Axis</title>" >< buf3 || "Apache-AXIS</h1>" >< buf3 ||
      "<title>Apache-Axis (JBoss.net)</title>" >< buf3 ||
      buf3 =~ "Hello!.+Welcome.+to (Apache-Axis|JBoss\.net \(Apache-Axis\))\..+What do you want to do today\?" ) {
    if( conclUrl )
      conclUrl += '\n';
    conclUrl += "  " + http_report_vuln_url( url:url3, port:port, url_only:TRUE );
    found = TRUE;
  }

  if( "<title>Apache-Axis</title>" >< buf4 || "Apache-AXIS</h1>" >< buf4 ||
      "<title>Apache-Axis (JBoss.net)</title>" >< buf4 ||
      buf4 =~ "Hello!.+Welcome.+to (Apache-Axis|JBoss\.net \(Apache-Axis\))\..+What do you want to do today\?" ) {
    if( conclUrl )
      conclUrl += '\n';
    conclUrl += "  " + http_report_vuln_url( url:url4, port:port, url_only:TRUE );
    found = TRUE;
  }

  if( found ) {

    version = "unknown";

    # All are over two lines, the first was in a single line while the second had additional
    # content in front:
    #    <getVersionReturn xsi:type="xsd:string">Apache Axis version: 1.0
    # Built on Nov 06, 2002 (07:19:53 PST)</getVersionReturn>
    #
    # *snip*http://schemas.xmlsoap.org/soap/encoding/"><getVersionReturn xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">Apache Axis version: 1.4
    # Built on Apr 22, 2006 (06:55:48 PDT)</getVersionReturn>
    #
    # and this one was from a jboss-net installation:
    #    <getVersionResponse xsi:type="xsd:string">Apache Axis version: #axisVersion#
    # Built on #today#</getVersionResponse>
    ver = eregmatch( string:buf, pattern:"Apache Axis version: ([0-9.]+)" );
    if( ! isnull( ver[1] ) ) {
      version = ver[1];

      if( url >!< conclUrl ) {
        if( conclUrl )
          conclUrl += '\n';
        conclUrl += "  " + http_report_vuln_url( url:url, port:port, url_only:TRUE );
      }
    }

    url = dir + "/servlet/AxisServlet";
    req = http_get( item:url, port:port );
    buf = http_keepalive_send_recv( port:port, data:req );

    if( "<h2>And now... Some Services</h2>" >< buf ) {
      extra += "  " + http_report_vuln_url( url:url, port:port, url_only:TRUE ) + ' lists available web services\n';
    }

    # Second try to get exposed web services
    url = dir + "/services";
    req = http_get( item:url, port:port );
    buf = http_keepalive_send_recv( port:port, data:req );

    if( "<h2>And now... Some Services</h2>" >< buf ) {
      extra += "  " + http_report_vuln_url( url:url, port:port, url_only:TRUE ) + ' lists available web services\n';
    }

    url = dir + "/happyaxis.jsp";
    req = http_get( item:url, port:port );
    buf = http_keepalive_send_recv( port:port, data:req );

    if( "<title>Axis Happiness Page</title>" >< buf || "Examining webapp configuration" >< buf ) {
      extra += "  " + http_report_vuln_url( url:url, port:port, url_only:TRUE ) + ' exposes the system configuration\n';
      set_kb_item( name:"apache/axis/happiness_page/detected", value:TRUE );
      set_kb_item( name:"apache/axis/happiness_page/http/detected", value:TRUE );
      set_kb_item( name:"apache/axis/happiness_page/http/" + host + "/" + port + "/urls", value:url );
    }

    url = dir + "/services/AdminService?wsdl";
    req = http_get( item:url, port:port );
    buf = http_keepalive_send_recv( port:port, data:req );

    if( "AdminServiceResponse" >< buf || "AdminServiceRequest" >< buf ) {
      extra += "  " + http_report_vuln_url( url:url, port:port, url_only:TRUE ) + ' exposes the AdminService\n';

      # If version wasn't identified yet try to get it from this service
      if( version == "unknown" ) {
        ver = eregmatch( string:buf, pattern:"Apache Axis version: ([0-9.]+)" );
        if( ! isnull( ver[1] ) ) {
          version = ver[1];
          if( conclUrl )
            conclUrl += '\n';
          conclUrl += "  " + http_report_vuln_url( url:url, port:port, url_only:TRUE );
        }
      }
    }

    url = dir + "/EchoHeaders.jws?wsdl";
    req = http_get( item:url, port:port );
    buf = http_keepalive_send_recv( port:port, data:req );

    if( "whoamiResponse" >< buf || "echoResponse" >< buf ) {
      extra += "  " + http_report_vuln_url( url:url, port:port, url_only:TRUE ) + ' exposes the EchoHeaders default webservice\n';

      # If version wasn't identified yet try to get it from this service
      if( version == "unknown" ) {
        ver = eregmatch( string:buf, pattern:"Apache Axis version: ([0-9.]+)" );
        if( ! isnull( ver[1] ) ) {
          version = ver[1];
          if( conclUrl )
            conclUrl += '\n';
          conclUrl += "  " + http_report_vuln_url( url:url, port:port, url_only:TRUE );
        }
      }
    }

    url = dir + "/SOAPMonitor";
    req = http_get( item:url, port:port );
    buf = http_keepalive_send_recv( port:port, data:req );

    if( "SOAPMonitorApplet.class" >< buf ) {
      extra += "  " + http_report_vuln_url( url:url, port:port, url_only:TRUE ) + ' exposes the SOAPMonitor Page\n';
    }

    url = dir + "/servlet/AdminServlet";
    req = http_get( item:url, port:port );
    buf = http_keepalive_send_recv( port:port, data:req );

    if( "<title>Axis</title>" >< buf || "Server is running" >< buf ) {
      extra += "  " + http_report_vuln_url( url:url, port:port, url_only:TRUE ) + ' exposes the AdminServlet\n';
    }

    url = dir + "/servlet/MyServlet";
    req = http_get( item:url, port:port );
    buf = http_keepalive_send_recv( port:port, data:req );

    if( "<title>Axis</title>" >< buf || "Server is running" >< buf ) {
      extra += "  " + http_report_vuln_url( url:url, port:port, url_only:TRUE ) + ' exposes the MyServlet\n';
    }

    set_kb_item( name:"apache/axis/detected", value:TRUE );
    set_kb_item( name:"apache/axis/http/detected", value:TRUE );

    cpe = build_cpe( value:version, exp:"([0-9.]+)", base:"cpe:/a:apache:axis:" );
    if( ! cpe )
      cpe = "cpe:/a:apache:axis";

    register_product( cpe:cpe, location:install, port:port, service:"www" );

    log_message( data:build_detection_report( app:"Apache Axis",
                                              version:version,
                                              install:install,
                                              cpe:cpe,
                                              concluded:ver[0],
                                              concludedUrl:conclUrl,
                                              extra:chomp( extra ) ),
                 port:port );
  }
}

exit( 0 );

Data

Build on a solid foundation with Vulners data

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

Api

Power your application with Vulners API

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

App

Assess and manage vulnerabilities with Vulners tools

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

17 Apr 2026 00:00Current
7.2High risk
Vulners AI Score7.2
125