如何找到没有访问命令行即可运行的Apache版本?

时间:2020-03-06 15:04:20  来源:igfitidea点击:

我需要找到一个编码了版本的文件,或者需要一种在网络上对其进行轮询以揭示其版本的方法。尽管我可以通过FTP浏览安装位置,但服务器正在无法提供命令行访问权限的主机上运行。

我尝试了HEAD,但没有得到版本号的报告。

如果我尝试缺少页面以获取404,则会被拦截,并返回没有服务器信息的股票页面。我想这表明服务器已得到加强。

还是不近...

我按照建议放置了一个PHP文件,但无法浏览到该文件,也无法完全确定将其加载的URL路径。无论如何,我都会收到大量的拒绝访问消息和相同的股票404页面。我知道服务器受到了非常可靠的保护,这让我感到有些安慰。

解决方案

连接到主机上的端口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

然后,我们可以从Server:标头中提取apache版本。

我们可以使用完整安装Perl的LWP库的HEAD实用程序,例如

HEAD http://your.webserver.com/

或者,使用curl实用程序,例如

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

我们还可以使用浏览器扩展程序,使我们可以查看服务器标头,例如Live HTTP标头或者Firefox的Firebug或者IE的Fiddler

最后。如果我们使用的是Windows,并且没有其他可用的东西,请打开命令提示符("开始"菜单->"运行",键入" cmd",然后按回车键),然后键入

telnet your.webserver.com 80

然后输入(小心,字符将不会被回显)

HEAD / HTTP/1.0

按回车两次,我们将看到服务器标题。

如cfeduke和Veynom所述,可以将服务器设置为在Server:标头中返回有限的信息。尝试将PHP脚本上传到主机中

<?php phpinfo() ?>

使用网络浏览器请求页面,我们应该在那里看到Apache版本的报告。

我们也可以尝试使用PHPShell戳一下,尝试类似的命令

/usr/sbin/apache2 -V

Telnet到端口80上的主机。

类型:

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

这是一种HTTP请求,但无效,因此它给500错误可能会为我们提供所需的信息。最后的空行很重要,否则它似乎会挂起。

如果他们启用了错误页面,则可以转到不存在的页面并查看404页面的底部。

在默认安装中,调用一个不存在的页面,最后出现版本错误:

Object not found!
  
  The requested URL was not found on this server. If you entered the URL manually please
  check your spelling and try again.
  

  If you think this is a server error, please contact the webmaster.
  

  Error 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

很少将强化的HTTP服务器配置为不提供服务器信息或者误导服务器信息。在这些情况下,如果服务器启用了PHP,则可以添加:

<?php phpinfo(); ?>

在文件中浏览并找到

_SERVER["SERVER_SOFTWARE"]

入口。尽管我可以想象它不会经常更改,但是这同样容易引起信息的缺乏/误导,因为这种方法首先需要访问机器才能创建PHP文件。

警告,某些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(); ?>

Apache服务器给出的版本信息级别可以通过其配置中的ServerTokens设置进行配置。

我相信还有一个设置可以控制该版本是否出现在服务器错误页面中,尽管我不记得它是什么。如果我们没有直接访问服务器的权限,并且服务器管理员胜任并且不希望我们知道他们正在运行的版本,那么我想我们可能是SOL。

最好的选择是通过PHP:
来自客户端的所有版本请求都不能被信任,因为Apache可以配置为ServerTokens Prod和ServerSignature Off。请参阅:http://www.petefreitag.com/item/419.cfm