Изменение ролей пользователей 1С 8 (файловый вариант)

    Предположим, что нам необходимо восстановить доступ к файловой базе данных 1С Предприятие. Как правило в таких случаях проводят некоторые манипуляции с паролями (либо брутфорсят, либо сбрасывают). Мене захотелось немного усложнить задачу и пойти другим путем — назначить обычному пользователю права администратора.

    Для начала посоветую почитать о формате файла 1С. Сделать это можно здесь.

    Итак, нам потребуется шестнадцатеричный редактор. Я использовал HIEW. Запускаем редактор и открываем файл 1Cv8.1CD. Переходим по смещению 0х4000 — это корневой объект конфигурации. Первые 32 байта код языка базы. Затем количество блоков(4 байта), и собственно сами адреса блоков. Начинаем искать таблицу V8USERS. У меня она была в 7 блоке, то есть со смещением 0x8E000 (00 00 00 8E 000, читаем с права налево, в конце добавляем 000).



    Переходим по этому адресу и видим



    Перейдя по 0x91000 видим



    А уже по адресу 0x92000 находится описание таблицы. Просчитать длину полей можно как описывалось в статье которую я приводил выше, скажу только что длина записи равна 697 (0x2B9) байт, а смещение поле DATA — 678 (0x2A6) байт.
    Скрытый текст
    (так было на всех конфигурациях, которые я рассматривал, скорее всего так вообще в каждой конфигурации, так как V8USERS служебная таблица)

    В конце описания таблицы видим три числа. Первое — адрес данных, второе — адрес Blob-данных, третье — индексы.



    143 = 0x8F (адрес данных 0x8F000), 144 = 0x90 (адрес Blob-данных 0x90000).

    Идем в данные. Там нас отправят в 0x193000, затем в 0x194000 (кстати, там может быть не по одному блоку как у меня, а несколько. Зависит от количества пользователей).





    В вот мы в данных таблицы V8USERS. Первый блок длинной 697 байт пустой, дальше у меня шел пустой пользователь, затем пользователь Admin.
    Скрытый текст
    (в HIEW чтобы перейти к следующему пользователю F5, затем +2B9)




    Переместимся ещё на 0x2A6 байта. Это номер блока в Blob-данных.



    Далее идем в Blob-данные (0x90000). От туда переходим в 0x195000, затем в 0x196000.

    Нулевой блок Blob-данных пустой (размер блока 256 (0xFF) байт, первые 4 байта адрес следующего блока, если данные не влезли в один блок, затем 2 байта — размер блока, остальное сами данные). Нам нужен второй блок.
    Скрытый текст
    (0x196000 + 0x100 + 0x100)




    Копируем эти данные в файл (в HIEW клавиша F2) и переходим к следующему блоку.



    Данные из него копируем в тот же файл.
    Скрытый текст
    (для HIEW не забудьте указать смещение 0xFA).


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

    Получим два вот таких файла





    В принципе можно заменить роль пользователя User на роль Admin-а. В этом случае размер записи изменится не должен, но я просто добавил пользователю админскую роль.



    Дальше сохраняем в файл и с помощью редактора копируем данные в 1Cv8.1cd, в те же блоки из которых мы их взяли. Помните, что копируем мы кусочками по 250 (00-F9). Если, как в моем случае, размер данных изменился, не забываем изменить размер последнего блока. Возможно придется добавить ещё один блок, тогда нужно будет найти свободный блок и указать его номер.
    Если все прошло гладко (у меня с первого раза не получилось, так-что backup, backup и еще раз backup), можно заходить с учетной записью User, она теперь с полными правами.

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



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

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 13

      +3
      а не проще было хэш пароля от пользователя вставить за место хеша админа?
        0
        Проще. Но хотелось показать работу с ролями пользователей. В подобных ситуациях всегда нападают на пароль, хотелось чего-то альтернативного. Кстати, подобным образом можно сделать админа — неадмином.
        –2
        По моему аналогично ещё базы с 1C v8.0 вскрывались…
          +1
          А не проще просто сбросить пароли? center-comptech.ru/pass_hack_1c_8.html
            +2
            Прошу прощения не прочитал в конце, вот этот блок «И напоследок. Прошу не считать эту статью руководством по взлому. В интернете полно информации, как изменив 2 байта получить несанкционированный доступ к данным. Это и быстрее и проще. Я же показал принцип работы с таблицами базы на низком уровне, что может пригодится при восстановлении испорченной базы.». «Небольшая вводная: системный администратор уволился, пароль не оставил. Изменения в законодательстве, необходимо обновить 1С» думаю лучше убрать и добавить «Мне стало интересно и я решил попробовать изменить роль пользователя». Сейчас прочитав заголовок и вводную не совсем понятен почему именно этот способ выбран, и думаю мало кто дочитал до конца. И воспринимается информация как усложнение решение задачи. А по поводу статьи, довольно хорошо написано, но не подойдет когда в базе один пользователь и от него потеряли пароль.
              +1
              Спасибо за замечание, действительно начало статьи не очень сочетается с её основной мыслью. Поправил. А если пользователь один, то да. Замена ролей не поможет. Но можно заменить хэш. Все делается аналогично.
            0
            Интересно бы протестить алгоритм на самописной конфигурации. У меня в одной конфе пользователь Гуру, а Полные права называются Нирвана, в дереве метаданных идут не по порядку, в списке пользователей тоже. Если, например, порядок ролей и пользователей в базе неизвестен, алгоритм же не сработает или я чего-то не понимаю?
              0
              То есть, вопрос такой «Как в НЕХ-редакторе определить самые полные права?».
                0
                Глубоко данный вопрос не изучал, так что так с лету не скажу как узнать какие полномочия у какой роли. В моем варианте придется составить список ролей пользователей, сопоставить их и посмотреть, каких ролей не хватает ограниченному пользователю. После можно ему их добавить. В принципе, если интересно, могу продолжить исследование в данном направлении, результатом которого может стать ещё одна публикация. Если тема интересна — пишите.
                  0
                  Может просто добавить пользователю все типы ролей?
                  Хотя конечно в случае с самописками, там это может только навредить!)
                    0
                    Можно и все роли добавить. По поводу навредить — такие манипуляции предполагают высокую степень риска. Велик шанс записать данные не с тем смещением и много другое. Думаю риск, что при установки всех ролей, что-то пойдет не так, минимален.
                      0
                      Думаю риск, что при установки всех ролей, что-то пойдет не так, минимален

                      Если роль создана под внешнее подключение каким-то скриптом, то её добавление приведет к невозможности зайти в систему интерактивно. И не только в самописках, в доработанных типовых такие тоже встречаются — проверка при входе на наличие определенного типа ролей и «давай, до свиданья».
              –1
              Блин, все уже украдено до вас.
              infostart.ru/public/237192/
              infostart.ru/public/187832/
              infostart.ru/public/19734/

              Only users with full accounts can post comments. Log in, please.