Як знайти версію Apache, яка працює без доступу до командного рядка?


74

Мені потрібно або знайти файл, в якому кодована версія, або спосіб опитування його в Інтернеті, щоб він розкрив свою версію. Сервер працює на хості, який не надасть мені доступу до командного рядка, хоча я можу переглядати місце встановлення через FTP.

Я спробував HEAD і не отримую повідомлення про номер версії.

Якщо я спробую відсутню сторінку, щоб отримати 404, вона перехоплюється, і повертається сторінка запасів, на якій немає інформації про сервер. Я припускаю, що це вказує на загартовування сервера.

Все ще не ближче ...

Я розмістив PHP-файл, як запропоновано, але я не можу переглянути його та не можу зрозуміти шлях URL-адреси, який би його завантажив. У будь-якому випадку я отримую безліч повідомлень про заборону доступу та ту саму сторінку 404. Я втішаюсь, знаючи, що сервер досить надійно захищений.


Ви можете запускати команди оболонки у сценаріях на сервері?
workmad3

хороше питання, не знаю. Я поїду
Саймон

Ви можете встановити PHPShell з phpshell.sourceforge.net, що дозволить вам розіткнутися
Пол Діксон,

Відповіді:


129

Метод

Підключіться до порту 80 на хості та надішліть його

HEAD / HTTP/1.0

Після цього потрібно двічі повернути каретку-повернення + подачу по лінії

Ви повернете щось подібне

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

Потім ви можете витягти версію apache із заголовка Server:

Типові інструменти, якими ви можете користуватися

Ви можете використовувати утиліту HEAD, яка постачається з повною установкою бібліотеки LWP Perl , наприклад

HEAD http://your.webserver.com/

Або скористайтеся утилітою curl , наприклад

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

Ви також можете використовувати розширення браузера, яке дозволяє переглядати заголовки серверів, такі як Live HTTP Headers або Firebug для Firefox, або Fiddler для IE

Застряг у Windows?

Нарешті. якщо ви працюєте в ОС Windows і нічого іншого не маєте у своєму розпорядженні, відкрийте командний рядок (меню Пуск-> Виконати, введіть "cmd" і натисніть клавішу повернення), а потім введіть це

telnet your.webserver.com 80

Потім введіть (обережно, ваші персонажі не будуть повторюватися)

HEAD / HTTP/1.0

Двічі натисніть return, і ви побачите заголовки сервера.

Інші методи

Як згадували cfeduke та Veynom, сервер може бути налаштований на повернення обмеженої інформації в заголовку Server:. Спробуйте завантажити PHP-скрипт на ваш хост із цим

<?php phpinfo() ?>

Запитуйте сторінку за допомогою веб-браузера, і ви побачите там повідомлення про версію Apache.

Ви також можете спробувати скористатися PHPShell, щоб тикати навколо, спробуйте команду типу

/usr/sbin/apache2 -V

7
Так близько. Однак сервер просто каже "Apache", не маючи деталей версії
Саймон

Тільки те, що я також написав. :) Тільки Apache в деяких випадках.
Вейном

7
Крім того, під час використання командного рядка в Windows 7 важливо відзначити, що telnet потрібно ввімкнути: Пуск> Панель керування> Програми та функції> Увімкнення та вимкнення функцій Windows> Переконайтеся, що встановлено прапорець «Клієнт Telnet»> Натисніть OK
gmeben

В Stuck with Windows?, я намагався надіслати, HEADале це показуєHTTP/1.1 503 Service Temporarily Unavailable
смарагдхі

Тут просто написано Сервер: Apache
AturSams

43

httpd -v надасть вам версію Apache, що працює на вашому сервері (якщо у вас є доступ до SSH / оболонки).

Вихід повинен бути приблизно таким:

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

Як було запропоновано, ви також можете зробити це, apachectl -vщо дасть вам однаковий результат, але буде підтримуватися більшою кількістю версій Linux.


15
на Ubuntu називається двійковий файл apache2, а неhttpd
Janus Troelsen

1
+1 - phpinfo () та curl не дають достатньо інформації для спільного хосту, яким я користувався. Це зробило.
jontyc

1
OP просить рішення без оболонки :) Оскільки це все одно розміщено, я пропоную використовувати 'apachectl' для більшої незалежності від платформи.
Konzulic

5

Рідко загартований HTTP-сервер налаштовується не надавати інформацію про сервер або вводити в оману інформацію про сервер. У цих сценаріях, якщо на сервері ввімкнено PHP, ви можете додати:

<?php phpinfo(); ?>

у файлі, перегляньте його та знайдіть файл

_SERVER["SERVER_SOFTWARE"]

в'їзд. Це сприйнятливо до тієї ж посилювальної відсутності інформації / вводить в оману, хоча я думаю, що це не часто змінюється, оскільки цей метод спочатку вимагає доступу до машини для створення PHP-файлу.


Мій загартований сервер також має "Apache" за $ _SERVER ["SERVER_SOFTWARE"]
PaulH

4

Попередження, деякі сервери Apache не завжди надсилають номер своєї версії під час використання HEAD, як у цьому випадку:

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.

Якщо встановлено PHP, тоді скористайтеся командою php info:

<?php phpinfo(); ?>

1
phpinfo()також не завжди розкриває версію Apache, принаймні не при використанні CGI / FastCGI.
Саймон Іст

4

Рівень інформації про версію, виданий сервером Apache, можна налаштувати за допомогою налаштування ServerTokens у його конфігурації.

Я вважаю, що є також параметр, який контролює, чи відображатиметься версія на сторінках помилок сервера, хоча я не пам’ятаю, що це за верх голови. Якщо у вас немає прямого доступу до сервера, а адміністратор сервера компетентний і не хоче, щоб ви знали версію, яку вони запускають ... Я думаю, ви можете бути SOL .


1

Telnet до хосту в порту 80.

Тип:

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

Це свого роду HTTP-запит, але він не дійсний, тому помилка 500, яку він видає, ймовірно, надасть вам потрібну інформацію. Порожні рядки в кінці важливі, інакше він, здається, просто зависає.


0

Якщо на них увімкнено сторінки помилок, ви можете перейти на неіснуючу сторінку і подивитися внизу сторінки 404.


Якщо на хості ввімкнено спеціальний обробник 404, це не буде працювати, наприклад, microsoft.com/this_is_a_made_up_page
ConroyP

0

Найкращий варіант - через PHP: не можна довіряти всім запитам версій з боку клієнта, оскільки ваш Apache можна налаштувати за допомогою ServerTokens Prod та ServerSignature Off. Див .: http://www.petefreitag.com/item/419.cfm


0

У установці за замовчуванням зателефонуйте на сторінку, яка не існує, і в кінці ви отримаєте повідомлення про помилку з версією:

Об'єкт не знайдено!

Запитану URL-адресу не знайдено на цьому сервері. Якщо ви ввели URL-адресу вручну, перевірте написання та повторіть спробу.
Якщо ви вважаєте, що це помилка сервера, зв’яжіться з веб-майстром.
Помилка 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


0

Просто використовуйте щось на зразок наступного - рядок вже повинен бути там:

<?php
   if(isset($_SERVER['SERVER_SOFTWARE'])){
      echo $_SERVER['SERVER_SOFTWARE'];
   }
?>

-1

Використовуйте цей PHP-скрипт:

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

Се apache_get_version .


Функції apache доступні лише під час запуску PHP як модуля Apache.
PaulH
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.