Тема: Runsmc 1.3а
Показать сообщение отдельно

Runcms
  #10  
Старый 02.05.2007, 18:53
Forcer
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
С нами: 10042776

Репутация: 275
По умолчанию Runcms

Прочитал посты. Узнал, что один мой друг показывал эту статью разработчикам RunCMS, на что те ответили, что это все бред и пароли шифруются не так. Решил разобраться сам и узнать "в чем тут соль" =).

Версия : Runcms1.5.1 build 20070306.

Как говорилось в предыдущих постах, в данном движке пароли хранятся в несколько необычном виде. При регистрации в таблицу runcms_users заносятся данные о пользователе, в том числе и хэш пароля, который хранитя в поле pass. Алгоритм шифрования - простой md5. В этой таблице также присутствует поле pwdsalt с некоторым значением из четырех символов, которое, судя по всему, является солью, с помощью которой шифруется пароль. Но это не так, движок RunCMS НЕ ИСПОЛЬЗУЕТ для шифрования паролей соль. В этом мы сейчас убедимся. Далее, при первом заходе пользователя, содержимое поля pass и pwdsalt меняется. В поле pass пароль теперь шифруется алгоритмом sha1($username.$password). Соль по-прежнему не используется. При последующих аутентификациях данного пользователя пароль остается неизменным. Почему мы можем быть уверены в правильности определения алгоритмов и уверенности в том, что соль не используется? Можно залезть в код, а можно сделать по-другому. Создадим непосредственно через MySQL нового пользователя. Пускай имя у него будет test, пароль qwerty, хэш которого имеет вид: d8578edf8458ce06fbc5bb76a58c5ca4 . Запрос к базе данных будет следующим :

Код:
INSERT INTO runcms_users SET uname='test', pass='d8578edf8458ce06fbc5bb76a58c5ca4';
Можно было указать rank( "уровень" пользователя, определяющие его права, у админа rank 7, дефолтно присваивается ранг 0, т.е. права только на просмотр ) и соль pwdsalt с любым значением, не превышающим длину в четыре символа.

Логинимся и что мы видим? А видим мы следующее: "Thank you for logging in, test". Мы зарегистрировали обычного пользователя с нулевыми правами. Посмотрим поля uname,pass,pwdsalt в таблице runcms_users. Мы видим что изменилось значение поле pass и pwdsalt. Смотрим в PasswordsPro и видим что это алгоритм sha1($username.$password). Можно убедиться, что никаких подводных камней типа взятия этого значения и соединения с солью с целью получения чего-то большего и сохранения в другой таблице нет, при осуществлении следующих действий. Создадим нового пользователя указанным выше способом, только в поле pass запишем хэш, сформированный алгоритмом sha1($username.$password) . Пускай это будет пользователь 'pilot', пароль у него будет 'zxcvbn', соль - 'tyui', хотя поле pwdsalt можно оставить пустым. Вот соответствующий запрос к базе данных :

Код:
INSERT INTO runcms_users SET uname='pilot', pass='faa840a3851ce61124de53a74102accca3c9cc63', pwdsalt='tyui';
Логинимся и снова видим приветливую надпись "Thank you for logging in, pilot". Таким образом, мы убедились, что соль при шифровании паролей не используется и хэш пароля зашифрован при помощи алгоритма sha1($username.$password), который может быть расшифрован при помощи PasswordsPro.

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


Некоторая информация по движку Runcms, возможно, кому-нибудь понадобится :

--------------------------------------------------------------

Таблица пользователей: runcms_users

поля в таблице runcms_users( не все, но, как мне кажется, самые значимые ) :

uid | id пользователя
uname | имя пользователя
email | мыло
pass | хэш пароля
pwdsalt | соль
rank | ранг пользователя(значения 0-7), обычно у админа ранг 7,
user_icq | uin пользователя

--------------------------------------------------------------

Примечания:

-В двиге есть некоторая система безопасности, она реагирует на неразрешенные символы в запросе. При срабатывании этой системы, запрос и ваш ip записываются в файл с именем "/cache/abuse-".$ab_time.".log" . При sql-inj cистема срабатывает на функцию concat и символы начала комментарий "/*" и "--", но тем не менее sql-inj может быть проведена и без этих символов.
-Как правило, данные выводятся по одному, поэтому приходится использовать limit чтобы узнать все содержимое таблицы.

Спасибо за внимание )
 
Ответить с цитированием