ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #31  
Старый 30.12.2008, 18:09
Аватар для Qwazar
Qwazar
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме:
10605912

Репутация: 4693


По умолчанию

Цитата:
Сообщение от ChaaK  
Класс zend_file_handle? Не найти что-то
Сейчас сорцы качаю.
Цитата:
Сообщение от SQLHACK  
вот проверил несколько функций, как то странно.

require_once - работает
require - работает
include - работает
include_once - работает
file_get_contents - не работает
fopen - не работает
file - не работает
readfile - не работает

почему только функции инклюда подвержены ?
а Virtual и другие не пашут.
Потому что ТОЛЬКО функции инклуда, вызывают функцию getcwd, для вычисления абсолютного пути по относительному (хех, я был прав, в том что проблема с вычислением пути по текущему, посмотрим прав ли в остальном)
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..

Мой блог:http://qwazar.ru/.
 
Ответить с цитированием

  #32  
Старый 30.12.2008, 18:16
Аватар для Chaak
Chaak
Познавший АНТИЧАТ
Регистрация: 01.06.2008
Сообщений: 1,047
Провел на форуме:
5321514

Репутация: 3313


Отправить сообщение для Chaak с помощью ICQ
По умолчанию

А что если какая-то логическая ошибка => как-бы получается что функция выполняется, но значение параметра становится = '\0', что значит конец строки => обход magic_quotes'ов?


Вот кое-чот интересное! Похоже на переполнение буфера! Возможно длина строки неправильно расчитывается
PHP код:
/* no docref given but function is known (the default) */
    
if (!docref && is_function) {
        
int doclen;
        if (
space[0] == '\0') {
            
doclen spprintf(&docref_buf0"function.%s", function);
        } else {
            
doclen spprintf(&docref_buf0"%s.%s"class_name, function);
        }
        while((
strchr(docref_buf'_')) != NULL) {
            *
'-';
        }
        
docref php_strtolower(docref_bufdoclen);
    } 

Последний раз редактировалось ChaaK; 30.12.2008 в 18:19..
 
Ответить с цитированием

  #33  
Старый 30.12.2008, 19:00
Аватар для Qwazar
Qwazar
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме:
10605912

Репутация: 4693


По умолчанию

ChaaK, ты в какието дебри полез Чтото я этот кусок нигде в инклуде не видел.
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..

Мой блог:http://qwazar.ru/.
 
Ответить с цитированием

  #34  
Старый 30.12.2008, 19:24
Аватар для Jokester
Jokester
Members of Antichat - Level 5
Регистрация: 18.02.2008
Сообщений: 1,136
Провел на форуме:
17621293

Репутация: 4915


По умолчанию

Тоже потестил, вот результат :
Конфигурация:
WinXP 32 bit, PHP 5.2.4, Апач 2.2.4

Работает
Цифра это минимальное кол-во символов

"."-218
" "пробел - никакой реакции
"<"-218
">"-218

С абсолютным путём не пашет Пока тестил только в include

И обнаружился ещё один символ, с которым работает:
"+"-218
 
Ответить с цитированием

  #35  
Старый 30.12.2008, 19:31
Аватар для ShAnKaR
ShAnKaR
Пачка маргарина
Регистрация: 14.07.2005
Сообщений: 964
Провел на форуме:
4646474

Репутация: 1424


Отправить сообщение для ShAnKaR с помощью ICQ
По умолчанию

кароч:
файл plain_wrappers.c
функция _php_stream_fopen_with_path:
Цитата:
snprintf(trypath, MAXPATHLEN, "%s/%s", ptr, filename);
stream = php_stream_fopen_rel(trypath, mode, opened_path, options);
там же функция _php_stream_fopen (тоже что php_stream_fopen_rel)
Цитата:
if ((realpath = expand_filepath(filename, NULL TSRMLS_CC)) == NULL) {
return NULL;
}
...
fopen(fname, ...
fname уже нормальный
дальше файл fopen-wrappers.c функция expand_filepath:
Цитата:
char cwd[MAXPATHLEN];
cwd[0] = '\0';

new_state.cwd = strdup(cwd);
new_state.cwd_length = strlen(cwd);

if (virtual_file_ex(&new_state, filepath, NULL, CWD_FILEPATH)) {
free(new_state.cwd);
return NULL;
}

real_path = estrndup(new_state.cwd, new_state.cwd_length);
real_path уже нормальный, MAXPATHLEN везде (не знаю как там у вас в виндах) = 4096;
ну что видно из этого идет везде сначала
xxx.php/////////..../////////////.txt
потом по MAXPATHLEN обрезается до
xxx.php/////////..../////////////.
дальше обрабатывается видимо функцией virtual_file_ex , она возвращает false и изменяет new_state.

Последний раз редактировалось ShAnKaR; 30.12.2008 в 19:52..
 
Ответить с цитированием

  #36  
Старый 30.12.2008, 19:48
Аватар для ShAnKaR
ShAnKaR
Пачка маргарина
Регистрация: 14.07.2005
Сообщений: 964
Провел на форуме:
4646474

Репутация: 1424


Отправить сообщение для ShAnKaR с помощью ICQ
По умолчанию

Цитата:
Сообщение от [Raz0r]  
В общем везде, где проверял у меня работало. Возможная проблема у тех, у кого не работало - вы указывали абсолютный путь, с ним уязвимость не работает.

у меня такого не наблюдалось ни на винде, ни на линуксе.
у меня вот:
PHP код:
<?php
$f
="aaaa.php".str_repeat('/',$argv[1]);
$z=getcwd();
$u=$f.'.fffffffff';
$v=$z.'/'.$f;
print 
strlen($v)."\n";
require(
$u);
?>
[test@localhost cli]$ ./php ./test.php 4047
без точки не работает.

Цитата:
Сообщение от [Raz0r]  
из корневой папки без спуска ../ не хочет работать тоже, пашет при спуске через типа:
zzzzzzzzz/../../../ и тп папке zzzzzzzzzz существовать не обязательно.

об этом уже писал
ты писал что папка должна существовать.
Цитата:
где existing_dir имя существующей папки
у меня выпоняется без этого условия.
 
Ответить с цитированием

  #37  
Старый 30.12.2008, 20:30
Аватар для [Raz0r]
[Raz0r]
Members of Antichat - Level 5
Регистрация: 25.02.2007
Сообщений: 495
Провел на форуме:
3244717

Репутация: 1980
Отправить сообщение для [Raz0r] с помощью ICQ
По умолчанию

Цитата:
без точки не работает.
FreeBSD 6.3, PHP 5.2.8 - работает без точки, какая у тебя система хоть?
Цитата:
ты писал что папка должна существовать.
это относится к linux, хотя это понятие растяжимое ) на все том же FreeBSD 6.3, PHP 5.2.8 через несуществующую папку не инклудится =\
 
Ответить с цитированием

  #38  
Старый 30.12.2008, 20:31
Аватар для ShAnKaR
ShAnKaR
Пачка маргарина
Регистрация: 14.07.2005
Сообщений: 964
Провел на форуме:
4646474

Репутация: 1424


Отправить сообщение для ShAnKaR с помощью ICQ
По умолчанию

потом файл tsrm_virtual_cwd.c
функция virtual_file_ex:
Цитата:

free_path = path_copy = tsrm_strndup(path, path_length);

ptr = tsrm_strtok_r(path_copy, TOKENIZER_STRING, &tok);
тут TOKENIZER_STRING у меня равен "/" в винде наверно чтото другое.

файл tsrm_strtok_r.c
Цитата:
char *tsrm_strtok_r(char *s, const char *delim, char **last)
{
char *token;

if (s == NULL) {
s = *last;
}

while (*s && in_character_class(*s, delim)) {
s++;
}
if (!*s) {
return NULL;
}

token = s;

while (*s && !in_character_class(*s, delim)) {
s++;
}
if (!*s) {
*last = s;
} else {
*s = '\0';
*last = s + 1;
}
return token;
}
потом опять файл tsrm_virtual_cwd.c
функция virtual_file_ex:
и тут наверно и идет бага:
Цитата:
while (ptr) {
...

} else if (!IS_DIRECTORY_CURRENT(ptr, ptr_length)) {
...
memcpy(&state->cwd[state->cwd_length], ptr, ptr_length+1);
...
ну а символ точка это как раз и есть 'IS_DIRECTORY_CURRENT' , следовательно можно использоывать не только длинную строчку из '/' а ещё и '/.'
остается конечно не понятно почему без точки в конце не пашет

Последний раз редактировалось ShAnKaR; 30.12.2008 в 20:49..
 
Ответить с цитированием

  #39  
Старый 30.12.2008, 21:38
Аватар для ShAnKaR
ShAnKaR
Пачка маргарина
Регистрация: 14.07.2005
Сообщений: 964
Провел на форуме:
4646474

Репутация: 1424


Отправить сообщение для ShAnKaR с помощью ICQ
По умолчанию

в винде по идее еще должно проходить с нормальным слешем и обратным:
Цитата:
#ifdef TSRM_WIN32
#include <tchar.h>
#define tsrm_strtok_r(a,b,c) _tcstok((a),(b))
#define TOKENIZER_STRING "/\\"
проверил php 4.4.9:
файл streams.c функция _php_stream_fopen_with_path

Цитата:
snprintf(trypath, MAXPATHLEN, "%s/%s", ptr, filename);
/* If file does not exist continue */
if (VCWD_STAT(trypath, &sb) != 0) {
ptr = end;
continue;
}
VCWD_STAT ( практически стандартная файловая функция stat ) проверяет сначала существует ли файл а потом php уже пытается открыть в пятой такого не заметил, тоесть у меня не заработало на четвертой версии, у вас как?

Последний раз редактировалось ShAnKaR; 21.02.2009 в 17:29..
 
Ответить с цитированием

  #40  
Старый 01.01.2009, 17:51
Аватар для ShAnKaR
ShAnKaR
Пачка маргарина
Регистрация: 14.07.2005
Сообщений: 964
Провел на форуме:
4646474

Репутация: 1424


Отправить сообщение для ShAnKaR с помощью ICQ
По умолчанию

вот на php 4 можно так тогда, да и на пятой тоже соответственно:
existing_dir/..//////////////////////// ... ///////////////////shell.php
окончание если есть обрежет по maxpathlen тогда
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT.XYZ