黑客攻击? 如何附加一个文件名允许访问网站上的数据…看到例子

访问以下所有内容会将您转到login屏幕:

http://mysite.com/admin/configuration.php http://mysite.com/admin/login.php 

但是,如果您访问(请注意URLstring的最后两部分都是.php):

 http://mysite.com/admin/configuration.php/login.php 

您可以看到configuration屏幕及其所有数据!

此外,如果你附加一些GETvariables,你甚至可以得到可编辑的字段:

 http://mysite.com/admin/configuration.php/login.php?cID=1&action=edit 

这里发生了什么?

我应该注意,这是在网站上使用一个绝对可怕的购物车叫做oscommerce。 代码是一个噩梦来处理,但我现在坚持下去。


编辑

基于下面的vstm的出色和准确的评论的修复:

这将会在检查前看到$current_page != FILENAME_LOGIN (在/admin/includes/application_top.php的第141-143行左右)。 请注意,这只是一个紧急补丁,因为真正的解决scheme是永远不要使用oscommerce,因为它和妓女的腰带一样安全

 //$current_page = basename($PHP_SELF); //this is the default $current_page = basename($_SERVER['SCRIPT_NAME']); //change that default to this if ( ($current_page == FILENAME_LOGIN) && !tep_session_is_registered('redirect_origin') ) { $current_page = FILENAME_DEFAULT; $HTTP_GET_VARS = array(); } 

如果有人试图这样做,不要忘记, redirect_origin会话var可能已经被设置,所以这似乎不起作用。 只需取消设置,然后重试。

/admin的所有脚本包含的includes / application_top中,您会发现这个小gem(我已经抛出了一些无趣的部分):

 // redirect to login page if administrator is not yet logged in if (!tep_session_is_registered('admin')) { $redirect = false; $current_page = basename($PHP_SELF); if ($current_page != FILENAME_LOGIN) { // session stuf blabla $redirect = true; } if ($redirect == true) { tep_redirect(tep_href_link(FILENAME_LOGIN)); } unset($redirect); } 

这段代码只有在你没有login的时候才会被执行。它的基本function是检查$PHP_SELF是否为login.php。 如果是login.php,那么它会继续渲染页面,否则你将被redirect。

如果你提出这个要求:

 http://mysite.com/admin/configuration.php/login.php 

然后PHP_SELF将会

 /admin/configuration.php/login.php 

basename($PHP_SELF)当然是login.php因此渲染继续,不执行redirect。 但它是当然不是login.php获取呈现,但configuration.php 。 URL“/login.php”的其余部分被“忽略”,只是在$ _SERVER ['PATH_INFO']中提供给PHP。

编辑:我喜欢补充说,这个“错误”只影响oscommerce或任何其他软件,使用这样的解决scheme来“保护”pipe理login(我认为没有那么多的受此影响)。 这不是一个影响所有PHP软件的错误。

这只是configuration.php文件中的一个漏洞 – “假目录”与PHP文件作为path的一部分是一个有意图的function,你会经常看到的东西 – 斜杠后的东西是如何处理的到path中的php文件。 (mediawiki是一个很好的例子)

我已经试过这个窗口框,使用双重url如所示 – 它说没有find页面。 但是,服务器设置为不允许目录横向和OSCommerce设置为检查用户代理和防止蜘蛛会话,以及使用会话目录 – 可能这就是为什么它是安全的,不允许追加一个URL。 此外,服务器将/login.php作为第一个文件名的一部分,不允许driectory横向,不允许在文件名中的点 – 因此它完全拒绝该url。 因此,不pipe目录软件试图做什么,服务器都是安全的。