Dom Zapobieganie Uniwersalne oprogramowanie dla salonów optycznych, gabinetów okulistycznych, gabinetów korekcji kontaktowej. Uniwersalne oprogramowanie dla salonów optycznych, gabinetów okulistycznych, gabinetów korekcji kontaktowej W dalszym ciągu dostępne t

Uniwersalne oprogramowanie dla salonów optycznych, gabinetów okulistycznych, gabinetów korekcji kontaktowej. Uniwersalne oprogramowanie dla salonów optycznych, gabinetów okulistycznych, gabinetów korekcji kontaktowej W dalszym ciągu dostępne t

Uniwersalne oprogramowanie zaprojektowane specjalnie dla salonów optycznych, klinik okulistycznych, biur kontroli jakości i okulistów.
Jakościowo nowy poziom pracy dla salonów optycznych i okulistów.

Program komputerowy „ARMO plus”

(Księgowość medyczna i handel)

  • Ujednolicona dokumentacja klientów we wszystkich miejscach pracy i oddziałach.
  • Elastyczny system zniżek, praca z kartami rabatowymi.
  • Prowadzenie i rozliczanie sprzedaży hurtowej i detalicznej, usług produkcji i naprawy okularów, usług medycznych.
  • Szybko wprowadzaj i wyszukuj informacje według nazwy, używając kodów, za pomocą skanera kodów kreskowych.
  • Optymalizacja zapytań o dostawę towaru za pomocą szablonów. Minimalizowanie zapasów.
  • Automatyczne wprowadzanie danych z badań lekarskich i generowanie dokumentacji medycznej.
  • Wystawianie recept i automatyzacja tworzenia zamówień na okulary. Rachunkowość usług lekarza i mistrza.
  • Ukierunkowane dostarczanie informacji operacyjnych za pomocą wiadomości SMS w celu zaproszenia klientów na wizytę konsultacyjną lub zaplanowaną wymianę soczewki; informowanie o akcjach spółki.
  • Zestawienia i szczegółowe raporty dotyczące przepływów pieniężnych i towarów, przepływów klientów, pracy personelu, wyników finansowych.
  • Możliwość pobrania danych do późniejszego wykorzystania w 1C: Księgowość, sklep internetowy i inne programy.
  • Monitorowanie indywidualnej aktywności pracowników (sprzedaż, skierowania na badania, udzielanie klientom rabatów itp.).
  • Konfiguracja dostępu użytkowników do funkcji programu.
  • Zautomatyzowana wymiana danych pomiędzy zdalnymi stacjami roboczymi (oddziałami).
  • Wysoki stopień ochrony przed nieuprawnionym dostępem i kopiowaniem informacji. Automatyczna archiwizacja bazy danych.

„ARMO plus” to system wykorzystujący technologie rozproszonych baz danych

Zaprojektowany do automatyzacji:

Prowadzenie sprzedaży hurtowej i detalicznej;

Wnioski o dostawę towarów, kontrolę przepływu towarów i pozostałych towarów w zakładach pracy;

Prowadzenie elektronicznej teczki klienta zawierającej dane z badań okulistycznych, dzienniki badań konsultacyjnych, wystawianie recept i zamówień na okulary;

Tworzenie i drukowanie danych z badań lekarskich;

Generowanie raportów dotyczących przepływów gotówkowych i towarowych, przepływów klientów oraz wyników ich ankiet.

Aby zorganizować niezawodne i bezpieczne działanie, w programie przewidziano podział na role, które określają uprawnienia użytkowników i ich dostęp do informacji. Technologie rozproszona baza danych pozwolić ci prowadzić prowadzenie sieci salonów optycznych i gabinetów okulistycznych.

Katalogi i dokumenty

Do przechowywania i systematyzacji danych, szybkiego wypełniania dokumentów, raportów, teczek pacjentów itp. pod warunkiem, że leksykony. Katalogi posiadają przyjazny interfejs, a praca z nimi jest intuicyjna Z pomocą dokumenty wprowadzane są informacje o transakcjach biznesowych i finansowych, składane są zamówienia na towary, wprowadzane są salda Dostęp do katalogów i dokumentów ustala administrator programu,nadawanie użytkownikom konkretnych „uprawnień”

Możliwość jednoczesnego wykonywania różnych operacji

Plik klienta

Szczególną rolę w ARMO Plus pełni utrzymanieelektroniczna teczka klienta. Ujednolicona kartoteka klienta zawiera informacje o danych pierwotnych, wywiadu, diagnozie, wizytach, dzienniczku badań i badań okulistycznych, receptach, zamówieniach na okulary, dane dotyczące zakupów, wniosków i zaliczek klienta. Program generuje raporty sprzedaży, zamówień i zapytań klientów oraz wyciągi z badań okulistycznych. Dla klientów tworzony jest elastyczny system rabatów. Istnieje system powiadamiania za pomocą wiadomości SMS i e-mail.


Podstawowe raporty w ARMO Plus

  • raporty podsumowujące i szczegółowe dotyczące przychodów, wydatków, sald, obrotów
  • raporty o przychodach
  • wstępne raporty dotyczące dokumentów i akt
  • raporty z kontroli cen materiałów eksploatacyjnych
  • raporty dotyczące wniosków i zamówień na okulary
  • raporty dotyczące trwałości
  • raporty dokumentów
  • raporty o klientach, przewidywanych wizytach, źródłach klientów
  • raporty dotyczące rabatów dla klientów
  • podsumowujące i szczegółowe raporty dotyczące personelu

Oprócz funkcji księgowych i analitycznych raporty służą do monitorowania pracy personelu, sprzedaży i przepływów klientów.

Rozproszona baza danych i wymiana danych

Technologia rozproszonych baz danych umożliwia pracę odległych geograficznie optyków, gabinetów i oddziałów okulistycznych. Informacje przesyłane są między sobą za pośrednictwem elektronicznych pakietów wymiany. Dzięki temu synchronizacja danych odbywa się na zdalnych stacjach roboczych. W ten sposób powstaje ujednolicona kartoteka pacjenta oraz bazę danych zawierającą informacje referencyjne i dokumentacyjne Firmy współpracujące z ARMO Plus mogą wymieniać między sobą dane drogą elektroniczną.


Usługa administrowania bazami danych

Niezawodność działania zapewniona jest poprzez ochrona Baza danych Zapisane dane zawsze mogą być przywrócić. Aby skompresować bazę danych, zapewnione jest rozładowywanie i czyszczenie danych. ARMO plus puszka prześlij dane do programu 1C:Enterprise, Excel, sklepu internetowego.

W Joomla po udanej rejestracji użytkownicy domyślnie są przekierowywani na stronę Strona logowania(jeśli konto nie wymaga aktywacji) Stamtąd (po zalogowaniu) użytkownicy zostaną przekierowani do: profil użytkownika strona. Dzieje się tak nawet jeśli masz ustawione przekierowanie logowania na coś innego Moduł formularza logowania.

Aby zmienić to zachowanie możesz przekierować użytkowników po rejestracji na dowolną inną stronę w Twojej witrynie.
Aby to zrobić, musisz edytować podstawowy plik Joomla. Pamiętaj, że Twoje zmiany mogą zostać nadpisane przez aktualizację Joomla. Zawsze dokumentuj zmiany wprowadzane w podstawowych plikach Joomla, aby w razie potrzeby móc je szybko powtórzyć.

Otwórz plik:
komponenty/com_users/controllers/registration.php

Przewiń w dół na sam dół. Zaczynając od linii 162, będziesz mieć płynny kod:

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=rejestracja&layout=kompletny”, FAŁSZ ) ) ; ) else ( $this -> setMessage (JText::_() ) ; $this -> setRedirect (JRoute::_( „index.php?option=com_users&view=login”, FAŁSZ ) ) ; )

W tej sekcji masz 3 linki rozpoczynające się od pliku Index.php?

  • Pierwsza () wykonywana jest po zarejestrowaniu użytkownika, jeśli konto ma być aktywowane przez administratora
  • Drugi( indeks.php?option=com_users&view=rejestracja&layout=kompletny), jeśli konto wymaga aktywacji przez użytkownika
  • Trzeci ( indeks.php?option=com_users&view=login), jeśli aktywacja konta nie jest wymagana.

Zastąp linki w zależności od rodzaju rejestracji, z której korzystasz, PEŁNYM adresem URL strony przekierowującej i gotowe.
Przykładowo, jeśli aktywacja użytkownika na mojej stronie nie jest wymagana i chcę przekierować użytkowników po rejestracji na http://www.mywebsite.com/welcome-reg zaktualizowany kod będzie następujący:

// Przekieruj do ekranu profilu. if ($return === "adminactivate" ) ( $this -> setMessage (JText::_( „COM_USERS_REGISTRATION_COMPLETE_VERIFY”) ) ; $this -> setRedirect(JRoute::_( „index.php?option=com_users&view=rejestracja&layout=kompletny”, FAŁSZ ) ) ; ) else if ($return === "useractivate" ) ( $this -> setMessage (JText::_( „COM_USERS_REGISTRATION_COMPLETE_ACTIVATE”) ) ; $this -> setRedirect(JRoute::_( „index.php?option=com_users&view=rejestracja&layout=kompletny”, FAŁSZ ) ) ; ) else ( $this -> setMessage (JText::_( „COM_USERS_REGISTRATION_SAVE_SUCCESS”) ) ; $this -> setRedirect(JRoute::_( "http://www.mywebsite.com/welcome-reg" , FAŁSZ ) ) ; )

Niezależnie od tego, na którą stronę w Twojej witrynie przekierujesz, pojawi się komunikat systemowy „ Dziękujemy za rejestrację...„ będzie nadal wyświetlane. Jeśli nie chcesz tej wiadomości, usuń całą linię nad adresem URL przekierowania. np. $this->setMessage(JText::_("COM_USERS_REGISTRATION_SAVE_SUCCESS");

Jeśli nie potrzebujesz aktywacji konta (Aktywacja nowego konta użytkownika ustawiona na Nic) to wszystko, czego potrzebujesz, aby uniknąć strony Profilu Użytkownika. Jeśli jednak użytkownik musi aktywować konto za pośrednictwem poczty elektronicznej (Aktywacja konta ustawiona na Samego siebie) to może nie wystarczyć. Natychmiast po rejestracji użytkownik zostanie przekierowany na stronę internetową, którą podałeś w kodzie zgodnie z oczekiwaniami. Jednakże, gdy użytkownik kliknie łącze w e-mailu aktywacyjnym, zostanie przeniesiony do wspomnianego wcześniej formularza logowania, a jeśli użyje go do logowania, przejdzie do strony Profilu Użytkownika. Aby temu zapobiec, możesz całkowicie wyłączyć stronę Profilu Użytkownika i zamiast tego przekierowywać użytkowników na dowolną stronę, którą lubisz. Przeczytaj ten artykuł, aby dowiedzieć się, jak to zrobić.

Joomla 1.6
Joomla 1.7
Joomla 2.5

Dzisiaj przyjrzymy się wykorzystaniu krytycznej 1-dniowej luki w popularnym systemie CMS Joomla, która eksplodowała w Internecie pod koniec października. O lukach będziemy rozmawiać w liczbach CVE-2016-8869, CVE-2016-8870 I CVE-2016-9081. Wszystkie trzy pochodzą z jednego fragmentu kodu, który przez pięć długich lat pozostawał w głębi frameworka, czekając na skrzydłach, by następnie uwolnić się i nieść ze sobą chaos, zhakowane strony i łzy niewinnych użytkowników tej Joomli. Tylko najdzielniejsi i odważni programiści, których oczy są czerwone od światła monitorów i których klawiatury są zasłane okruchami chleba, byli w stanie rzucić wyzwanie szalejącym złym duchom i położyć głowę na ołtarzu poprawek.

OSTRZEŻENIE

Wszystkie informacje podane są wyłącznie w celach informacyjnych. Ani redakcja, ani autor nie ponoszą odpowiedzialności za ewentualne szkody wyrządzone przez materiały zawarte w tym artykule.

Gdzie wszystko się zaczęło

6 października 2016 roku Demis Palma utworzył temat na Stack Exchange, w którym zapytał: dlaczego w Joomla w wersji 3.6 istnieją dwie metody rejestrowania użytkowników o tej samej nazwie Register()? Pierwszy znajduje się w kontrolerze UsersControllerRegistration, a drugi w kontrolerze UsersControllerUser. Damis chciał wiedzieć, czy gdzieś użyto metody UsersControllerUser::register(), czy też był to po prostu ewolucyjny anachronizm pozostały po starej logice. Jego obawą było to, że nawet jeśli ta metoda nie jest używana w żadnym widoku, można ją wywołać za pomocą spreparowanego zapytania. Na co otrzymałem odpowiedź od programisty o pseudonimie itoctopus, który potwierdził: problem naprawdę istnieje. I wysłał raport do programistów Joomla.

Wtedy wydarzenia rozwijały się najszybciej. 18 października programiści Joomla zaakceptowali raport Damisa, który do tego czasu przygotował PoC umożliwiający rejestrację użytkownika. Opublikował notatkę na swojej stronie internetowej, w której ogólnie opowiedział o napotkanym problemie i swoich przemyśleniach na ten temat. Tego samego dnia zostaje wypuszczona nowa wersja Joomla 3.6.3, która w dalszym ciągu zawiera lukę w kodzie.

Następnie Davide Tampellini odwraca błąd do tego stopnia, że ​​rejestruje nie prostego użytkownika, ale administratora. A 21 października do zespołu ds. bezpieczeństwa Joomla trafia nowa sprawa. Mówi się już o zwiększeniu przywilejów. Tego samego dnia na stronie Joomla pojawia się komunikat, że we wtorek 25 października ukaże się kolejna wersja o numerze seryjnym 3.6.3, która naprawia krytyczną lukę w jądrze systemu.

25 października Zespół Joomla Security Strike Team znajduje najnowszy problem spowodowany fragmentem kodu odkrytym przez Damisa. Następnie zatwierdzenie z 21 października o niepozornej nazwie „Preparing 3.6.4 Stable Release” zostaje wypychane do głównej gałęzi oficjalnego repozytorium Joomla, co naprawia niefortunny błąd.

Po tym wydaniu do społeczności programistów dołącza wiele zainteresowanych osób, które zaczynają promować lukę i przygotowywać exploity.

27 października badacz Harry Roberts przesyła do repozytorium Xiphos Research gotowy exploit, który może przesłać plik PHP na serwer z podatnym na ataki systemem CMS.

Detale

Cóż, tło się skończyło, przejdźmy do najciekawszej części - analizy podatności. Zainstalowałem Joomla 3.6.3 jako wersję testową, więc wszystkie numery linii będą istotne dla tej wersji. Wszystkie ścieżki do plików, które zobaczysz poniżej, zostaną wskazane w odniesieniu do katalogu głównego zainstalowanego CMS-a.

Dzięki odkryciu Damisa Palmy wiemy, że istnieją dwie metody dokonujące rejestracji użytkownika w systemie. Pierwszy z nich jest używany przez CMS i znajduje się w pliku /components/com_users/controllers/registration.php:108. Drugi (ten, który będziemy musieli wywołać) znajduje się w /components/com_users/controllers/user.php:293. Przyjrzyjmy się temu bliżej.

286: /** 287: * Metoda rejestracji użytkownika. 288: * 289: * @return boolean 290: * 291: * @since 1.6 292: */ 293: funkcja publiczna Register() 294: ( 295: JSession::checkToken("post") lub jexit(JText::_ („JINVALID_TOKEN”)); ... 300: // Pobierz dane formularza. 301: $data = $this->input->post->get("user", array(), "array"); . .. 315: $return = $model->validate($form, $data); 316: 317: // Sprawdź błędy 318: if ($return === false) 319: ( ... 345: / / Zakończ rejestrację 346: $return = $model->register($data);

Tutaj zostawiłem tylko ciekawe linie. Pełną wersję podatnej metody można obejrzeć w repozytorium Joomla.

Zastanówmy się, co dzieje się podczas normalnej rejestracji użytkownika: jakie dane są przesyłane i jak są przetwarzane. Jeżeli w ustawieniach włączona jest rejestracja użytkownika, formularz znajdziesz pod adresem http://joomla.local/index.php/component/users/?view=registration.


Prawidłowe żądanie rejestracji użytkownika wygląda jak na poniższym zrzucie ekranu.


Za współpracę z użytkownikami odpowiada komponent com_users. Zwróć uwagę na parametr task w żądaniu. Ma format $controller.$method . Przyjrzyjmy się strukturze plików.

Nazwy skryptów w folderze kontrolery odpowiadają nazwom wywoływanych kontrolerów. Ponieważ nasze żądanie zawiera teraz $controller = "registration" , plik zostanie wywołany rejestracja.php i jego metoda Register().

Uwaga, pytanie: jak przenieść przetwarzanie rejestracji do wrażliwego miejsca w kodzie? Prawdopodobnie już się tego domyśliłeś. Nazwy metod podatnych i metod rzeczywistych są takie same (rejestr), więc wystarczy zmienić nazwę wywoływanego kontrolera. Gdzie znajduje się nasz wrażliwy kontroler? Zgadza się, w pliku użytkownik.php. Okazuje się, że $controller = "user" . Łącząc wszystko otrzymujemy task = user.register . Teraz żądanie rejestracji jest przetwarzane w sposób, którego potrzebujemy.


Drugą rzeczą, którą musimy zrobić, to wysłać dane w odpowiednim formacie. Tutaj wszystko jest proste. Uprawniona rejestracja() oczekuje od nas tablicy o nazwie jform , w której przekazujemy dane rejestracyjne - imię i nazwisko, login, hasło, adres e-mail (patrz zrzut ekranu z żądaniem).

  • /components/com_users/controllers/registration.php: 124: // Pobierz dane użytkownika. 125: $requestData = $this->input->post->get("jform", array(), "array");

Nasz klient pobiera te dane z tablicy zwanej user.

  • /components/com_users/controllers/user.php: 301: // Pobierz dane formularza. 302: $data = $this->input->post->get("użytkownik", tablica(), "tablica");

Dlatego zmieniamy nazwy wszystkich parametrów w żądaniu z jfrom na user .

Naszym trzecim krokiem jest znalezienie prawidłowego tokena CSRF, ponieważ bez niego nie będzie rejestracji.

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

Wygląda jak skrót MD5 i możesz go pobrać na przykład z formularza autoryzacyjnego na stronie /index.php/component/users/?view=login.


Teraz możesz tworzyć użytkowników przy użyciu żądanej metody. Jeśli wszystko się udało, gratulacje - właśnie wykorzystałeś lukę CVE-2016-8870„Brak kontroli uprawnień do rejestracji nowych użytkowników.”

Tak to wygląda w „działającej” metodzie Register() z kontrolera UsersControllerRegistration:

  • /components/com_users/controllers/registration.php: 113: // Jeśli rejestracja jest wyłączona - Przekieruj do strony logowania. 114: if (JComponentHelper::getParams("com_users")->get("allowUserRegistration") == 0) 115: ( 116: $this->setRedirect(JRoute::_("index.php?option=com_users&view= login", fałsz)); 117: 118: zwróć fałsz; 119: )

I tak w przypadku bezbronności:

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

Tak, nie ma mowy.

Aby zrozumieć drugi, znacznie poważniejszy problem, wyślijmy utworzone przez nas żądanie i zobaczmy, jak jest ono wykonywane w różnych częściach kodu. Oto element odpowiedzialny za weryfikację danych przesłanych przez użytkownika w metodzie roboczej:

Kontynuacja jest dostępna tylko dla członków

Opcja 1. Dołącz do społeczności „site”, aby zapoznać się ze wszystkimi materiałami w serwisie

Członkostwo w społeczności w określonym terminie zapewni Ci dostęp do WSZYSTKICH materiałów Hackera, zwiększy Twoją osobistą zniżkę kumulacyjną i pozwoli Ci zgromadzić profesjonalną ocenę Xakep Score!



Nowość na stronie

>

Najbardziej popularny