Зміна ролей користувачів 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), можна заходити з обліковим записом Користувача, вона тепер з повними правами.

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



І наостанок. Прошу не вважати цю статтю керівництвом по злому. В інтернеті повно інформації, змінивши 2 байта отримати несанкціонований доступ до даних. Це і швидше і простіше. Я ж показав принцип роботи з таблицями бази на низькому рівні, що може стане в нагоді при відновленні зіпсованої бази.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.