|
|
|
| Дописал уже скриптик конкретный, и уже вылизываю ошибки, и на наличия дырок решил проверить, если не трудно тыкните, сто пудов знаю что есть :) но где ))
Просто покажу пару примеров скрипта на чём почти всё и работает, вы плиз скаждите как лучше :)
А то стока наговорили я не чего и не понял :)
Файл index.php
<?
include "config.php"; //Стартует соединение с базой данных
include "plugins/stat.php"; //Подключаем статистику посещения людей
include "plugins/search_bot.php"; //Подключаем статистику посещения ботов
include_once('templars/xtemplate.class.php'); //Стартует подключение к шаблону сайта
$xtpl = new XTemplate('templars/standart/templars.xtpl'); //Обьявляем класс шаблонов
ob_start();
$mod=$_GET["mod"];
if($mod==""){$mod=index;}
if (!IsSet($mod))
{
include "./modules/".$mod.".php";
}
else
{
include "./modules/".$mod.".php";
}
$contents=ob_get_contents();
ob_end_clean();
?>
|
Тут есть дырки какиенить? или нет? вроде код маленький но кто то говорил что дырявый :(
Если не трудно плз подскажите :) | |
|
|
|
|
|
|
|
для: Panker
(23.11.2006 в 10:31)
| | >Тут есть дырки какиенить?
ну через $mod можно передать любое имя файла... причем, вместе с путем. Если не ошибаюсь, то расширение php можно отсечь нулевым символом... Короче, любой файл на сервере можно выполнить как php скрипт.
В общем, классическая дыра. | |
|
|
|
|
|
|
|
для: Loki
(23.11.2006 в 10:40)
| | хех ) действительно ))
http://newcms/?mod=../administration/password захожу так )) и хоп пароль спрашивают, хорошо что не чего не выводит и так далее, так как в админке не по шаблону сделано, но факт :) | |
|
|
|
|
автор: Aac (23.11.2006 в 12:38) |
|
|
для: Panker
(23.11.2006 в 10:53)
| | Что еще за нулевой символ?? | |
|
|
|
|
|
|
|
для: Aac
(23.11.2006 в 12:38)
| | chr(0) | |
|
|
|
|
|
|
|
для: Panker
(23.11.2006 в 10:31)
| |
if (!IsSet($mod))
{
include "./modules/".$mod.".php";
}
else
{
include "./modules/".$mod.".php";
}
|
подняла тему.. =) мне интересно для чего это? какая разница что будет перменная $mod или нет... одно и тоже | |
|
|
|
|
|
|
|
для: Binura
(11.08.2007 в 01:06)
| | Я больше скажу. После строки $mod=$_GET["mod"]; она всегда будет существовать.
А в строке if($mod==""){$mod=index;} потенциальная дыра.
Если кто-то раньше по потоку объявит константу - то сможет загрузить собственный файл.
Сколько раз говорить, нотайсы отключать можно только программистам уровня cheops'a. | |
|
|
|
|
|
|
|
для: Trianon
(11.08.2007 в 01:17)
| | 1)
>Если кто-то раньше по потоку объявит константу - то сможет загрузить собственный файл.
как это понять?по потоку? объявит константу? ты про GET? =))
2)
>Сколько раз говорить, нотайсы отключать можно только программистам уровня cheops'a.
что отключать? =)) | |
|
|
|
|
|
|
|
для: Binura
(11.08.2007 в 05:33)
| | 1. Насчет загрузки своего файла Trianon ошибся. Все равно $mod вставляется в путь на сервере и указать URL не выйдет. Иначе если пользователь каким-то образом смог бы задать свое значение константе "index", то он бы мог загрузить свой скрипт.
2. Notice - замечание, которое может быть вызвано, допустим, вызовом несуществующей константы. | |
|
|
|
|
|
|
|
для: Unkind
(11.08.2007 в 05:54)
| | >1. Насчет загрузки своего файла Trianon ошибся. Все равно $mod вставляется в путь на сервере и указать URL не выйдет. Иначе если пользователь каким-то образом смог бы задать свое значение константе "index", то он бы мог загрузить свой скрипт.
А вот это совсем не факт.
include'ов там сверху преизрядно. Достаточно одному оказаться слабеньким и ... | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2007 в 00:54)
| | include'ов там сверху преизрядно.
В том-то и дело, что они сверху. Эта потенциальная дыра ниже. Хотя, конечно, возможно в файле с модулем могут быть дыры. | |
|
|
|
|
|
|
|
для: Unkind
(12.08.2007 в 11:55)
| | >include'ов там сверху преизрядно.
>В том-то и дело, что они сверху. Эта потенциальная дыра ниже. Хотя, конечно, возможно в файле с модулем могут быть дыры.
Оставляя обращение к контенту через неопределенную константу (или переменную - неважно) программист расширяет область ответственности за возникновение потенциальной уязвимости с одной строчки до всего кода выше нее, включая все файлы которые могут инклудить данный файл. Вот что я имел в виду под дырой.
Интересно, куда делось мое исходное сообщение? | |
|
|
|
|
|
|
|
для: Panker
(23.11.2006 в 10:31)
| | Нужно регуляркой отрезать всё, кроме букв и цифр(если нужны) в переменной $mod и всё будет хорошо) | |
|
|
|
|
|
|
|
для: Panker
(23.11.2006 в 10:31)
| | По моему безопаснее в параметре mod передавать не название страницы, а какой-либо ключ соответствующий этой странице, а путь к странице выбирать либо
1. при помощи switch, уже в зависимости от mod,
2. либо хранить путь в массиве типа
$files = array (1 => "index.php",
...)
а потом получать его вот так $files[$mod].
в любом из 2-х случаев уже не получиться открыть левый файл из вашего скрипта. | |
|
|
|
|
|
|
|
для: Panker
(23.11.2006 в 10:31)
| | >
><?
> $mod=$_GET["mod"];
> if($mod==""){$mod=index;}
> if (!IsSet($mod))
> {
> include "./modules/".$mod.".php";
> }
> else
> {
> include "./modules/".$mod.".php";
> }
> $contents=ob_get_contents();
> ob_end_clean();
>?>
>
|
и вот мне все равно не понятно... как?
ладно с расширением я поняла, ставим 0байт перед ним...
но как же ./modules/ ?
он все равно будет....
получется ./modules/http://hack.ru/hello.php%00.php
это может навредить? =(
может вообще удалять с подобных мест 'http://'
или
$mod = str_replace(chr(0), '', $mod); | |
|
|
|
|
|
|
|
для: Binura
(11.08.2007 в 05:44)
| | имееться ввиду лоакльный файл подгрузить например.. имея паралельный доступ на сервер (например хостинг) загрузить в /tmp файл shell.php а дальше ?mod=../../../../../../../../../tmp/shell :) | |
|
|
|
|
|
|
|
для: Sobachka
(11.08.2007 в 09:22)
| | но вроде как в пхп 5 этого уже нету
Лёха, не пугай меня. NUL-байт (0x00) с PHP вообще не связан. | |
|
|
|
|
|
|
|
для: Unkind
(11.08.2007 в 09:26)
| | >Лёха, не пугай меня. NUL-байт (0x00) с PHP вообще не связан.
Ога... я не спал ещё... тежело думаецо =) ну я убрал ещё до того как ты писал :-p | |
|
|
|
|
|
|
|
для: Unkind
(11.08.2007 в 09:26)
| | Что-то я на счет нулевого байта не понял, как это с PHP не свзяан? на сколько я знаю он отрезает всю строку после себя. и передается вот так %00, а избежать этого можно, вклдючив magic_quotes_gpc = ON, тогда он просто экранируется
Конечно я могу ошибаться, или просто что-то не так понял, тогда поправьте меня пожалуйста и еще особо не бейте: я хороший, пригожуся. | |
|
|
|
|
|
|
|
для: parczynski
(11.08.2007 в 20:55)
| | Lichno ya sozdal sebe functiu tipa
<?php
function safe($x,$length = FALSE){
$x=trim($x);
$x=htmlspecialchars($x);
if(!get_magic_quotes_gpc()){ // Ne pomnyu pravilnogo nazavaniya, esli chesno - pishu po pamyati
$x=mysql_escape_string($x);
}
$x=str_replace('%',' percent',$x);
$x=str_replace('\n','<br>',$x);
if(is_numeric($length)){
$x=substr($x,0,$length);
}
return $x;
}
$var = safe($_POST['name'],50);
?>
|
| |
|
|
|
|
|
|
|
для: stas1987
(12.08.2007 в 08:24)
| | Блин,вбывав бы гадив... :-D Раньше носились с идеей создать философский камень,превращающий все в золото,теперь-с универсальной функцией защиты,защищающей от всего (кстати,в этой функции забыли еще применить strip_tags)... а если в переменной пользователя не текст,а зашифрованный пароль передается ? После trim'а и htmlspecialchars'а-пипец паролю наверняка... | |
|
|
|
|
|
|
|
для: stas1987
(12.08.2007 в 08:24)
| | Не хер значит передавать зашифрованные пароли.
А функция не универсальная, это, скажем, небольшое решения для проверки ввода данных. Чтоб не вводили, то что не нужно | |
|
|
|
|
|
|
|
для: stas1987
(15.08.2007 в 19:37)
| | >Не хер значит передавать зашифрованные пароли.
А по-моему, куда разумнее не применять этот код.
>А функция не универсальная, это, скажем, небольшое решения для проверки ввода данных.
>Чтоб не вводили, то что не нужно
Сделать так, чтоб некоторые еще и не советовали то, что ненужно, куда сложнее.
Функцией тут не обойдешься. | |
|
|
|
|
|
|
|
для: stas1987
(15.08.2007 в 19:37)
| | Говорите,нехер передавать шифрованные пароли...В таком случае рекомендую вставить в ваши скрипты строку :echo 'Введите пароль (напоминаю,ваш пароль -76800912)'... По моему мнению,любой,кто передает пароль в открытом виде в кукисах(пост,гет)-потенциальный мазохист-самоубийца... | |
|
|
|
|
|
|
|
для: Ralph
(15.08.2007 в 20:52)
| | И вообще,как правильно заметил не помню кто,если бы была универсальная функция защиты от всего,то разработчики php (люди,по моему,отнюдь не глупые),давно ввели нечто вроде $a=protect($_GET['login'].и что значит-чтобы не вводили что не надо ? А если надо мат.формулу ,где должны быть и > и < ??? | |
|
|
|
|
|
|
|
для: Ralph
(15.08.2007 в 20:52)
| | По моему мнению,любой,кто передает пароль в открытом виде в кукисах(пост,гет)-потенциальный мазохист-самоубийца...
Как Вы прошли аутентификацию? Вы потенциальный мазохист-самоубийца? | |
|
|
|
|
|
|
|
для: Unkind
(15.08.2007 в 21:07)
| | Да-один раз,при регистрации,в противном случае ,увидев ВТОРОЙ РАЗ мой пароль в открытом виде ,я навсегда покину такой ресурс (или вы не понимаете,о чем речь,или одно из двух...) | |
|
|
|
|
|
|
|
для: Ralph
(15.08.2007 в 21:20)
| | увидев ВТОРОЙ РАЗ мой пароль в открытом виде ,я навсегда покину такой ресурс
Посмотрите исходный HTML-код страницы.
<input size=25 class=input type=password name=pswrd size=61 maxlength=100 value='Тут_Ваш_пароль_в_отрытом_виде'>
|
Вы что, собираетесь сейчас покинуть этот ресурс навсегда?
вы не понимаете,о чем речь
А Вы понимаете? | |
|
|
|
|
|
|
|
для: Ralph
(15.08.2007 в 21:20)
| | Отвечая на сообщение, просто откройте исх. текст HTML страницы с формой ответа и поищите там type=password | |
|
|
|
|
|
|
|
для: Ralph
(15.08.2007 в 21:20)
| | Для особо непонятливых-повторю еще раз:человек изложил свою функцию,я обьяснил,что во многих случаях она не подойдет,он мне ответил,что не стоит передавать пароль в зашифрованном виде,я ответил,что он неправ...Вы мне возразили,то есть вы считаете,чтоб все же стоит передавать пароль пользователя в открытом незакодированном виде ??? | |
|
|
|
|
|
|
|
для: Ralph
(15.08.2007 в 21:28)
| | Для особо непонятливых-повторю еще раз
Уж кто непонятливый, так это Вы. :) Какая бы дрянная и бесполезная функция ни была, он имел ввиду не нужно передавать зашифрованный пароль самой функции. | |
|
|
|
|
|
|
|
для: Unkind
(15.08.2007 в 21:29)
| | >Какая бы дрянная и бесполезная функция ни была, он имел ввиду не нужно передавать зашифрованный пароль самой функции
Дряную и бесполезную функцию нужно выкинуть. Тогда не представится оказии ей что-то передать.
И в этом Ralph прав абсолютно. | |
|
|
|
|
|
|
|
для: Ralph
(15.08.2007 в 21:28)
| | >то есть вы считаете,чтоб все же стоит передавать пароль пользователя в открытом незакодированном виде ???
Нет, конечно. Это плохо. И с этим активно несогласны пожалуй лишь администраторы форума.
Я Вам возразил, потому что считаю, что Вам стоит быть сдержаннее в выражениях.
Unkind, я уверен - тоже.
А то придется наклеиться на собственный ярлык. Либо покинуть ресурс. | |
|
|
|
|
|
|
|
для: Unkind
(15.08.2007 в 21:07)
| | Обьясню еще раз для особо одаренных:человек написал функцию,я ответил,что не во всех случаях она пригодна,он ответил,что не стоит передавать пароль в зашифрованном виде,я ответил,что он неправ...То есть вы за то,чтобы пароль передавался в открытом виде постоянно ? | |
|
|
|
|
|
|
|
для: Ralph
(15.08.2007 в 21:35)
| | я ответил,что не во всех случаях она пригодна
А Вы её собираетесь для всех случаев использовать? :)
он ответил,что не стоит передавать пароль в зашифрованном виде
Функции не стоит передавать. Никто Вас не просит передавать шифрованный пароль фукнции. Никто.
я ответил,что он неправ
Очень необдуманно.
То есть вы за то,чтобы пароль передавался в открытом виде постоянно ?
Я считаю, как и Trianon, что Вам надо обдумывать ответ, прежде чем нажать "Отправить". | |
|
|
|
|
|
|
|
для: Unkind
(15.08.2007 в 21:39)
| | Функции не стоит передавать...ГДЕ Я ПИСАЛ О ПЕРЕДАЧЕ ФУНКЦИИ ??? По моему,вы не хотите вникнуть в суть вопроса,а просто придраться к словам...Поверьте,я это умею не хуже вас...А если вас раздражает то,что я смею кому-то перечить,то...уж извините,мне плевать на статус,я выскажу,как оно есть.Буду неправ-признаю это,нет-буду бороться за свою точку зрения до конца.Кстати,спасибо за инфу,что в этом форуме пароль открыт... | |
|
|
|
|
|
|
|
для: Ralph
(15.08.2007 в 22:04)
| | Извиняюсь за флуд,с телефона не сразу увидишь,кэширована страница или нет... | |
|
|
|
|
|
|
|
для: Ralph
(15.08.2007 в 22:08)
| | Извиняюсь за флуд,с телефона не сразу увидишь,кэширована страница или нет...
Вот лучше поднимите тему - http://softtime.ru/forum/authorthmes.php?id_author=2453&id_forum=1. А то про неё забыли. | |
|
|
|
|
|
|
|
для: Ralph
(15.08.2007 в 22:04)
| | ГДЕ Я ПИСАЛ О ПЕРЕДАЧЕ ФУНКЦИИ ???
а если в переменной пользователя не текст,а зашифрованный пароль передается ? После trim'а и htmlspecialchars'а-пипец паролю наверняка...
А как это понимать? Каким таким образом зашифрованный пароль попадет "под раздачу" trim'а и прочих функций, присутствующих в функции stas1987'а?
Вы странный человек. Говорите и тут же забываете. | |
|
|
|
|
|
|
|
для: Unkind
(15.08.2007 в 22:10)
| | Возьмите пароль и шифраните через AES_ENCRYPT.и когда у вас первый байт пароля будет %20 или любой байт пароля равен %26,тогда посмотрим...Или вы считаете,что все функции кодирования пароля ограничиваются md5 с его диапазоном (0-9a-f) ??? | |
|
|
|
|
|
|
|
для: Ralph
(15.08.2007 в 22:23)
| | Скажите мне, пожалуйста, при чем тут обработка бинарных данных строковыми функциями? Я разве спорил по этому поводу? | |
|
|
|
|
|
|
|
для: Unkind
(15.08.2007 в 22:40)
| | Все,оффтоп зашел слишком далеко...Всем желающим отвечать в теме раздела "разное",тема "Trianon & Unkind vs Ralph",а эту тему засирать не стоит... | |
|
|
|
|
|
|
|
для: parczynski
(11.08.2007 в 20:55)
| | Что-то я на счет нулевого байта не понял, как это с PHP не свзяан?
NUL-байт и его значение в компьютерном мире - не заслуга программистов PHP. Поэтому, то, что в PHP он может появится, а может пропасть сказано, мягко говоря, необдуманно. Но по заверению автора того поста, он еще спал. :) | |
|
|
|