Wie finde ich die Version von Apache, die ohne Zugriff auf die Befehlszeile ausgeführt wird?

74

Ich muss entweder eine Datei finden, in der die Version codiert ist, oder eine Möglichkeit, sie über das Web abzufragen, damit ihre Version angezeigt wird. Der Server wird auf einem Host ausgeführt, der mir keinen Befehlszeilenzugriff gewährt, obwohl ich den Installationsort über FTP durchsuchen kann.

Ich habe HEAD ausprobiert und bekomme keine Versionsnummer gemeldet.

Wenn ich versuche, eine fehlende Seite zu erhalten, um eine 404 zu erhalten, wird sie abgefangen und eine Bestandseite zurückgegeben, die keine Serverinformationen enthält. Ich denke, das deutet darauf hin, dass der Server gehärtet ist.

Immer noch nicht näher ...

Ich habe eine PHP-Datei wie vorgeschlagen erstellt, kann sie jedoch nicht durchsuchen und den URL-Pfad, der sie laden würde, nicht genau ermitteln. Auf jeden Fall bekomme ich viele Nachrichten mit Zugriffsverweigerung und dieselbe 404-Seite. Ich tröste mich mit dem Wissen, dass der Server ziemlich robust geschützt ist.

Simon
quelle
Können Sie Shell-Befehle in Skripten auf dem Server ausführen?
workmad3
Gute Frage, weiß nicht. Ich werde es versuchen
Simon
Sie könnten PHPShell von installieren phpshell.sourceforge.net die Sie einen Poke haben wir um
Paul Dixon

Antworten:

129

Die Methode

Stellen Sie eine Verbindung zu Port 80 auf dem Host her und senden Sie ihn

HEAD / HTTP/1.0

Darauf muss zweimal Wagenrücklauf + Zeilenvorschub folgen

Sie werden so etwas zurückbekommen

HTTP/1.1 200 OK
Date: Fri, 03 Oct 2008 12:39:43 GMT
Server: Apache/2.2.9 (Ubuntu) DAV/2 SVN/1.5.0 PHP/5.2.6-1ubuntu4 with Suhosin-Patch mod_perl/2.0.4 Perl/v5.10.0
Last-Modified: Thu, 02 Aug 2007 20:50:09 GMT
ETag: "438118-197-436bd96872240"
Accept-Ranges: bytes
Content-Length: 407
Connection: close
Content-Type: text/html; charset=UTF-8

Sie können dann die Apache-Version aus dem Server: -Header extrahieren

Typische Werkzeuge, die Sie verwenden können

Sie können das HEAD-Dienstprogramm verwenden, das mit einer vollständigen Installation der LWP- Bibliothek von Perl geliefert wird , z

HEAD http://your.webserver.com/

Oder verwenden Sie das Curl- Dienstprogramm, z

 curl --head http://your.webserver.com/

Sie können auch eine Browser-Erweiterung verwenden, mit der Sie Server-Header anzeigen können, z. B. Live-HTTP-Header oder Firebug für Firefox oder Fiddler für IE

Mit Windows festgefahren?

Schließlich. Wenn Sie unter Windows arbeiten und nichts anderes zur Verfügung haben, öffnen Sie eine Eingabeaufforderung (Startmenü> Ausführen, geben Sie "cmd" ein und drücken Sie die Eingabetaste), und geben Sie diese ein

telnet your.webserver.com 80

Geben Sie dann ein (vorsichtig, Ihre Charaktere werden nicht zurückgesendet)

HEAD / HTTP/1.0

Drücken Sie zweimal die Eingabetaste, um die Server-Header anzuzeigen.

Andere Methoden

Wie von cfeduke und Veynom erwähnt, kann der Server so eingestellt sein, dass er begrenzte Informationen im Server: -Header zurückgibt. Versuchen Sie, ein PHP-Skript mit diesem Inhalt auf Ihren Host hochzuladen

<?php phpinfo() ?>

Fordern Sie die Seite mit einem Webbrowser an und Sie sollten die dort gemeldete Apache-Version sehen.

Sie können auch versuchen, PHPShell zu verwenden, um sich umzuschauen , und einen Befehl wie

/usr/sbin/apache2 -V
Paul Dixon
quelle
7
So nah. Der Server sagt jedoch nur "Apache" ohne Versionsdetails
Simon
Genau das, was ich auch geschrieben habe. :) In einigen Fällen nur Apache.
Veynom
7
Wenn Sie die Eingabeaufforderung unter Windows 7 verwenden, müssen Sie außerdem beachten, dass Telnet aktiviert sein muss: Start> Systemsteuerung> Programme und Funktionen> Windows-Funktionen
ein-
In Stuck with Windows?, ich habe versucht zu senden, HEADaber es zeigtHTTP/1.1 503 Service Temporarily Unavailable
Smaragdhieu
Es heißt nur Server: Apache
AturSams
43

httpd -v gibt Ihnen die Version von Apache, die auf Ihrem Server ausgeführt wird (wenn Sie über SSH / Shell-Zugriff verfügen).

Die Ausgabe sollte ungefähr so ​​aussehen:

Server version: Apache/2.2.3
Server built:   Oct 20 2011 17:00:12

Wie bereits vorgeschlagen, können Sie dies auch tun apachectl -v, um die gleiche Ausgabe zu erhalten, die jedoch von mehr Linux-Varianten unterstützt wird.

crmpicco
quelle
15
unter Ubuntu heißt die Binärdatei apache2nichthttpd
Janus Troelsen
1
+1 - phpinfo () und curl gaben nicht genügend Informationen für einen gemeinsam genutzten Host, den ich verwendete. Das hat es getan.
Jontyc
1
OP fragt nach einer Nicht-Shell-Lösung :) Da dies sowieso veröffentlicht wird, empfehle ich die Verwendung von 'apachectl' für eine größere Plattformunabhängigkeit.
Konzulic
5

In seltenen Fällen ist ein gehärteter HTTP-Server so konfiguriert, dass er keine Serverinformationen oder irreführende Serverinformationen liefert. In diesen Szenarien können Sie Folgendes hinzufügen, wenn auf dem Server PHP aktiviert ist:

<?php phpinfo(); ?>

in einer Datei und navigieren Sie dazu und suchen Sie nach dem

_SERVER["SERVER_SOFTWARE"]

Eintrag. Dies ist anfällig für den gleichen zunehmenden Mangel an Informationen / irreführend, obwohl ich mir vorstellen würde, dass es nicht oft geändert wird, da diese Methode zuerst den Zugriff auf den Computer erfordert, um die PHP-Datei zu erstellen.

cfeduke
quelle
Mein gehärteter Server hat auch 'Apache' für $ _SERVER ["SERVER_SOFTWARE"]
PaulH
4

Warnung: Einige Apache-Server senden bei Verwendung von HEAD nicht immer ihre Versionsnummer, wie in diesem Fall:

HTTP/1.1 200 OK
Date: Fri, 03 Oct 2008 13:09:45 GMT
Server: Apache
X-Powered-By: PHP/5.2.6RC4-pl0-gentoo
Set-Cookie: PHPSESSID=a97a60f86539b5502ad1109f6759585c; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Content-Type: text/html



Connection to host lost.

Wenn PHP installiert ist, verwenden Sie einfach den Befehl php info:

<?php phpinfo(); ?>
Veynom
quelle
1
phpinfo()zeigt auch nicht immer die Apache-Version an, zumindest nicht bei Verwendung von CGI / FastCGI.
Simon East
4

Die Version der Versionsinformationen, die von einem Apache-Server ausgegeben werden, kann durch die ServerTokens-Einstellung in seiner Konfiguration konfiguriert werden.

Ich glaube, es gibt auch eine Einstellung, die steuert, ob die Version auf Serverfehlerseiten angezeigt wird, obwohl ich mich nicht erinnern kann, was sie auf den Kopf gestellt hat. Wenn Sie keinen direkten Zugriff auf den Server haben und der Serveradministrator kompetent ist und nicht möchte, dass Sie wissen, welche Version sie ausführen ... Ich denke, Sie sind möglicherweise SOL .

mmacaulay
quelle
1

Telnet zum Host an Port 80.

Art:

get / http1.1
::enter::
::enter::

Es ist eine Art HTTP-Anfrage, aber sie ist nicht gültig. Der 500-Fehler, den Sie erhalten, gibt Ihnen wahrscheinlich die gewünschten Informationen. Die leeren Zeilen am Ende sind wichtig, sonst scheint es nur zu hängen.

Steve g
quelle
0

Wenn für sie Fehlerseiten aktiviert sind, können Sie zu einer nicht vorhandenen Seite gehen und den unteren Rand der 404-Seite anzeigen.

Jonathan Mueller
quelle
Wenn auf dem Host ein benutzerdefinierter 404-Handler aktiviert ist, funktioniert dies nicht, z. B. microsoft.com/this_is_a_made_up_page
ConroyP
0

Ihre beste Option ist PHP: Allen Versionsanforderungen von der Clientseite kann nicht vertraut werden, da Ihr Apache mit ServerTokens Prod und ServerSignature Off konfiguriert werden kann. Siehe: http://www.petefreitag.com/item/419.cfm

Eduardo
quelle
0

Rufen Sie in der Standardinstallation eine Seite auf, die nicht vorhanden ist, und am Ende wird eine Fehlermeldung mit der Version angezeigt:

Objekt nicht gefunden!

Die angeforderte URL wurde auf diesem Server nicht gefunden. Wenn Sie die URL manuell eingegeben haben, überprüfen Sie bitte Ihre Rechtschreibung und versuchen Sie es erneut.
Wenn Sie glauben, dass dies ein Serverfehler ist, wenden Sie sich bitte an den Webmaster.
Fehler 404
localhost
10/03/08 14:41:45
Apache / 2.2.8 (Win32) DAV / 2 mod_ssl / 2.2.8 OpenSSL / 0.9.8g mod_autoindex_color PHP / 5.2.5

Oli
quelle
0

Verwenden Sie einfach Folgendes: Die Zeichenfolge sollte bereits vorhanden sein:

<?php
   if(isset($_SERVER['SERVER_SOFTWARE'])){
      echo $_SERVER['SERVER_SOFTWARE'];
   }
?>
Martin Zeitler
quelle
-1

Verwenden Sie dieses PHP-Skript:

 $version = apache_get_version();
    echo "$version\n";

Ich apache_get_version .

Matinict
quelle
Die Apache-Funktionen sind nur verfügbar, wenn PHP als Apache-Modul ausgeführt wird.
PaulH