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

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

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

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

kagorec

#50
ля-ля ненадо, хорошо а как тогда с установкой какого либо мода?

-

ЦитироватьА вот прежде чем давать подобные утверждения, неплохо было бы самому их проверить!

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

savirmir

Цитата: kagorec от 03 апреля 2008, 00:06:45
ля-ля ненадо, хорошо а как тогда с установкой какого либо мода?
Мод мне пока без надобности...
А вот прежде чем давать подобные утверждения, неплохо было бы самому их проверить!  :-X

Шева

Спасиб за информацию. Подправил все что доктор прописал. ;)
Каждый человек способен на многое. Но к сожалению, не каждый знает, на что он способен.

GodDan

Одно смущает – полная тишина на форуме разработчиков и в новостях их сайта.
Не верится, что столько серьезная уязвимость, опробованная на их оф.форуме и осталась без внимания... не понимаю такого затишья, здесь надо было уже выпусти исправления в теч. суток с момента подтверждения проблемы. А они молчат!

И еще.
А как быть людям у которых php_flag register_globals On  (включен) и отключить его невозможно по причинам: а) запрет хостера; б) сайт работает исключительно благодаря включенному "register_globals". Насколько я понимаю, такие люди не спасут свои форумы выполнив только изменения в коде файла Sources/QueryString.php.

digger®

Цитата: GodDan от 03 апреля 2008, 03:44:50
Одно смущает – полная тишина на форуме разработчиков и в новостях их сайта.
Не верится, что столько серьезная уязвимость, опробованная на их оф.форуме и осталась без внимания... не понимаю такого затишья, здесь надо было уже выпусти исправления в теч. суток с момента подтверждения проблемы. А они молчат!
А где серьезная уязвимость?
В сайтах которые не могут работать без register_globals? В хостерах которые не дают выключать register_globals? В головах админов, у которых пароли "123"?
Ну так а SMF тут при чем?

Avdenago

Цитата: GodDan от 03 апреля 2008, 03:44:50
Одно смущает – полная тишина на форуме разработчиков и в новостях их сайта.

Нет, ну давайте всему миру раструбим, что и как взломать. Оно надо? Тихонько поправят и все. А панику вокруг такого никогда не надо поднимать.

Костя

О! Теперь дело прояснилось. Да, это не первоапрельская шутка. И я теперь сам могу ответить на свой вопрос в этой ветке. Всё дело в ранее имеющейся в коде строке:
$_REQUEST = $_POST + $_GET;
В которой переменная $_REQUEST перезаписывается, так что куки в неё не попадают. Таким образом, когда хакер передаёт топик в куках, приведённый блок кода не выполняется и в переменной $topic (при включённых register_globals) оказывается то, что передал туда хакер.
Так что, господа товарищи, правьте код, если не хотите однажды обнаружить на своём форуме много весёлых изменений :)

Dastali

Костя спасибо за разьяснения...
хоть register_globals off
все равно пойду поправлю код в файле...

GodDan

#58
Цитата: digger от 03 апреля 2008, 03:55:11
А где серьезная уязвимость?
В сайтах которые не могут работать без register_globals? В хостерах которые не дают выключать register_globals? В головах админов, у которых пароли "123"?
Ну так а SMF тут при чем?
Притом. Объясню.

Первый чел. вынужден уйти от своего хостера, запрещающего выкл. register_globals, и начать метаться в поисках нового который разрешает выкл (не все хостеры выкл. по умолчанию "register_globals", так как многие клиенты используют "On"). Второй чел. вынужден вырубит "register_globals" тем самым спасти форум, но остаться без рабочего сайта (которому нужен  "register_globals On", а потом он еще будет тратить время и деньги на переделывание сайта который до этого исправно работал. Третьему чел. возможно вообще придется и хостера искать и сайт переделывать... А главное, что до 1 апреля у этих людей не было проблем ни с сайтами ни с хостерами, а теперь из-за выкл. "register_globals" ради SMF они у них появились. И после этого SMF вообще нипричем?

Я никого не обвиняю, ни переубеждаю, ни от кого ничего не требую. Я лично согласен "register_globals" НАДО выкл., но как я выше описал у некоторых это выкл. может вызвать ряд затруднений.
Поэтому я и хочу обратить внимание сообщества на то, что вопрос с уязвимостью надо решать правкой кода форума, а не выключением сервера из розетки. Ну вот нет у человека сейчас времени, сил и средств чтобы обеспечить выключение "register_globals".

Отсюда и ожидание скорейшего выхода новой версии форума с исправленным КОДОМ, а не наставлениями "выкл. "register_globals" и еще это, и это".

kas

Цитата: GodDan от 03 апреля 2008, 12:46:50
Отсюда и ожидание скорейшего выхода новой версии форума с исправленным КОДОМ, а не наставлениями "выкл. "register_globals" и еще это, и это".

Уважаемый, ведь ясно сказано что можно своими силами внести правку в код, и после этого форум будет закрыт от той опасности даже с включенным "register_globals"!!

Не нужно кричать еще раз о том что нужно патчить. Разработчику виднее...
No comments


Костя

В видеоролике показывается как хакер получает пароль админа форума.

KapaBG

получить мона только хэш, пароли тама не хранятсо. и рашшифровать хэш мона еслеф пароля  простой как типа 12345. существуют словари наиболее употребляемых паролей, составленных исходя из тово что админ обладает дрявой памятью или не блещет фонтазией, типа имя сабаки или жены. и есть еще и база мд5 хэшей из всех сочетаний английских буковок и циферек до 7 символов в нижнем регистри. таким образом если ссыш за свой пароль - постарайсе забацать ево из 10-12 буковок в разных регистрах и вперемешку с ангельскиме и русскиме буковкаме.

digger®

Цитата: Костя от 03 апреля 2008, 20:43:07
В видеоролике показывается как хакер получает пароль админа форума.

Кино не досмотрел, поэтому с интересом послушаю как можно из хеша sha1 восстановить нормальный пароль состоящий символов из 12 и не являющийся словом.

Набоков

      У меня по времени совпало выключение глобалса, правка кода и возникновение проблемы с отказом в открытии нового голосования. При попытке его открыть выскакивает «Вы не можете зайти в этот раздел». Это случайное стечение обстоятельств и причина отказа голосования не в первом и втором действиях? 

Костя

#65
Цитата: digger от 03 апреля 2008, 21:22:42
Кино не досмотрел, поэтому с интересом послушаю как можно из хеша sha1 восстановить нормальный пароль состоящий символов из 12 и не являющийся словом.
Я сам не хакер, а в кино он просто вставил хеш и имя пользователя в программу PasswordPro и та тут же показала пароль. К тому же, если человек задался целью, и у него на это есть достаточно времени, то рано или поздно, имея нормальный современный компьютер, методом перебора можно подобрать и 12-ти символьный пароль.
ЦитироватьУ меня по времени совпало выключение глобалса, правка кода и возникновение проблемы с отказом в открытии нового голосования.
Похоже это оно. У меня та же фигня. Похоже лучше закрыть эту дырку чуть-чуть иначе. Вместо присваивания переменной $topic значения 0, лучше её совсем убить. То есть, вместо
} else
  $topic=0;

дописать
} else
  unset($topic);

digger®

Цитата: Костя от 04 апреля 2008, 01:24:13
Я сам не хакер, а в кино он просто вставил хеш и имя пользователя в программу PasswordPro и та тут же показала пароль.

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

Костя

Ну там плохая видимость, но я так понял, что вставив хеш он увидел пароль. А может не увидел, а имелось в виду, что щас она его подберёт.

KapaBG

Цитата: Костя от 04 апреля 2008, 01:24:13
К тому же, если человек задался целью, и у него на это есть достаточно времени, то рано или поздно, имея нормальный современный компьютер, методом перебора можно подобрать и 12-ти символьный пароль.
ты Костя прежде чем давать такие смешные диагнозы поразберись с алгоритмом формирование хотябы md5

Набоков

Цитата: Костя от 04 апреля 2008, 01:24:13
Похоже это оно. У меня та же фигня. Похоже лучше закрыть эту дырку чуть-чуть иначе. Вместо присваивания переменной $topic значения 0, лучше её совсем убить. То есть, вместо
} else
  $topic=0;

дописать
} else
  unset($topic);
А это не приведёт к ещё каким ни будь побочным эффектам?

kas

Цитата: Бергсон от 04 апреля 2008, 07:37:24
      А это не приведёт к ещё каким ни будь побочным эффектам?

а ты проверь :D (шутка)

ps: жаль ссылочку быстро убрали. но журнал есть, и интереса ради можно посмотреть сеё видео
No comments

domofor

Цитата: Бергсон от 03 апреля 2008, 21:46:21
правка кода и возникновение проблемы с отказом в открытии нового голосования. При попытке его открыть выскакивает «Вы не можете зайти в этот раздел».
Проверил сейчас у себя - то же самое: "Ошибка! Вы не можете зайти в этот раздел". Что будем делать? Исправлять как советует Костя? Или сообщать юзерам, что голосования отныне отменяются? :)

Набоков

Цитата: dom-forum от 04 апреля 2008, 11:11:40
Что будем делать? Исправлять как советует Костя? Или сообщать юзерам, что голосования отныне отменяются? :)
Может быть всё-таки допустимо код вернуть к первоначальному виду просто выключив глобалс? Без голосований это не форум; у меня каждый день их открывают несколько штук.

Matveyich

ну как сказал Костя с unset($topic) все работает

domofor

Цитата: Matveyich от 04 апреля 2008, 11:33:54
ну как сказал Костя с unset($topic) все работает
Я не спец по php, но любопытно, почему только голосование "сломалось"? Если принять колину поправку, то что еще может перестать работать в теории?

Костя

Цитата: Бергсон от 04 апреля 2008, 07:37:24
      А это не приведёт к ещё каким ни будь побочным эффектам?
Ну, 100% гарантию дают только в банке. Я же предлагаю проследить мою логику, понять суть изменения и самостоятельно принять решение.
Итак, найденная уязвимость заключается в следующем. В программе используется переменная $topic для обозначения номера ветки, которую требуется показать. Данные (число) попадают в эту переменную через параметры, передаваемые в скрипт (GET или POST). Приведённый в начале этой ветки код занимается обработкой этих данных, и предназначен обеспечить следующее: если в GET или в POST что-то передано для номера ветки, то оно разбирается на случай если там кроме номера ветки имеется номер сообщения, затем информация приводится к виду целого числа (как раз, чтобы исключить возможность передать здесь вредоносный код вместо номера), и результат записывается в переменную $topic. Если же в GET или в POST не было ничего передано для $topic, то предполагается, что переменная $topic окажется не определена. Хакер использует вот какую, неучтённую программистами форума, возможность: при включённой установке register_globals, если передать что-то в куке по имени topic, то РНР автоматически создаст переменную $topic и поместит это туда. Командой $topic=0 мы исключаем возможность оставить в переменной $topic вредоносный код. Но мы так же создаём эту переменную, если она не была создана раньше. Видимо при создании голосований, код проверяет наличие (не содержимое, а факт наличия) переменной $topic. Обнаружив там 0, он пытается найти ветку с этим номером. Такой ветки, естественно не существует, в результате выдаётся соответствующее сообщение об ошибке. Я предлагаю вместо обнуления переменной $topic уничтожить её. То есть привести скрипт к такому состоянию, в котором он был до передачи хакером какого-то значения для $topic.

Цитироватьты Костя прежде чем давать такие смешные диагнозы поразберись с алгоритмом формирование хотябы md5
Я бы очень хотел это сделать, и даже пытался когда-то, но к сожалению моего уровня математической подготовки для этого недостаточно. Тем не менее, я понимаю, что не должно существовать прямого алгоритма дешифрования хеша - то есть какой-то формулы, которая на основании хеша даст исходный пароль. И тем не менее, каким бы ни был алгоритм формирования хеша, в любом случае, программисту не составит труда сделать программку, которая будет перебирать все возможные комбинации всех возможных символов, делать из них хеш, и сравнивать его с имеющимся (добытым) хешем. Конечно, для длинного пароля такой подбор может потребовать колоссального времени. Но админы ведь не меняют пароль раз в неделю. А неделя непрерывной работы современного компьютера - это колоссальное количество вычислений. Я не могу сейчас прикинуть сколько именно, но думаю этого достаточно для довольно длинного пароля.
Кроме того, даже не столь важно, сможет хакер получить пароль админа, или не сможет. Важно то, что есть уязвимость, позволяющая выполнить вредоносный код. Нам трудно сейчас представить все возможные варианты использования этой уязвимости. Может целью хакера будет не пароль админа, а пароль кого-то из его оппонентов на форуме, от имени которого он потом напишет "Я чёкнутый псих со справкой", или хрен знает что ещё. Поэтому желательно эту дырку всё-таки закрыть, не так ли?

Костя

Цитата: dom-forum от 04 апреля 2008, 12:05:02
Я не спец по php, но любопытно, почему только голосование "сломалось"?
Видимо потому, что голосование можно создать как новую тему, и можно добавить в существующую тему. Видимо, при добавлении в существующую тему, об этом сигнализирует наличие переменной $topic, содержимое которой указывает в какую именно тему следует добавить голосование. Тогда, при оригинальном варианте правки, скрипт будет пытаться добавить голосование в тему с номером 0.

Tair

Цитата: Dastali от 03 апреля 2008, 11:42:38
хоть register_globals off

Я использую php_value "register_globals" "0" в файле .htaccess

KapaBG

Костя, короче ты валенок што касаетсо хэшей. мой совет заюзать сложный пароль из 10-12 символов непробиваемый даже для упорных валенков с компом годами молотящим только подбор пароля

kas

Цитата: Княже от 04 апреля 2008, 13:10:47
Костя, короче ты валенок што касаетсо хэшей. мой совет заюзать сложный пароль из 10-12 символов непробиваемый даже для упорных валенков с компом годами молотящим только подбор пароля

от себя добавлю что пароль нужно делать сложным, и что не маловажно часто его менять. раз в месяц достаточно. т.е. в этом случае даже специальные компы по подбору паролей (радуга, брутфорс, etc) идут лесом
No comments

domofor

Цитата: Костя от 04 апреля 2008, 12:23:28
Видимо, при добавлении в существующую тему, об этом сигнализирует наличие переменной $topic, содержимое которой указывает в какую именно тему следует добавить голосование. Тогда, при оригинальном варианте правки, скрипт будет пытаться добавить голосование в тему с номером 0.
Я попробовал создать голосование как НОВУЮ тему. Поэтому логика объяснения про добавление голосования в существующую тему как-то не проходит.

Костя

Она пройдёт, если напрячься. Когда добавляешь голосование в НОВУЮ тему, то скрипту не передаётся ни $_GET['topic'], ни POST['topic']. Переменная $topic таким образом должна быть не установлена, что и должно сигнализировать скрипту о том, что голосование нужно создать как новую тему. Скрипт проверяет, если она не установлена, значит речь идёт о новой теме, а если установлена, значит нужно добавить голосование в тему с номером, указанным в $topic. После внесения оригинального исправления ($topic=0), переменная $topic становится установлена несмотря на то, что она не была передана в параметрах. Поэтому скрипт пытается добавить голосование в существующую тему с номером 0.

slash

Такой вопрос, вот сняли с меня админку, поставили другова админа.
Я себе выставил ID_GROUP 1 в таблице members
Второго админа удалил через мускул.
Захожду в админку, и вижу такую картину...
Второй админ так и висит, меня в списке админов нету)
В админке 3 пункта всего
1. Центр администрирования
2. Поддержка и благодарности
3. Новости и рассылка
Больше ничо нет))
При попытке просмотреть профиль юзверя пишет
Вы не можете просматривать профили пользователей.
хоть под админом, хоть под юзером заходить.
При попытке зайти к себе в профиль, спрашивает.
Вы уверены, что хотите удалить свою учетную запись?

файлы все заменил на дефолтные, проблема остаёться, видно в мускуле с настройками поигрались.

Подскажите где чо исправить?

KapaBG

1. удаление мемберов из одной таблички заведомо глупый способ. после этово придется потом перепроверить всю базу на наличие ошибок и несоответствий. йа не знаю кто тебе надоумил так дурно поступить, бес обиды видимо тебе замылил глаз.
2. подозреваю шо тебе не видно из-за кэширование, во второй версии он ваще там юзается интенсивно.
3. ты не указал какой у тебе версие, шо за причина по которой тебе удалили и прочие. может ты ваще автор статьи в журнале хакер и береш нас на мушку типа

slash

Цитата: Княже от 05 апреля 2008, 12:36:02
1. удаление мемберов из одной таблички заведомо глупый способ. после этово придется потом перепроверить всю базу на наличие ошибок и несоответствий. йа не знаю кто тебе надоумил так дурно поступить, бес обиды видимо тебе замылил глаз.
2. подозреваю шо тебе не видно из-за кэширование, во второй версии он ваще там юзается интенсивно.
3. ты не указал какой у тебе версие, шо за причина по которой тебе удалили и прочие. может ты ваще автор статьи в журнале хакер и береш нас на мушку типа
1. Сделал я это неподумав, знаю что глупо.
3. версия 1.1.4, причина по которой с меня сняли админку, это надо спросить у того чела кто взломал форум)))

ЗЫ: если ты думаешь что я хочу взломать чейто форум, то зачем мне его ломать если у меня ftp есть)
Тем более я же не спрашиаю как ломать, а наоборот, устранить последствия

KapaBG

просмотри _membergroups, точно ли админы у тебе id_group = 1
_ban_groups, _permissions на предмет валидности своей группы и своево id_member
если все нормально, тогда видимо исходники покурочены уже.

slash

Цитата: Княже от 05 апреля 2008, 15:19:44
просмотри _membergroups, точно ли админы у тебе id_group = 1
_ban_groups, _permissions на предмет валидности своей группы и своево id_member
если все нормально, тогда видимо исходники покурочены уже.
проверил, всё нормально.
единственно незнаю поповоду таблицы permissions
Дамп
(-1, 'calendar_view', 1),
(-1, 'view_stats', 1),
(-1, 'profile_view_any', 1),
(0, 'smfgallery_comment', 1),
(0, 'smfgallery_delete', 1),
(0, 'smfgallery_edit', 1),
(0, 'smfgallery_add', 1),
(0, 'smfgallery_view', 1),
(0, 'pm_send', 1),
(0, 'pm_read', 1),
(0, 'calendar_view', 1),
(0, 'karma_edit', 1),
(0, 'search_posts', 1),
(0, 'who_view', 1),
(2, 'view_mlist', 1),
(2, 'view_stats', 1),
(2, 'smfgallery_autoapprove', 1),
(2, 'profile_view_own', 1),
(2, 'profile_view_any', 1),
(2, 'profile_identity_own', 1),
(2, 'profile_extra_own', 1),
(2, 'profile_remove_own', 1),
(2, 'profile_server_avatar', 1),
(2, 'profile_upload_avatar', 1),
(2, 'profile_remote_avatar', 1),
(2, 'calendar_edit_any', 1);

В исходниках ничего быть неможет, так как они были заменены оригинальными первым делом.

KapaBG

русский тоже залил по-новой?
скачай с офсайта тулз repair_settings.php - проверь корректность

slash

#88
Цитата: Княже от 05 апреля 2008, 18:02:25
русский тоже залил по-новой?
скачай с офсайта тулз repair_settings.php - проверь корректность
Русский кстати нет. Спс, скачаю, попробую, потом отпишу
#####################
Русский перезалил.
скачал repair_settings.php, выполнил его.
Результат тоже смаое...

Заметил ещё что нельзя постить сообщения и создавать темы. даже с админского ника))
Таблицу permissions заменил на ту что с форума установленного на локалке

Tair

А в профиле у тебя что - администратор написано или нет?

slash

Цитата: Rainheart от 06 апреля 2008, 23:11:04
А в профиле у тебя что - администратор написано или нет?
В профиле у меня только пункт удалить свой профиль.
Но в менюшке пункт Администрирование есть, и всеголишь первых 3 пункта.

KapaBG

а тема в которой ты такую хренотень получаешь? в смысле прямо в default?

slash

Цитата: Княже от 07 апреля 2008, 06:57:59
а тема в которой ты такую хренотень получаешь? в смысле прямо в default?
Да дефолт, абсолютно все файлы перезалиты на скрипты с офф. сайта.
я так думаю что чтото в настройках групп, там где им отдельные права выставлять, типа создавать темы, постить сообщения.
только я непонял в какой таблице они находяться, если в permissions, то её я заменил на стандартную...

Mavn

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

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

slash

Цитата: Mavn от 07 апреля 2008, 10:53:50
ID группы админов и ID твоей группы одинаков или нет?
Одинаков, равен еденичке

Mavn

Цитата: slash от 07 апреля 2008, 11:14:39
Одинаков, равен еденичке
Значит пойдем другим путем.

1. Создаешь на локалке форум заливаешь бд от своего форума.
2. Переименовываешь таблицу smf_permission например smf22_permission
3. Открываешь sql файл из инсталяционного пакета и создаешь таблицу с данными. Как результат получаешь таблицу с правами доступа которые идут по умолчанию.
4. Проверяешь работу и доступ к админке.
5. Минус всего этого дела состоит в том что придется перепровярять все права пользователей а так же выставлять заново если были какие то особые права доступа на разделы или на группы!
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

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

slash

Цитата: Mavn от 07 апреля 2008, 11:34:51
Значит пойдем другим путем.

1. Создаешь на локалке форум заливаешь бд от своего форума.
2. Переименовываешь таблицу smf_permission например smf22_permission
3. Открываешь sql файл из инсталяционного пакета и создаешь таблицу с данными. Как результат получаешь таблицу с правами доступа которые идут по умолчанию.
4. Проверяешь работу и доступ к админке.
5. Минус всего этого дела состоит в том что придется перепровярять все права пользователей а так же выставлять заново если были какие то особые права доступа на разделы или на группы!
Спасибо, попробую

KapaBG

slash, чото ты гонишь совсем пургу. не может быть такой глупой и смешной ситуевины, где-то ты накосячил либо дуриш мене. поэтому кидай в личку адрес своево форума, поржу вечерком

Adept

 Я до конца так и не понял по поводу убийства переменной $topic
ЦитироватьТо есть, вместо
} else
  $topic=0;

дописать
} else
  unset($topic);

Похоже это помогает, но где-нибудь вылезет потом проблема или все хорошо, и можно спокойно убивать переменную по данному примеру?

RXL

Большое спасибо уважаемому Mavn-у за оперативность!

От себя хочу сказать, что таких дыр в SMF очень много. В QueryString полно подобных ошибок. Часть кода, явно, написана методом copy-paste.

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