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

💖 Нравится? Поделись с друзьями ссылкой

Универсальное программное обеспечение, разработанное специально для салонов оптики, офтальмологических клиник, кабинетов КК, врачей офтальмологов.
Качественно новый уровень работы салонов оптики и врачей-офтальмологов.

Компьютерная программа «АРМО плюс»

(Медицинский учет и торговля)

  • Единая картотека клиентов на всех рабочих местах и филиалах.
  • Гибкая система скидок, работа с дисконтными карточками.
  • Ведение и учет оптово-розничных продаж, услуг по изготовлению и ремонту очков, медицинских услуг.
  • Оперативный ввод и поиск информации по наименованию, с помощью кодов, через сканер штрих-кода.
  • Оптимизация заявок на поставку товара посредством шаблонов. Минимизация товарных запасов.
  • Автоматизированный ввод данных медицинских обследований и формирование врачебных выписок.
  • Выписка рецептов и автоматизация формирования заказов на очки. Учет услуг врача и мастера.
  • Адресная доставка оперативной информации с помощью рассылки SMS - сообщений для приглашения клиентов на консультативный прием, плановую замену линз; информирования об акциях фирмы.
  • Суммарные и детальные отчеты по движениям денежных средств и товаров, потокам клиентов, работе персонала, финансовым результатам.
  • Возможность выгрузки данных с последующим использованием в 1С:Бухгалтерии, интернет магазине, других программах.
  • Контроль за индивидуальной активностью сотрудников (продажи, направления на обследования, предоставление скидок клиентам и т.д.).
  • Настройка доступа пользователей к функциям программы.
  • Автоматизированный обмен данными между удаленными друг от друга рабочими местами (филиалами).
  • Высокая степень защиты от несанкционированного доступа и копирования информации. Автоматическое архивирование базы данных.

«АРМО плюс» - система, использующая технологии распределенной базы данных

Предназначена для автоматизации:

Ведения оптово-розничных продаж;

Заявок на поставку товара, контроля движения товаров и остатков товаров на рабочих местах;

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

Формирования и вывода на печать данных медицинских обследований;

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

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

Справочники и Документы

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

Возможность одновременного выполнения различных операций

Картотека клиентов

Особая роль в «АРМО плюс» отведена ведению электронной картотеки клиентов . Унифицированная картотека клиентов содержит информацию о первичных данных, анамнезе, диагнозе, визитах, дневнике осмотров и офтальмологических обследований, выписке рецептов, заказов на очки, данные о покупках, заявках и авансах клиента. Программа формирует отчеты о продажах, заказах и заявках клиентов, выписки офтальмологических обследований. Для клиентов настраивается гибкая схема скидок. Работает система оповещений через СМС рассылку и e-mail сообщения.


Основные отчеты в “АРМО плюс”

  • суммарные и детальные отчеты по приходу, расходу, остаткам, оборотам
  • отчёты по выручке
  • авансовые отчёты по документам и картотеке
  • отчёты по контролю расходных цен
  • отчёты по заявкам и заказам на очки
  • отчёты по срокам хранения
  • отчеты по документам
  • отчёты по клиентам, ожидаемым визитам, источникам клиентов
  • отчеты по скидкам клиентов
  • суммарные и детальные отчёты по персоналу

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

Распределенная база данных и обмен данными

Технология распределенной базы данных позволяет вести работу территориально удаленных оптик, офтальмологических кабинетов, филиалов. Информация передается друг другу через электронные пакеты обмена. За счет этого достигается синхронность данных на удаленных рабочих местах. Так формируется единая картотека пациентов и база справочной и документальной информации Фирмы, работающие с «АРМО плюс» могут обмениваться между собой данными в электронном виде.


Сервис при администрировании базы

Надежность работы обеспечивается средствами по сохранению базы данных Сохраненные данные всегда можно восстановить. Для сжатия базы предусмотрена выгрузка и очистка данных. «АРМО плюс» может выгружать данными в программу«1С:Предприятие», Excel, интернет магазин.

Сегoдня мы рассмотрим эксплуатацию критической 1day-уязвимости в популярной CMS Joomla, которая прогремела на просторах интернета в конце октября. Речь пойдет об уязвимостях с номерами CVE-2016-8869 , CVE-2016-8870 и CVE-2016-9081 . Все три происходят из одного кусочка кода, который пять долгих лет томился в недрах фреймворка в ожидании своего часа, чтобы затем вырваться на свободу и принести с собой хаос, взломанные сайты и слезы ни в чем не повинных пользователей этой Joomla. Лишь самые доблестные и смелые разработчики, чьи глаза красны от света мониторов, а клавиатуры завалены хлебными крошками, смогли бросить вызов разбушевавшейся нечисти и возложить ее голову на алтарь фиксов.

WARNING

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

С чего все началось

6 октября 2016 года Дэмис Пальма (Demis Palma) создал топик на Stack Exchange , в котором поинтересовался: а почему, собственно, в Joomla версии 3.6 существуют два метода регистрации пользователей с одинаковым названием register() ? Первый находится в контроллере UsersControllerRegistration , а второй - в UsersControllerUser . Дэмис хотел узнать, используется ли где-то метод UsersControllerUser::register() , или это лишь эволюционный анахронизм, оставшийся от старой логики. Его беспокоил тот факт, что, даже если этот метод не используется никаким представлением, он может быть вызван при помощи сформированного запроса. На что получил ответ от девелопера под ником itoctopus, подтвердившего: проблема действительно существует. И направил отчет разработчикам Joomla.

Далее события развивались самым стремительным образом. 18 октября разработчики Joomla принимают репорт Дэмиса, который к тому времени набросал PoC, позволяющий регистрировать пользователя. Он опубликовал заметку на своем сайте , где в общих чертах рассказал о найденной проблеме и мыслях по этому поводу. В этот же день выходит новая версия Joomla 3.6.3, которая все еще содержит уязвимый код.

После этого Давиде Тампеллини (Davide Tampellini) раскручивает баг до состояния регистрации не простого пользователя, а администратора. И уже 21 октября команде безопасности Joomla прилетает новый кейс. В нем речь уже идет о повышении привилегий . В этот же день на сайте Joomla появляется анонс о том, что во вторник, 25 октября, будет выпущена очередная версия с порядковым номером 3.6.3, которая исправляет критическую уязвимость в ядре системы.

25 октября Joomla Security Strike Team находит последнюю проблему, которую создает обнаруженный Дэмисом кусок кода. Затем в главную ветку официального репозитория Joomla пушится коммит от 21 октября с неприметным названием Prepare 3.6.4 Stable Release , который фиксит злосчастный баг.

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

27 октября исследователь Гарри Робертс (Harry Roberts) выкладывает в репозиторий Xiphos Research готовый эксплоит , который может загружать PHP-файл на сервер с уязвимой CMS.

Детали

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

Благодаря находке Дэмиса Пальмы мы знаем, что есть два метода, которые выполняют регистрацию пользователя в системе. Первый используется CMS и находится в файле /components/com_users/controllers/registration.php:108 . Второй (тот, что нам и нужно будет вызвать), обитает в /components/com_users/controllers/user.php:293 . Посмотрим на него поближе.

286: /** 287: * Method to register a user. 288: * 289: * @return boolean 290: * 291: * @since 1.6 292: */ 293: public function register() 294: { 295: JSession::checkToken("post") or jexit(JText::_("JINVALID_TOKEN")); ... 300: // Get the form data. 301: $data = $this->input->post->get("user", array(), "array"); ... 315: $return = $model->validate($form, $data); 316: 317: // Check for errors. 318: if ($return === false) 319: { ... 345: // Finish the registration. 346: $return = $model->register($data);

Здесь я оставил только интересные строки. Полную версию уязвимого метода можно посмотреть в репозитории Joomla.

Разберемся, что происходит при обычной регистрации пользователя: какие данные отправляются и как они обрабатываются. Если регистрация пользователей включена в настройках, то форму можно найти по адресу http://joomla.local/index.php/component/users/?view=registration .


Легитимный запрос на регистрацию пользователя выглядит как на следующем скриншоте.


За работу с пользователями отвечает компонент com_users . Обрати внимание на параметр task в запросе. Он имеет формат $controller.$method . Посмотрим на структуру файлов.

Имена скриптов в папке controllers соответствуют названиям вызываемых контроллеров. Так как в нашем запросе сейчас $controller = "registration" , то вызовется файл registration.php и его метод register() .

Внимание, вопрос: как передать обработку регистрации в уязвимое место в коде? Ты наверняка уже догадался. Имена уязвимого и настоящего методов совпадают (register), поэтому нам достаточно поменять название вызываемого контроллера. А где у нас находится уязвимый контроллер? Правильно, в файле user.php . Получается $controller = "user" . Собираем все вместе и получаем task = user.register . Теперь запрос на регистрацию обрабатывается нужным нам методом.


Второе, что нам нужно сделать, - это отправить данные в правильном формате. Тут все просто. Легитимный register() ждет от нас массив под названием jform , в котором мы передаем данные для регистрации - имя, логин, пароль, почту (см. скриншот с запросом).

  • /components/com_users/controllers/registration.php: 124: // Get the user data. 125: $requestData = $this->input->post->get("jform", array(), "array");

Наш подопечный получает эти данные из массива с именем user .

  • /components/com_users/controllers/user.php: 301: // Get the form data. 302: $data = $this->input->post->get("user", array(), "array");

Поэтому меняем в запросе имена всех параметров с jfrom на user .

Третий наш шаг - это нахождение валидного токена CSRF, так как без него никакой регистрации не будет.

  • /components/com_users/controllers/user.php: 296: JSession::checkToken("post") or jexit(JText::_("JINVALID_TOKEN"));

Он выглядит как хеш MD5, а взять его можно, например, из формы авторизации на сайте /index.php/component/users/?view=login .


Теперь можно создавать пользователей через нужный метод. Если все получилось, то поздравляю - ты только что проэксплуатировал уязвимость CVE-2016-8870 «отсутствующая проверка разрешений на регистрацию новых пользователей».

Вот как она выглядит в «рабочем» методе register() из контроллера UsersControllerRegistration:

  • /components/com_users/controllers/registration.php: 113: // If registration is disabled - Redirect to login page. 114: if (JComponentHelper::getParams("com_users")->get("allowUserRegistration") == 0) 115: { 116: $this->setRedirect(JRoute::_("index.php?option=com_users&view=login", false)); 117: 118: return false; 119: }

А так в уязвимом:

  • /components/com_users/controllers/user.php:

Ага, никак.

Чтобы понять вторую, гораздо более серьезную проблему, отправим сформированный нами запрос и проследим, как он выполняется на различных участках кода. Вот кусок, который отвечает за проверку отправленных пользователем данных в рабочем методе:

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!

In Joomla, after successful registration, users by default are redirected to a login page (if account doesn"t need to be activated). From there (after logging in) users are redirected to a user profile page. This happens even if you have Login Redirection set to something else in Login Form Module .

To change this behaviour you can redirect users after registration to any other page on your website.
To do this you need to edit a core Joomla file. Be aware that your changes may be overwritten by a Joomla update. Always document changes you make to core Joomla files so you can quickly re-do them if required.

Open file:
components/com_users/controllers/registration.php

Scroll down to the very bottom. Starting line 162 or so you will have flowing code:

if ($return === "adminactivate" ) { $this -> setMessage (JText:: _() ) ; $this -> setRedirect (JRoute:: _(, false ) ) ; } else if ($return === "useractivate" ) { $this -> setMessage (JText:: _() ) ; $this -> setRedirect (JRoute:: _("index.php?option=com_users&view=registration&layout=complete" , false ) ) ; } else { $this -> setMessage (JText:: _() ) ; $this -> setRedirect (JRoute:: _("index.php?option=com_users&view=login" , false ) ) ; }

In this section you have 3 links starting index.php?

  • First one () is executed after user registration if account has to be activated by an administrator
  • Second (index.php?option=com_users&view=registration&layout=complete ), if account has to be activated by user
  • Third (index.php?option=com_users&view=login ), if account activation is not required.

Replace links depending on type of registration you use with FULL URL of your redirection page and you are done.
For example, if user activation on my website is not required and I want to redirect users after registration to http://www.mywebsite.com/welcome-reg the updated code will be:

// Redirect to the profile screen. if ($return === "adminactivate" ) { $this -> setMessage (JText:: _("COM_USERS_REGISTRATION_COMPLETE_VERIFY" ) ) ; $this -> setRedirect (JRoute:: _("index.php?option=com_users&view=registration&layout=complete" , false ) ) ; } else if ($return === "useractivate" ) { $this -> setMessage (JText:: _("COM_USERS_REGISTRATION_COMPLETE_ACTIVATE" ) ) ; $this -> setRedirect (JRoute:: _("index.php?option=com_users&view=registration&layout=complete" , false ) ) ; } else { $this -> setMessage (JText:: _("COM_USERS_REGISTRATION_SAVE_SUCCESS" ) ) ; $this -> setRedirect (JRoute:: _("http://www.mywebsite.com/welcome-reg" , false ) ) ; }

Regardless to which page on your website you redirect, system message "Thank you for registering... " will be still displayed. If you don"t want this message, remove full line above your redirection URL. e.g. $this->setMessage(JText::_("COM_USERS_REGISTRATION_SAVE_SUCCESS"));

If you don"t require account activation (New User Account Activation set to None ) this is all you need to avoid User Profile page. However, if user has to activate account via email (Account Activation set to Self ) this may not be enough. Immediately after registration user will be redirected to a web page you provided in the code as expected. However, when user clicks on a link in the activation email, they will be taken to the previously mentioned login form and if they use it to login, they will get to the User Profile page. To prevent this you can disable User Profile page completely and instead redirect users to any page you like. Read this article to find out how.

Joomla 1.6
Joomla 1.7
Joomla 2.5

Рассказать друзьям