안경원, 안과 진료소, 접촉 교정실을 위한 범용 소프트웨어입니다. 안경원, 안과 진료소, 접촉교정실용 범용 소프트웨어 컴퓨터 프로그램

Joomla에서 등록이 성공적으로 완료되면 사용자는 기본적으로 다음 페이지로 리디렉션됩니다. 로그인 페이지(계정을 활성화할 필요가 없는 경우) 여기에서 (로그인 후) 사용자는 다음으로 리디렉션됩니다. 유저 프로필페이지. 이는 로그인 리디렉션을 다른 것으로 설정한 경우에도 발생합니다. 로그인 양식 모듈.

이 동작을 변경하려면 등록 후 사용자를 웹사이트의 다른 페이지로 리디렉션할 수 있습니다.
이렇게 하려면 핵심 Joomla 파일을 편집해야 합니다. Joomla 업데이트로 인해 변경 사항이 덮어쓰여질 수 있다는 점에 유의하세요. 필요한 경우 빠르게 다시 실행할 수 있도록 핵심 Joomla 파일에 대한 변경 사항을 항상 문서화하세요.

파일 열기:
구성 요소/com_users/controllers/registration.php

맨 아래로 스크롤하십시오. 162번째 줄부터 시작하면 다음과 같은 코드가 표시됩니다.

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=등록&레이아웃=완료", 거짓 ) ) ; ) else ( $this -> setMessage (JText::_() ) ; $this -> setRedirect (JRoute::_( "index.php?option=com_users&view=로그인", 거짓 ) ) ; )

이 섹션에는 index.php?로 시작하는 3개의 링크가 있습니다.

  • 첫 번째 ()는 관리자가 계정을 활성화해야 하는 경우 사용자 등록 후 실행됩니다.
  • 두번째 ( index.php?option=com_users&view=등록&레이아웃=완료), 사용자가 계정을 활성화해야 하는 경우
  • 세 번째( index.php?option=com_users&view=로그인), 계정 활성화가 필요하지 않은 경우.

리디렉션 페이지의 전체 URL로 사용하는 등록 유형에 따라 링크를 바꾸면 완료됩니다.
예를 들어, 내 웹사이트에서 사용자 활성화가 필요하지 않고 등록 후 사용자를 다음으로 리디렉션하려는 경우 http://www.mywebsite.com/welcome-reg업데이트된 코드는 다음과 같습니다:

// 프로필 화면으로 리디렉션됩니다. if ($return === "adminactivate" ) ( $this -> setMessage (JText::_( "COM_USERS_REGISTRATION_COMPLETE_VERIFY") ) ; $this -> setRedirect(JRoute::_( "index.php?option=com_users&view=등록&레이아웃=완료", 거짓 ) ) ; ) else if ($return === "useractivate" ) ( $this -> setMessage (JText::_( "COM_USERS_REGISTRATION_COMPLETE_ACTIVATE") ) ; $this -> setRedirect(JRoute::_( "index.php?option=com_users&view=등록&레이아웃=완료", 거짓 ) ) ; ) else ( $this -> setMessage (JText::_( "COM_USERS_REGISTRATION_SAVE_SUCCESS") ) ; $this -> setRedirect(JRoute::_( "http://www.mywebsite.com/welcome-reg" , 거짓 ) ) ; )

귀하의 웹사이트에서 어떤 페이지로 리디렉션하는지에 관계없이 시스템 메시지 " 등록해주셔서 감사합니다..."가 계속 표시됩니다. 이 메시지를 원하지 않으면 리디렉션 URL 위의 전체 줄을 제거하세요. 예를 들어 $this->setMessage(JText::_("COM_USERS_REGISTRATION_SAVE_SUCCESS"));

계정 활성화가 필요하지 않은 경우(새 사용자 계정 활성화가 없음) 이것은 사용자 프로필 페이지를 피하기 위해 필요한 전부입니다. 그러나 사용자가 이메일을 통해 계정을 활성화해야 하는 경우(계정 활성화가 본인) 이것만으로는 충분하지 않을 수 있습니다. 등록 직후 사용자는 예상대로 코드에 제공된 웹 페이지로 리디렉션됩니다. 그러나 사용자가 활성화 이메일에 있는 링크를 클릭하면 앞서 언급한 로그인 양식으로 이동하게 되며, 이를 사용하여 로그인하면 사용자 프로필 페이지로 이동하게 됩니다. 이를 방지하려면 사용자 프로필 페이지를 완전히 비활성화하고 대신 사용자를 원하는 페이지로 리디렉션할 수 있습니다. 방법을 알아보려면 이 기사를 읽어보세요.

줌라 1.6
줌라 1.7
줌라 2.5

오늘은 10월 말 인터넷에서 폭발적으로 발생한 인기 CMS Joomla의 심각한 1일 취약점 악용 사례를 살펴보겠습니다. 숫자로 취약점에 대해 이야기하겠습니다. CVE-2016-8869, CVE-2016-8870그리고 CVE-2016-9081. 세 가지 모두 5년 동안 프레임워크 깊숙한 곳에서 맴돌며 날개를 기다리다가 풀려나 혼돈, 해킹된 사이트 및 이 Joomla의 무고한 사용자의 눈물을 가져온 하나의 코드 조각에서 나왔습니다. 모니터의 빛 때문에 눈이 붉어지고 키보드에 빵가루가 흩어져 있는 가장 용감하고 용감한 개발자들만이 성난 악령에 도전하고 수정의 제단에 머리를 얹을 수 있었습니다.

경고

모든 정보는 정보 제공의 목적으로만 제공됩니다. 편집자나 저자 모두 이 기사의 자료로 인해 발생할 수 있는 피해에 대해 책임을 지지 않습니다.

모든 것이 시작된 곳

2016년 10월 6일, Demis Palma는 Stack Exchange에 다음과 같은 주제를 만들었습니다. 실제로 Joomla 버전 3.6에 동일한 이름의 사용자를 등록()하는 두 가지 방법이 있는 이유는 무엇입니까? 첫 번째는 UsersControllerRegistration 컨트롤러에 있고 두 번째는 UsersControllerUser 컨트롤러에 있습니다. Damis는 UsersControllerUser::register() 메소드가 어딘가에 사용되었는지, 아니면 단지 기존 논리에서 남겨진 진화적 시대착오인지 알고 싶었습니다. 그의 우려는 이 메서드가 어떤 뷰에서도 사용되지 않더라도 조작된 쿼리에 의해 호출될 수 있다는 것이었습니다. 이에 대해 itoctopus라는 별명을 가진 개발자로부터 응답을 받았는데, 그는 문제가 실제로 존재한다는 것을 확인했습니다. 그리고 Joomla 개발자에게 보고서를 보냈습니다.

그런 다음 사건이 가장 빠르게 발전했습니다. 10월 18일, Joomla 개발자는 당시 사용자 등록을 허용하는 PoC 초안을 작성한 Damis의 보고서를 수락했습니다. 그는 자신의 웹사이트에 자신이 발견한 문제와 이 문제에 대한 자신의 생각에 대해 일반적인 용어로 설명하는 메모를 게시했습니다. 같은 날, 여전히 취약한 코드가 포함된 Joomla 3.6.3의 새 버전이 출시되었습니다.

그 후 Davide Tampellini는 버그를 단순 사용자가 아닌 관리자로 등록하는 지점으로 돌렸습니다. 그리고 10월 21일, Joomla 보안팀에 새로운 사건이 도착했습니다. 이미 권한 증가에 대해 이야기하고 있습니다. 같은 날 Joomla 웹사이트에는 10월 25일 화요일에 시스템 커널의 심각한 취약점을 수정하는 일련 번호 3.6.3의 다음 버전이 출시될 것이라는 발표가 나왔습니다.

10월 25일 Joomla Security Strike Team은 Damis가 발견한 코드 조각으로 인해 발생한 최신 문제를 발견했습니다. 그런 다음 눈에 띄지 않는 이름인 Ready 3.6.4 Stable Release를 가진 10월 21일자 커밋이 공식 Joomla 저장소의 메인 브랜치로 푸시되어 불행한 버그를 수정합니다.

이 내용이 나온 후 많은 관심 있는 개인이 개발자 커뮤니티에 참여하여 취약점을 홍보하고 공격을 준비하기 시작합니다.

10월 27일, Harry Roberts 연구원은 취약한 CMS가 있는 서버에 PHP 파일을 업로드할 수 있는 기성 익스플로잇을 Xiphos Research 저장소에 업로드했습니다.

세부

자, 배경은 끝났습니다. 가장 흥미로운 부분인 취약점 분석으로 넘어가겠습니다. Joomla 3.6.3을 테스트 버전으로 설치했으므로 모든 줄 번호는 이 버전과 관련이 있습니다. 그리고 아래에 표시되는 파일의 모든 경로는 설치된 CMS의 루트를 기준으로 표시됩니다.

Damis Palma의 발견 덕분에 우리는 시스템에 사용자 등록을 수행하는 두 가지 방법이 있다는 것을 알게 되었습니다. 첫 번째 항목은 CMS에서 사용되며 /comComponents/com_users/controllers/registration.php:108 파일에 있습니다. 두 번째 것(우리가 호출해야 할 것)은 /comComponents/com_users/controllers/user.php:293에 있습니다. 좀 더 자세히 살펴보겠습니다.

286: /** 287: * 사용자를 등록하는 방법입니다. 288: * 289: * @return 부울 290: * 291: * @since 1.6 292: */ 293: 공용 함수 Register() 294: ( 295: JSession::checkToken("post") 또는 jexit(JText::_ ("JINVALID_TOKEN")); ... 300: // 양식 데이터를 가져옵니다. 301: $data = $this->input->post->get("user", array(), "array"); . .. 315: $return = $model->validate($form, $data); 316: 317: // 오류를 확인합니다. 318: if ($return === false) 319: ( ... 345: / / 등록을 완료한다 346: $return = $model->register($data);

여기서는 흥미로운 대사만 남겼습니다. 취약한 방법의 전체 버전은 Joomla 저장소에서 볼 수 있습니다.

일반 사용자 등록 중에 어떤 일이 발생하는지, 즉 어떤 데이터가 전송되고 어떻게 처리되는지 알아봅시다. 설정에서 사용자 등록이 활성화된 경우 http://joomla.local/index.php/comComponent/users/?view=registration에서 양식을 찾을 수 있습니다.


합법적인 사용자 등록 요청은 다음 스크린샷과 같습니다.


com_users 구성 요소는 사용자 작업을 담당합니다. 요청의 작업 매개변수에 주의하세요. $controller.$method 형식을 갖습니다. 파일구조를 살펴보겠습니다.

폴더에 있는 스크립트 이름 컨트롤러호출된 컨트롤러의 이름에 해당합니다. 이제 요청에 $controller = "registration"이 포함되어 있으므로 파일이 호출됩니다. 등록.php및 해당 Register() 메서드입니다.

주의, 질문: 등록 처리를 코드의 취약한 위치로 전송하는 방법은 무엇입니까? 아마 이미 짐작하셨을 겁니다. 취약한 메소드와 실제 메소드의 이름(레지스터)이 동일하므로 호출되는 컨트롤러의 이름만 변경하면 됩니다. 취약한 컨트롤러는 어디에 있습니까? 그렇군요 파일에 user.php. $controller = "user" 로 나타납니다. 모든 것을 합치면 task = user.register 가 됩니다. 이제 등록 요청이 필요한 방법으로 처리됩니다.


두 번째로 해야 할 일은 데이터를 올바른 형식으로 보내는 것입니다. 여기에서는 모든 것이 간단합니다. 합법적인 Register()는 이름, 로그인, 비밀번호, 이메일과 같은 등록 데이터를 전달하는 jform이라는 배열을 기대합니다(요청 스크린샷 참조).

  • /comComponents/com_users/controllers/registration.php: 124: // 사용자 데이터를 가져옵니다. 125: $requestData = $this->input->post->get("jform", array(), "array");

우리 클라이언트는 user라는 배열에서 이 데이터를 가져옵니다.

  • /comComponents/com_users/controllers/user.php: 301: // 양식 데이터를 가져옵니다. 302: $data = $this->input->post->get("user", array(), "array");

따라서 요청의 모든 매개변수 이름을 jfrom에서 user로 변경합니다.

세 번째 단계는 유효한 CSRF 토큰을 찾는 것입니다. 왜냐하면 그것이 없으면 등록이 불가능하기 때문입니다.

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

이는 MD5 해시처럼 보이며 예를 들어 /index.php/comComponent/users/?view=login 사이트의 승인 양식에서 가져올 수 있습니다.


이제 원하는 방법을 사용하여 사용자를 생성할 수 있습니다. 모든 것이 해결되었다면 축하합니다. 방금 취약점을 악용했습니다. CVE-2016-8870"새 사용자 등록을 위한 권한 확인이 누락되었습니다."

다음은 UsersControllerRegistration 컨트롤러의 "작동하는" Register() 메서드의 모습입니다.

  • /comComponents/com_users/controllers/registration.php: 113: // 등록이 비활성화된 경우 - 로그인 페이지로 리디렉션됩니다. 114: if (JComponentHelper::getParams("com_users")->get("allowUserRegistration") == 0) 115: ( 116: $this->setRedirect(JRoute::_("index.php?option=com_users&view= 로그인", false)); 117: 118: false 반환; 119: )

취약한 경우도 마찬가지입니다.

  • /구성 요소/com_users/controllers/user.php:

응, 절대 안돼.

훨씬 더 심각한 두 번째 문제를 이해하기 위해 우리가 만든 요청을 보내고 코드의 다양한 부분에서 어떻게 실행되는지 살펴보겠습니다. 다음은 작업자 메서드에서 사용자가 제출한 데이터의 유효성을 검사하는 부분입니다.

계속 이용은 회원만 가능합니다

옵션 1. "사이트" 커뮤니티에 가입하여 사이트의 모든 자료를 읽으세요.

지정된 기간 내에 커뮤니티에 가입하면 모든 Hacker 자료에 액세스할 수 있고 개인 누적 할인이 증가하며 전문적인 Xakep 점수 등급을 누적할 수 있습니다!

안경원, 안과 진료소, QC 사무실 및 안과 의사를 위해 특별히 설계된 범용 소프트웨어입니다.
안경점과 안과의사를 위한 질적으로 새로운 수준의 업무입니다.

컴퓨터 프로그램 "아모 플러스"

(의료회계 및 무역)

  • 모든 직장과 지점의 통합 고객 파일입니다.
  • 유연한 할인 시스템, 할인 카드 사용.
  • 도매 및 소매 판매 유지 및 회계, 안경 생산 및 수리 서비스, 의료 서비스.
  • 바코드 스캐너를 통해 코드를 사용하여 이름별로 정보를 빠르게 입력하고 검색할 수 있습니다.
  • 템플릿을 사용하여 상품 공급 요청 최적화. 재고 최소화.
  • 건강검진 데이터 자동 입력 및 진료기록지 생성.
  • 처방전 발행 및 안경 주문 형성 자동화. 의사와 주인의 서비스에 대한 회계.
  • 상담 약속이나 렌즈 교체 일정에 고객을 초대하기 위해 SMS 메시지를 사용하여 운영 정보를 타겟으로 전달합니다. 회사 주식에 대해 알려드립니다.
  • 현금 및 상품 이동, 고객 흐름, 인사 업무, 재무 결과에 대한 요약 및 세부 보고서입니다.
  • 1C: 회계, 온라인 상점 및 기타 프로그램에서 나중에 사용할 수 있도록 데이터를 다운로드할 수 있습니다.
  • 직원의 개별 활동 모니터링(판매, 시험 추천, 고객 할인 제공 등)
  • 프로그램 기능에 대한 사용자 액세스를 구성합니다.
  • 원격 워크스테이션(지점) 간의 자동 데이터 교환.
  • 무단 액세스 및 정보 복사로부터 높은 수준의 보호를 제공합니다. 자동 데이터베이스 보관.

"ARMO plus"는 분산 데이터베이스 기술을 활용한 시스템입니다.

자동화를 위해 설계됨:

도매 및 소매 판매 수행

물품 공급 신청, 작업장 내 물품 및 잔여 물품 이동 통제

안과 검사, 상담 검사 일지, 처방전 발행 및 안경 주문 데이터가 포함된 전자 클라이언트 파일을 유지 관리합니다.

건강진단자료의 작성 및 인쇄

현금 및 상품 이동, 고객 흐름, 설문조사 결과에 대한 보고서를 생성합니다.

안정적이고 안전한 작업을 구성하기 위해 프로그램은 사용자 권한과 정보에 대한 액세스를 결정하는 역할을 구분합니다. 기술 분산 데이터베이스수행할 수 있게 해주세요 안경점 및 안과 네트워크 운영.

디렉토리 및 문서

데이터 저장 및 체계화를 위해 문서, 보고서, 환자 파일 등을 빠르게 작성합니다. 제공 참고 도서. 디렉토리는 사용자 친화적인 인터페이스를 가지고 있으며 작업이 직관적입니다. 도움을 받아 서류비즈니스 및 금융 거래에 대한 정보 입력, 물품 요청, 잔액 입력 디렉토리 및 문서에 대한 액세스는 프로그램 관리자가 결정합니다.사용자에게 특정 "권한" 할당

다양한 작업 동시 수행 가능

클라이언트 파일

ARMO Plus의 특별한 역할은 유지 관리입니다.전자 클라이언트 파일. 통합 클라이언트 파일에는 기본 데이터, 기억 상실, 진단, 방문, 검사 및 안과 검사 일기, 처방전, 안경 주문, 구매 데이터, 응용 프로그램 및 클라이언트 발전에 대한 정보가 포함되어 있습니다. 이 프로그램은 고객의 판매, 주문 및 요청에 대한 보고서를 생성하고 안과 검사에서 추출합니다. 고객을 위해 유연한 할인 제도가 마련되어 있습니다. SMS 및 이메일 메시지를 통한 알림 시스템이 있습니다.


ARMO Plus의 기본 보고서

  • 수입, 지출, 잔액, 매출액에 대한 요약 및 세부 보고서
  • 수익 보고서
  • 문서 및 파일에 대한 사전 보고서
  • 소모품 가격 통제 보고서
  • 안경 신청 및 주문 보고서
  • 유통기한 보고서
  • 문서 보고서
  • 고객, 예상 방문, 고객 소스에 대한 보고서
  • 고객 할인 보고서
  • 인사 요약 및 세부 보고서

회계 및 분석 기능 외에도 보고서는 직원 작업, 판매 및 고객 흐름을 모니터링하는 데 사용됩니다.

분산 데이터베이스 및 데이터 교환

분산 데이터베이스 기술을 사용하면 지리적으로 멀리 떨어진 안경점, 안과 진료소 및 지점의 작업이 가능합니다. 정보는 전자 교환 패킷을 통해 서로 전송됩니다. 이로 인해 원격 워크스테이션에서 데이터 동기화가 이루어집니다. 이렇게 형성되어 있어요 통합 환자 파일참고자료 및 문서정보 데이터베이스 ARMO Plus와 협력하는 기업은 전자적으로 서로 데이터를 교환할 수 있습니다.


데이터베이스 관리 서비스

작동의 신뢰성은 다음을 통해 보장됩니다. 보존데이터 베이스 저장된 데이터는 항상 복원하다. 데이터베이스를 압축하기 위해 데이터 언로드 및 정리가 제공됩니다. ARMO 플러스 캔 1C:Enterprise 프로그램, Excel, 온라인 상점에 데이터를 업로드합니다.



해당 섹션의 최신 자료:

학교 일기를 올바르게 작성하는 방법
학교 일기를 올바르게 작성하는 방법

독서 일기의 요점은 사람이 언제, 어떤 책을 읽었는지, 그 책의 줄거리가 무엇인지 기억할 수 있다는 것입니다. 아이에게는 이것이 그의 것일 수도 있습니다 ...

평면 방정식: 일반, 세 점을 통한, 법선
평면 방정식: 일반, 세 점을 통한, 법선

비행기의 방정식. 평면의 방정식을 작성하는 방법은 무엇입니까? 비행기의 상호 배열. 문제 공간기하학은 그리 어렵지 않습니다...

니콜라이 시로티닌 상사
니콜라이 시로티닌 상사

2016년 5월 5일, 14:11 Nikolai Vladimirovich Sirotinin (1921년 3월 7일, Orel - 1941년 7월 17일, Krichev, 벨로루시 SSR) - 고위 포병 상사. 안에...