一个网站的根目录下发现如下安全问题:
index.php中含有
include "menu/$_GET['menu']".".php" 这样我就可以include网站下任意php文件。
如访问index.php?menu=../index.php现在想查看该网站主目录下的.htaccess文件,不知道有何方法?

解决方案 »

  1.   

    只包含php文件
    htaccess 是文本类如果网站本身有目录跨越漏洞的话     任意文件可访问
      

  2.   

    .htaccess#00 或者.htaccess//////////////// 一定数量的/// win下260字节 linux 4096字节
    楼主不是好孩子呢。。
      

  3.   

    这个没办法,不是什么目录权限的问题。首先,get下来的参数无论如何也只能作为一个常量字符串,而不能被当作php语法来解释。所以你无法截断前后的字符串,无论你给menu参数赋什么值(# ; " //)你也无法截断这个字符串。它总是会把你伪造的menu参数当作include后面的一个字符串。你的想法类似sql注射,但sql语句也是一个常量字符串,他是由php发送到mysql端进行解释的,所以跟这个不一样。按照他这个写法,你只能构造引用menu目录和其子目录下的任意php文件的字符串,其它的均不可以。否则的话,如果一个php脚本中用到$_GET变量,我就可以构造任意php语句,那php这还有何安全性?
      

  4.   

    sorry上面说错了,利用../切换相对目录,还是可以访问其他目录的,只要目录权限允许访问,竟然忘了这一点但是后面的字符串.php你无法截断,所以你只能include任意php文件。
      

  5.   

    打错了,应该是.htaccess%00 。有点黑客常识的都知道\0大法吧,呵呵。
      

  6.   

    对不起 ,忘说php环境了
    php是5.13R4dev
    magic_quotes_gpc on
    %00不行了,只能用一定数量的“\”试试
      

  7.   

    %00报错
    Warning: include(menu/../index.php\0.php) [function.include]: failed to open stream: No such file or directory in ***********  on line 79