如何找到没有访问命令行即可运行的Apache版本?
我需要找到一个编码了版本的文件,或者需要一种在网络上对其进行轮询以揭示其版本的方法。尽管我可以通过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