Как взломать базу 1с

Обновлено: 05.07.2024

MySQL — одна из самых распространенных СУБД. Ее можно встретить повсюду, но наиболее часто она используется многочисленными сайтами. Именно поэтому безопасность базы данных — очень важный вопрос, ибо если злоумышленник получил доступ к базе, то есть большая вероятность, что он скомпрометирует не только ресурс, но и всю локальную сеть. Поэтому я решил собрать всю полезную инфу по взлому и постэксплуатации MySQL, все трюки и приемы, которые используются при проведении пентестов, чтобы ты смог проверить свою СУБД. 0day-техник тут не будет: кто-то еще раз повторит теорию, а кто-то почерпнет что-то новое. Итак, поехали!

Вместо предисловия

Начнем с определения. MySQL — это реляционная система управления базами данных, которая обладает разными движками хранения данных: MyISAM, InnoDB, Archive и другими. Как и у большинства open source проектов, у нее существуют свои ответвления, например MariaDB. Забегая вперед, скажу, что большинство рассмотренных векторов/техник/багов распространяется на различные движки и на ответвления, правда не всегда.

Различные версии MySQL под разные платформы можно взять тут

Поиск жертв

Но перейдем непосредственно к делу. Для того чтобы кого-нибудь поломать, нужно его для начала найти. Допустим, что мы уже знаем, кто наша жертва, знаем его IP либо находимся в его локальной сети. Нам нужно просканировать его адрес (сеть) на наличие открытых портов. По стандарту MySQL использует порт 3306, его мы и будем искать. В арсенале каждого хакера должен присутствовать сканер Nmap, который позволяет находить различные сервисы, порты на целевых машинах. Пример команды для сканирования выглядит следующим образом:

  • -PN — очень полезная вещь, указывающая программе пропускать этап обнаружения хоста и сразу переходить к сканированию портов. Это нужно в том случае, если машина не отвечает на ping-сканирование, но при этом у машины могут быть открыты порты. В таком случае без данного флага Nmap пропустит данный хост;
  • -sV исследует открытые порты с целью получения информации о службе.

Для UDP-сканирования должен присутствовать флаг -sU.

SHODAN

Рис. 1. Результаты поиска MySQL в Shodan

Рис. 1. Результаты поиска MySQL в Shodan

GitHub

Одна из крутейших фишек легкого доступа к базам данных — поиск исходников каких-либо проектов на GitHub. Прежде чем искать и раскручивать SQL Inj на сайте, что может занять достаточно длительное время (если таковые вообще присутствуют), достаточно просто зайти на всеми любимый сайт для совместной разработки, вписать пару слов и при должном везении получить доступ к сорцам. Многие разработчики в силу непонятных причин заливают свои проекты в общий доступ — может, по глупости, может, им жалко денег на приватный репозиторий, а может, они хотят поделиться со всем миром своим великолепным кодом, но на GitHub лежит огромная куча исходников, от маленьких сайтиков до больших проектов. Это зачастую сильно упрощает работу. Допустим, если мы введем такой поисковый запрос username mysql password database , то можно просто потерять сознание от количества результатов. Особенно много сладких PHP-файлов, в которых прописывается коннект к базе данных.

Рис. 2. Наглядные результаты по поиску кредов MySQL на GitHub

Рис. 2. Наглядные результаты по поиску кредов MySQL на GitHub

Поэтому первым делом на пентестах мы бежим и проверяем GitHub на наличие исходников клиента. Если что-то находится, то можно смело коннектиться к базе данных, после чего, отталкиваясь от прав, извлекать нужные нам данные. Но если уж получилось так, что мы не смогли найти заветных строчек username/password, не стоит отчаиваться — можно порыться в исходниках сайтов, если они присутствуют, и проводить аудит уже не вслепую, а с исходным кодом сервиса. Он значительно облегчает задачу поиска уязвимостей: теперь мы будем не просто фазить наобум, а проверять определенные векторы, выстроенные на основе исходников. Например, смотреть, в каких местах производится обращение в базу, используется ли фильтрация данных от клиента и так далее.

Инструментарий

Для поиска инъекций существуют разные способы: автоматически или вручную вставлять везде кавычку (фаззинг); использовать фишку с Гитхабом, уповая на неосторожность разработчиков исследуемого сервиса. И наконец настал момент истины: мы нашли нашу долгожданную инъекцию и готовы внедряться по полной. Но вот беда, у нас появились неотложные дела (друзья зовут попить пива), или нас одолела ужасная необоримая лень. Не стоит расстраиваться, на помощь придет отличная тулза sqlmap, которая автоматизирует процесс поиска и эксплуатации SQL-инъекций, и не просто найдет дыру в безопасности, а проэксплуатирует ее по полной программе. Поддерживает все виды инъекций. Функционал sqlmap позволяет: дампить базы, автоматически искать в базе, извлекать и расшифровывать логины и пароли, запускать cmd shell, запускать интерактивный sql shell, в котором тебе нужно только писать SQL-запросы в базу, а sqlmap сам составит payload для инъекции. Существует отличный Cheet Sheet, который в двух страничках показывает все возможности данной тулзы.

Есть еще несколько инструментов, которые пригодятся тебе в нелегком деле покорения MySQL. В особенном представлении они не нуждаются, так как наверняка ты о них уже не раз (не одну тысячу раз) слышал. Первый — Metasploit, одна из ключевых программ для хакинга, позволяющая создавать эксплойты, проводить их отладку. Второй — сканер Nmap, про который в журнале тоже не раз писали.

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

Сбор информации

Нужно начать с самого простого — сбора информации. В Metasploit для этого служит auxiliary/scanner/mysql/mysql_version , просто сканер версий, который может сканировать целый пул адресов:

В Nmap также существует модуль, который подключается к серверу и выводит разную полезную информацию: протокол, номер версии, состояние и соль.

Брутфорс

Среди основных вещей, которые приходится часто выполнять, конечно, брутфорс — проверка на слабые или стандартные пароли пользователей. Но прежде чем приступать к подбору паролей, можно провести атаку user enumeration (перечисление пользователей). Ее можно провести против серверов версии 5.x, которые поддерживают старые механизмы аутентификации (CVE-2012-5615). После сканирования мы будем знать, какие пользователи существуют в базе, что значительно сокращает пул пользователей для бруторса.

Составив наш пул имен и паролей, приступаем к бруту:

Nmap использует стандартные списки паролей и пользователей, но всегда можно взять свои:

Кстати говоря, вот тебе отличный репозиторий, где можно найти самые популярные логины, пароли и не только. Ну и обычно при брутфорсе выполняется еще одна простая, но довольно важная проверка на пустой пароль для пользователя root или anonymous:

Постэксплуатация

Следующий важный шаг, который наступает после получения логина/пароля (через инъекцию или полным перебором), — это постэксплуатация. Я перечислю различные модули для Nmap’а и их предназначение. Итак, модуль, который производит вывод баз данных:

Модуль, который производит вывод пользователей:

Модуль, который производит вывод переменных:

Модуль, который производит вывод пользователей и их хешей в виде, удобном для брутфорса:

Модуль, который заменяет клиент MySQL и отправляет запросы в удаленную базу:

Сканирование на CVE-2012-2122

Отдельно стоит упомянуть про один интересный модуль, который присутствует как в Metasploit, так и в Nmap, — модуль проверки на CVE-2012-2122. Данная уязвимость позволяет удаленным пользователям обходить аутентификацию из-за ненадлежащей проверки возвращаемых значений. Существует возможность авторизации с неправильным паролем с вероятностью 1/256, так как MySQL считает, что пришедший токен от пользователя и ожидаемое значение равны. Используя известное имя пользователя (например, root, который присутствует практически всегда) с любым паролем, можно подключиться к базе, повторяя подключение порядка 300 раз. После чего можно сдампить все пароли пользователей, сбрутфорсить их и коннектиться уже с легитимным паролем. Но не все так хорошо, как кажется, — данной уязвимости подвержены только сборки, где функция memcmp() возвращает значения за пределами диапазона от –128 до 127, то есть это достаточно ограниченное число систем:

  • Ubuntu Linux 64-bit (10.04, 10.10, 11.04, 11.10, 12.04);
  • OpenSuSE 12.1 64-bit MySQL 5.5.23-log;
  • Debian Unstable 64-bit 5.5.23-2;
  • Fedora;
  • Arch Linux.

Но если есть даже самая незначительная возможность попасть в базу, то стоит попробовать:

Для Nmap при сканировании нужно использовать скрипт mysql-vuln-cve2012-2122 :

Бородатый UDF

В далекие-далекие времена, когда еще во вселенной MySQL не было введено триггеров и хранимых процедур, существовала поддержка User-Defined Function (определенные пользователем функции). Но в современном мире данная фишка тоже имеет место быть и поддерживается до сих пор в качестве внешних хранимых функций. Данные функции не просто комбинируют разные SQL-операторы в какой-то определенный запрос, а еще и сильно расширяют функциональность самой базы. Так как, в отличие от Oracle Database, в MySQL не существует наикрутейшей Java-машины, с помощью которой можно крушить все и вся в базе, одним из немногочисленных способов выполнять команды на сервере через базу остается UDF. Во времена 4-й версии MySQL это был эксплойт Raptor, но он имел ряд ограничений, в том числе несовместимость с MySQL 5.0 и выше.
В данный момент существует легальная библиотека, которую можно скачать с легального сайта. Она содержит в себе четыре функции:

  1. sys_eval(arg1) — выполняет произвольную команду и возвращает вывод внешней команды.
  2. sys_exec(arg1) — выполняет произвольную команду и возвращает код возврата.
  3. sys_get(arg1) — позволяет получить переменную окружения или NULL, если таковой нет.
  4. sys_set(arg1, arg2) — позволяет задать переменную окружения (параметры: имя переменной, значение), возвращает 0 в случае успеха.

Библиотека устанавливается в один из путей /usr/lib/mysql , /usr/lib/mysql/plugin/ или другие в зависимости от системы. После чего приходит время исполнять команды в базе. Но сначала надо создать функцию:

А затем можно уже и выполнять с ее помощью различные команды:

Чтобы создавать и удалять функции, необходимо обладать привилегиями INSERT и DELETE . Поэтому проэксплуатировать данную багу можно, только если у пользователя, к которому у тебя есть доступ, выставлена привилегия FILE , позволяющая читать и записывать файлы на сервер с помощью операторов LOAD DATA INFILE и SELECT . INTO OUTFILE . Данный вариант всегда стоит проверить, ведь нерадивые админы еще существуют. Зачастую очень многие работают с базой от имени root’а, поэтому даже инъекции может хватить, чтобы заполучить полный контроль над машиной. Просмотреть привилегии можно в таблице user , db , host , tables_priv и columns_priv в базе mysql . set mysql; — для смены базы, select * from user; — для вывода таблицы.
Второе условие — функция lib_mysqludf_sys уже установлена в MySQL. Дальше все просто — создаешь функцию, исполняешь команды.
Еще один вариант — это собственноручная установка в качестве бэкдора в системе. Если тебе нужен удаленный, скрытый доступ к системе, то вариант прокачки базы с помощью легитимной, собственноручной установки lib_mysqludf_sys выглядит хорошим способом.

Техника эта не нова, и поэтому все до нас уже сделано и автоматизировано, так что не придется самому устанавливать функцию, если под рукой есть Metasploit:

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

Сценарий использования UDF

Один из возможных сценариев заливки шелла / повышения привилегий может выглядеть таким образом. Для начала нужно получить доступ к самой базе (пользователю root либо другому, обладающему привилегией FILE ) через инъекцию, брутфорс или иначе. После чего нам нужно получить копию библиотеки UDF на атакуемой машине, учитывая операционную систему и ее битность. Можно воспользоваться вариантами, входящими в состав sqlmap, которые можно взять тут. Кстати, в данном репозитории присутствуют библиотеки и для Windows. Закинуть копию библиотеки на сервер можно по-разному:

  • используя функционал сайта по загрузке картинок, файлов и прочего;
  • через открытый или взломанный FTP-сервер.

Следующим шагом является выполнение SQL-запросов для того, чтобы загрузить наш шелл в таблицу, после чего извлечь его в нужную нам папку ( /usr/lib для Linux, c:\windows\system32 для Windows). Далее мы создаем новую функцию в MySQL, теперь у нас есть рабочий шелл и возможность RCE на сервере.

Пример для Windows с созданием пользователя:

Как вариант, можно подключить RDP:

Заключение

Точек вхождения в чужую базу MySQL не так уж и много по сравнению с другими СУБД: SQL Injection, поиск логинов и паролей на GitHub, брутфорс, уязвимость к багам из паблика. К методам постэксплуатации можно еще дополнительно отнести повышение привилегий, DoS-атаки, применение триггеров и хранимых процедур. Правда, отдельные из них относятся к частным случаям, которые нечасто можно встретить либо для которых нужны очень специфичные условия.

Я же хотел показать тебе, как можно быстро и без особых усилий проверить нужную базу. Как видишь, в данный момент все стало автоматизированным, что позволяет проводить проверку в фоне, занимаясь своими делами. На этом все. И помни, что большая сила накладывает большую ответственность :).

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

Создатели системы 1С: Предприятие 8 позаботились о защите кода. К сожалению, пароль на доступ можно установить только на модули объектов, общие модули, модули обработок и отчетов. В том числе и внешних. Но и этого немало, так как можно значимые процедуры и функции разместить в модуле и потом к ним обращаться.

В данной статье я хочу разобраться, как установить защиту и снять её, если Вы забыли пароль.

Установка защиты на модуль 1C

установка пароля на модуль

Программа меня тут же предупредила о том, что нельзя защитить модуль, имеющий директивы препроцессора:

вопрос

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Что же, посмотрим, во что это выльется. Устанавливаем пароль.


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

Вывод однозначный: не все модули можно защитить. Однако ничего Вам не мешает вынести функции и процедуры с директивами препроцессора в отдельный модуль.

Осталось проверить обработки. Возьмем для интереса внешнюю. Защита прошла без проблем.

Проверка надежности защиты с помощью декомилятора модулей 1С


выполнение обработки

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

На форумах пишут, что иногда нужно запускать 1С от имени администратора, если выходит ошибка.

Теперь осталось проверить, как декомпилятор справится с общими модулями. Сохраняем конфигурацию в файл.

Выбираем в обработке:

выбор конфигурации для декомпилирования


Загружаем конфигурацию из файла и проверяем защиту. Защита полностью снята.

Данный материал предоставлен только в ознакомительных целях с целью обзора механизма защиты платформы 1С. Запрещено использовать данный материал для получения доступа к защищенным авторским правом разработкам.

Tool_1CD умеет читать и редактировать файлы 1CD, т. е. файлы информационных баз.

Как открыть базу 8.3 для редактирования

В последних версиях Tool_1CD нет возможности редактировать базу версии 8.3, поэтому делаем финт ушами.

  1. Выгружаем базу в файл .dt
  2. Создаем пустую базу через платформу 8.2, запуская файл 1cv8.exe из каталога c:\Program Files (x86)\1cv82\ \bin\
  3. Затем в окне запуска баз платформы 8.3 сразу же меняем версию базы на 8.3 через кнопку «Изменить. »
  4. Загружаем нашу пустую базу через конфигуратор на платформе 8.3 и загружаем в неё файл .dt
  5. Теперь база спокойно открывается в версии 0.3.0_alpha и редактируется.

Сброс пароля на версии 8.2

Загружаем утилиту Tool_1CD с возможностью редактирования базы: Tool_1CD_0.3.0_alpha. Последнюю версию всегда можно скачать с репозитория, но там нет возможности редактирования.

Делаем резервную копию своей базы.

Запускаем программу Tool_1CD и в меню «Файл» выбираем «Открыть базу»

В левой части окна Tool_1CD будут перечислены доступные таблицы ИБ, нас интересует таблица V8USERS.

Кликаем по этой таблице и переходим в правой части на вкладку «Физическое представление».

Ищем учетку администратора, скорее всего она будет называться «Администратор» и кликаем в нужной строчке на колонку «DATA».

В это колонке хранится хэш пароля, который можно сбрутить, но мы поступим проще — запишем вместо старого новый хэш, соответствющий пустой строке: 2jmj7l5rSw0yVb/vlWAYkK/YBwk=

Нажмем на кнопку «Записать BLOB/MEMO в файл» (кнопка с изображением дискеты) и сохраним данные.


Откроем файл текстовым редактором и заменим в двух местах хэш старого пароля на хэш пустой строки 2jmj7l5rSw0yVb/vlWAYkK/YBwk=


Вернемся к Tool_1CD, выделим нашу учетную запись, и нажмём кнопку «Редактировать таблицу».


Затем выделим колонку «DATA» и нажмем «Заменить BLOB/MEMO»


В появившемся окне выбираем отредактированный нами файлик и жмем кнопку «Ок». Значение колонки «Data» обновится и нам остается только нажать кнопку «Сохранить изменения» (с зеленой галочкой).

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

Зачем нам пароль в конфигуратор 1С

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

Взлом пароля 1С

Платформа 8.2.14 конфигурация УТ 10.3, файловый режим работы 1С.
Первым наперво делаем резервную копию БД, в нашем случае копируем каталог с расположением базы. А второе это скачать HEX — редактор, Я взял Win­Hex из-за поддержки больших файлов.

1) В Win­Hex открываем файл 1Cv8.1CD и ищем список пользователей, а именно таблицу v8users и меняем ей название на H8users.

v8users

users.usr

3) Сохраняем сделанные изменения

Взлом_пароля_1С

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

файл_не_обнаружен_users.usr

5) Произведем тестирование и исправление файловой базы данных, для этого используем утилиту chdbfl.exe, которая находится в папке с платформой 1С.

Проверка_физической_целостности_файловой_БД

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

Вот и все. Конечно, каждому пользователю надо будет еще установить настройки пользователя и вообще дело хлопотное нет так пароль снять как потом все настроить, но данная ситуация встречается довольно таки редко.

Читайте также: