Уязвимость в SMF 1.1.4.

Автор Mavn, 01 апреля 2008, 11:17:42

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Mavn

При включенном register globals атакующий  может получить права администратора.

При помощи специального SQL запроса можно получить хэш пароля в алгоритме sha1(strtolower($username).$password) после чего сбрутить его с помощью одной программки. Если у кого то включен register globals лучше его отключите!!!



PS (от Simple Machines Russian Community)

Судя по тому что код в smf 2.0 и smf 1.1.4 для данного участка почти идентичен, то делаем вывод что линейка smf 2.0 тоже имеет данную уезвимость. Исходя из анализа кода можно сделать вывод что фиксом данном проблемы будет добавление небольшого изменения в код файла Sources/QueryString.php



 
// We've got topic!
 
if (isset($_REQUEST['topic']))
 {
  
// Make sure its a string and not something else like an array
  
$_REQUEST['topic'] = (string) $_REQUEST['topic'];

  
// Slash means old, beta style, formatting.  That's okay though, the link should still work.
  
if (strpos($_REQUEST['topic'], '/') !== false)
   list (
$_REQUEST['topic'], $_REQUEST['start']) = explode('/'$_REQUEST['topic']);
  
// Dots are useful and fun ;).  This is ?topic=1.15.
  
elseif (strpos($_REQUEST['topic'], '.') !== false)
   list (
$_REQUEST['topic'], $_REQUEST['start']) = explode('.'$_REQUEST['topic']);

  
$topic = (int) $_REQUEST['topic'];

  
// Now make sure the online log gets the right number.
  
$_GET['topic'] = $topic;
 }


после добавить


 
else
  
$topic 0;


PSS поскольку я не программист то могу ошибаться но уязвимость связана именно с тем что не определена переменная $topic вследствии чего при

Цитата: Журнал Хакерregister_globals = ON можно определить $topic через COOKIE и обойти фильтрацию.

Данная Новость опубликована по материалам журнала Хакер!!!
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

fancar

а в версии 1.1.2 есть эта дыра? что то не вижу такого параметра, регистр глобалс

Mavn

Цитата: fancar от 01 апреля 2008, 11:32:14
а в версии 1.1.2 есть эта дыра? что то не вижу такого параметра, регистр глобалс
наверняка есть...
register_globals это параметры php а не форума!!!!
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

fancar

ааа  wallbash. тьфу. ) смотрю че то знакомое

у меня в /etc/php.ini  выключено  angel

Dastali

Проверил... выключено.. на всякий запихал в .htaccess - php_flag register_globals off

Vened

дурацкий вопрос: а как проверить, включен этот параметр или нет?

leksus

Сейчас у большинства хостеров глобалсы выключены, только если кто специально включил (и если хостер разрешает менять этот параметр, что, кстати, не есть хорошо.)

Vened, создаешь в корне файл phpinfo.php с содержимым:
<?
phpinfo();
?>

Запускаешь в браузере, ищешь строчку "register_globals"

kas

Цитировать
Проверил... выключено.. на всякий запихал в .htaccess - php_flag register_globals off

спасибки. важный совет. надеюсь это поможет ::)
No comments

vladok

Сегодня у хостера выключено, завтра сдуру включит -иди знай...

    // We've got topic!
    if (isset($_REQUEST['topic']))
    {
        // Make sure that its a string and not something else like an array
        $_REQUEST['topic'] = (string)$_REQUEST['topic'];
       
        // Slash means old, beta style, formatting.  That's okay though, the link should still work.
        if (strpos($_REQUEST['topic'], '/') !== false)
            list ($_REQUEST['topic'], $_REQUEST['start']) = explode('/', $_REQUEST['topic']);
        // Dots are useful and fun.  This is ?topic=1.15.
        elseif (strpos($_REQUEST['topic'], '.') !== false)
            list ($_REQUEST['topic'], $_REQUEST['start']) = explode('.', $_REQUEST['topic']);

        $topic = (int) $_REQUEST['topic'];

        // Now make sure the online log gets the right number.
        $_GET['topic'] = $topic;
    }
    else
  $topic = 0;


Вот так?
Харе кришна, май либер зольдат...

InSide

Вот тут про регистре глобалс оч подробно расписано :
http://citforum.ru/internet/php/register_globals/
Зачем же быть душою общества, <br />Когда души в нем вовсе нет. (c) В.С.Высоцкий

kagorec

На недели смотрел на хакер.ру превью журнала свежего, где было написано в их жанре:
Сижу как то вечером и от нечего делать решил просмотреть смф движок якобы не убываемый  и после просмотра заметил багу... блаблабла чтото про кукисы.
Покупать в лом, но на трекере популярном запостил запрос на этот журнал.
-
Интерестно как отреагировал офф форум, или русские всегда впереди? =)
SMF - отличная альтернатива платному  vBulletin форуму. Разница в 250$ ощутима =)))
Интеграция DLE + SMF любой версии, 100% гарантии нет но основные функции работать будут независимо от версий.

Костя

Всем привет.
Я программист РНР, хотя самоучка. Был бы весьма признателен, если бы кто-нибудь объяснил, хотя бы в общих чертах, как именно, задав фальшивое значение для переменной $topic, можно получить администраторский пароль?

Pautinych


KapaBG

Цитата: Костя от 01 апреля 2008, 13:47:44
Всем привет.
Я программист РНР, хотя самоучка. Был бы весьма признателен, если бы кто-нибудь объяснил, хотя бы в общих чертах, как именно, задав фальшивое значение для переменной $topic, можно получить администраторский пароль?
как два палца. вводиш русскиме букваме в латинском регистри севоднешнее число, месяц. и седьмой слово в странице ответа суеш в брутефорс. это ейцо розроботчиков, которе расколол журнолист "хакера"

Костя

Княже, спасибо за ответ, но я честно говоря, ничего не понял. Подбор пароля через брутфорс - это (на сколько я понимаю) именно ПОДБОР пароля, как же это может быть связано с register_globals?

Может я чего-то не понимаю, но по-моему, либо это вовсе не уязвимость, либо это не то место, где имелась в виду уязвимость. Смотрите, в этом блоке обеспечивается следующая функциональность: если скрипту передан аргумент topic, то проверяется, не содержит ли он кроме номера ветки ещё и номер сообщения, на которое нужно прокрутить страницу. Этот номер сообщения может быть отделён от номера ветки либо косой чертой, либо точкой. В случае, если одно из двух содержится, то аргумент topic разбивается по этому разделителю на два: собственно topic  и start. Если не содержит, то он остаётся таким как есть.
Уязвимости, связанные с register_globals основаны вот на чём. Если нерадивый программист использует в своём скрипте некоторую переменную раньше, чем задаёт ей значение, то скрипт (при определённых установках сигнализации об ошибках) может при этом вроде как работать нормально. Включённая опция register_globals означает, что все аргументы скрипта ($_GET[...], $_POST[...], $_COOKIES[...]) становятся доступны так же и через одноимённые переменные. То есть, к примеру, если был передан аргумент $_GET['topic'], то РНР автоматически создаёт переменную $topic и присваивает ей значение $_GET['topic']. Таким образом, если в скрипте где-то использовалась переменная $topic раньше, чем ей было задано значение, то хакер может передать скрипту аргумент $_GET['topic'], его значение попадёт в переменную $topic, и это заставит скрипт работать как-то иначе.
Вернёмся теперь к нашему блоку кода. Если хакер, как он пишет, собирается передать что-то через куки, то есть через $_COOKIES['topic'], то $_REQUEST['topic'] окажется заданной, блок будет выполнен, и в любом случае (содержит ли переданное значение точку, или косую черту, или ничего из этого) будет выполнена строка: $topic = (int) $_REQUEST['topic'];, то есть в переменную $topic  попадёт целое число. Максимум, то есть самое худшее, чего может тут добится хакер, это попытка открыть несуществующую ветку, что конечно же не является уязвимостью, и нормально обрабатывается скриптом SMF.

KapaBG

Костя? blind injection тебе штоньть говорит?

Костя

До сих пор не говорило, сейчас поискал по сети, почитал, вроде понял что это. Но главное не понял - как это связано с нашим случаем? Ведь, как я писал, если хакер передаёт скрипту что-либо (что угодно) в качестве $topic, то в переменную $topic попадёт целое число. То есть, если хакер передал строку типа "1 AND EXISTS(SELECT * FROM users WHERE user='admin' AND password='12345')", то в переменную $topic попадёт число, не так ли?

bbbbbb

там еще есть опции

; Whether or not to register the old-style input arrays, HTTP_GET_VARS
; and friends.  If you're not using them, it's recommended to turn them off,
; for performance reasons.
register_long_arrays = On

; This directive tells PHP whether to declare the argv&argc variables (that
; would contain the GET information).  If you don't use these variables, you
; should turn it off for increased performance.
register_argc_argv = On

; When enabled, the SERVER and ENV variables are created when they're first
; used (Just In Time) instead of when the script starts. If these variables
; are not used within a script, having this directive on will result in a
; performance gain. The PHP directives register_globals, register_long_arrays,
; and register_argc_argv must be disabled for this directive to have any affect.
auto_globals_jit = On

Mavn

чуть позже может быть выложу видео на данную тему.
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

kagorec

Mavn аха не помешало бы, вечером если не появиться сам достать попробую.
SMF - отличная альтернатива платному  vBulletin форуму. Разница в 250$ ощутима =)))
Интеграция DLE + SMF любой версии, 100% гарантии нет но основные функции работать будут независимо от версий.

kas

У меня в phpinfo это:

register_argc_argv On On
register_globals Off On
register_long_arrays On On


это что значит? т.е. нужно все в off делать или достаточно лишь register_globals off??
No comments

Dastali

достаточно только register_globals off

aleksandr.v

Получил новость по почте. Первая мысль - первое апреля. Ан нет...

vladok

Вот ломаки и до SMF со скуки добрались.
Популярнее становимся, что ли? :)
***

Сунул багфиксу в скрипт. Целее будет :)
Харе кришна, май либер зольдат...

kas

#24
согласен. тоже внес изменения от греха...
и хочется все-же увидеть, как можно поломать. т.е. видео (ничего плохого не имея в мыслях! ::))

ну вот, честно написал, а уже в карму срут...  :o
No comments

slash

тото я гляжу, у меня второй день на форуме новые админы появляються))

bbbbbb

первое апреля - никому не веря  >:(

Artemius

Спасибо, я думаю стоит внести обновление, как говорил уважаемый kas.
А где еще можна почитать про уязвимости?

Набоков

      Я всё-таки не понял, если выключить register_globals то вносить правку необязательно, и если внести правку, то register_globals можно не выключать? Нельзя ли прояснить?  :)

Mavn

лучше пофиксить и выключить. пока жду ответа от разработчиков. как только получу ответ дам ссылку на видео
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

digger®

Цитата: Бергсон от 01 апреля 2008, 20:00:28
      Я всё-таки не понял, если выключить register_globals то вносить правку необязательно, и если внести правку, то register_globals можно не выключать? Нельзя ли прояснить?  :)

register_globals должно быть выключено в обязательном порядке!
В php5 оно выключено по умолчанию, а php6 его вообще не будет.

Serifa

У меня Версия PHP 4.4.4
А главное: я так и не поняла, где искать эту  register_globals ?? Там полно всяких ссылок типа Statistics Software Configuration... И так приходится каждый раз хостера в асе вылавливать и спрашивать, где там чего...

Ну почему такие элементарные вещи не преподавали в школе?
«- Помощник капитана Бакстер, - заявил Лумис, - безбожно врет. Все отнюдь не под контролем, вернее, не под его контролем. Корабль захвачен представителями небелковой формы разумной жизни, которые маскируются под обслуживающих роботов, а некоторые даже не делают и этого...»
«То, что у тебя есть, лечится антибиотиками» (nowhere man, 1995)
В телеге срочно нужны читатели!

Adept

Цитата: Dastali от 01 апреля 2008, 11:41:44
Проверил... выключено.. на всякий запихал в .htaccess - php_flag register_globals off
Сделал данный способ, при этом сразу стало выдавать ошибку хостинга 500. Убрал  запись, все заработало снова.

Mavn

Цитата: Adept от 01 апреля 2008, 22:13:31
Сделал данный способ, при этом сразу стало выдавать ошибку хостинга 500. Убрал  запись, все заработало снова.
Если 500 ошибка значит изменение данной директивы запрещено хостером. Для выключения данной директивы просите хостера сделать это!

His Divine Shadow Для начала читайте чего пишут!
Цитата: Dastali от 01 апреля 2008, 11:41:44
в .htaccess - php_flag register_globals off
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

slash

Цитата: His Divine Shadow от 01 апреля 2008, 21:58:17
У меня Версия PHP 4.4.4
А главное: я так и не поняла, где искать эту  register_globals ?? Там полно всяких ссылок типа Statistics Software Configuration... И так приходится каждый раз хостера в асе вылавливать и спрашивать, где там чего...

Ну почему такие элементарные вещи не преподавали в школе?
в php.ini или через .htaccess если хостинг разрешает
Цитата: Adept от 01 апреля 2008, 22:13:31
Сделал данный способ, при этом сразу стало выдавать ошибку хостинга 500. Убрал  запись, все заработало снова.
Не все хостинги разрешают прописывать какиенибудь значения в .htaccess, что и вызывает ошибку 500

axel

либо mawn где-то не там нашел "уязвимость", либо проблема надуманна.

KVL

Цитата: axel от 02 апреля 2008, 12:07:56
либо mawn где-то не там нашел "уязвимость", либо проблема надуманна.
Проблема не надумана, по безопасности (для безопасности), по умолчанию, у всех нормальных хостеров это должно быть выключено.

Mavn

Цитата: axel от 02 апреля 2008, 12:07:56
либо mawn где-то не там нашел "уязвимость", либо проблема надуманна.
Можете это считать первоапрельской шуткой если вам будет от этого легче.
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

axel

Цитата: KVL от 02 апреля 2008, 12:26:12
Проблема не надумана, по безопасности (для безопасности), по умолчанию, у всех нормальных хостеров это должно быть выключено.
про register_globals я не говорю, я имею ввиду конкретную "уязвимость", описанную в топике.

Цитата: Mavn от 02 апреля 2008, 12:32:29
Можете это считать первоапрельской шуткой если вам будет от этого легче.
я знал, я знал! (с) :)

savirmir

Цитата: Mavn от 02 апреля 2008, 12:32:29
Можете это считать первоапрельской шуткой если вам будет от этого легче.

Хм... так можем или не можем? ;)
Всё же, уважаемый Mavn, проясните ситуацию, а?..
Уже ведь почти 3-е апреля... :)
А если и вправду... :(

ЗЫ. Команду-то я проверю, а вот в коды без особой необходимости соваться бы не хотелось...

Mavn

А чего именно вам прояснить ? Я не мальчик который сидит и от нефига делать клепает всякую ерунду в новостях только для того чтобы народ всполошился! Тем кто хочет считать новость шуткой пусть дальше так и считают! Инфу о данной уязвимости нашел всех оповестил дальше что делать решайте сами, у меня других забот хватает без разъяснений...
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

KapaBG

Mavn не шутил, http://dvd.xakep.ru/
ЦитироватьВ этом видео от Elect'а, ты увидишь как хакер способен взломать свиду защищенный движок SMF. В принципе, теория полностью расписана в моей статье, но увидеть живую практику еще никогда не мешало. Сначала взломщик замечает, что может использовать в кукизах завершение строки %0A (несмотря на все фильтры и немыслимые запреты), а затем выделяет логические 0 и 1 для посимвольного брута. Итог сему - написание эксплойта для админского хэша. Его хакер и использует для получения прав админа (с предварительной расшифровкой хэша в PasswordPro, разумеется)
http://rapidshare.com/files/102498458/Moy_perviy_vzlomaniy_dvozhok.7z

bbbbbb

в куках фильтрация стоит одинаковая, ну там пару строк - такая как и на всех форум... не пройдет!
кстате а mod_security не поможет?

а кто видео смотрел? что там ?

для ipb много патчей выходило

ЦитироватьВо FreeBSD 7.0/6.x и в NetBSD 4 обнаружена уязвимость , связанная с возможностью целочисленного переполнения в libc функции strfmon(). Уязвимость может привести к выполнению кода злоумышленника при передаче в функцию strfmon() непроверенных аргументов посредством сторонних программ, использующих данную функцию.

Опасность уязвимость возрастает, так как функция используется в mod_php5, для которого уже создан эксплоит, позволяющий выполнить код в системе, через php-скрипт в котором параметры пользователя без дополнительных проверок передаются в php функцию money_format(), работа которой основана на strfmon().


http://www.opennet.ru/opennews/art.shtml?num=15012

KapaBG

1.1.4 - точно
под 80 мег качать придется

Mavn

под smf 2.0 тоже потому как в том участке код идентичен!
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

kagorec

Скачал видео, пока ждал пока качается вспомнил сборку уязвимостей на ачате _http://forum.antichat.ru/thread46567.html
SMF - отличная альтернатива платному  vBulletin форуму. Разница в 250$ ощутима =)))
Интеграция DLE + SMF любой версии, 100% гарантии нет но основные функции работать будут независимо от версий.

savirmir

Цитата: Mavn от 02 апреля 2008, 22:17:50
А чего именно вам прояснить ? Я не мальчик который сидит и от нефига делать клепает всякую ерунду в новостях только для того чтобы народ всполошился! Тем кто хочет считать новость шуткой пусть дальше так и считают! Инфу о данной уязвимости нашел всех оповестил дальше что делать решайте сами, у меня других забот хватает без разъяснений...

Спасибо за разъяснение! Уязвимость на хосте проверил, строка
php_flag register_globals off
работает!
Правлю код...
Ещё раз спасибо!

savirmir

Цитата: leksus от 01 апреля 2008, 11:47:03
Сейчас у большинства хостеров глобалсы выключены, только если кто специально включил (и если хостер разрешает менять этот параметр, что, кстати, не есть хорошо.)

Vened, создаешь в корне файл phpinfo.php с содержимым:
<?
phpinfo();
?>

Запускаешь в браузере, ищешь строчку "register_globals"

Спасибо за совет!
Превосходно проверка работает!
Хм... только думаю, неплохо было бы напомнить, что оставлять такой файл в папке с форумом не стоит... Поглядел... и удалил! ;)

kagorec

#48
register_globals выключен и пользователи не смогут загружать ни файлы в атач ни автары...
-
Посмотрел видео от Элект, удивила наглость хакера, все опыты делались над форумом разработчиков http://www.simplemachines.org/community/  knuppel knuppel knuppel
SMF - отличная альтернатива платному  vBulletin форуму. Разница в 250$ ощутима =)))
Интеграция DLE + SMF любой версии, 100% гарантии нет но основные функции работать будут независимо от версий.

savirmir

Цитата: kagorec от 02 апреля 2008, 23:37:22
register_globals выключен и пользователи не смогут загружать ни файлы в атач ни автары...

Не надо ля-ля!!! :(
Только что проверил и то и это на "болванчике"!
Всё аватарится и вкладывается!

Кстати, на другом моём форуме, как оказалось, register_globals был выключен изначально хостером...  >:D
А там издавна широко пользуются вложениями, про аватары и так понятно!