Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2022-21445-for-12.2.1.3.0-Weblogic — # Oracle WebLogic ADF Faces 사전 인증 원격 코드 실행 익스플로잇 (CVE-2022-21445, CVSS 9.8) Oracle WebLogic ADF Faces용 사전 인증 원격 코드 실행 익스플로잇 (CVE-2022-21445, CVSS 9.8). 침투 테스트를 위한 상세한 환경 설정, 페이로드 생성, 원격 디버깅 지침을 포함합니다. | Kitploit
도구/GitHubGitHub/hienkiet/cve-2022-21445-for-12.2.1.3.0-weblogic
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingRemote Access ToolPayload Development
GitHubhienkiet/cve-2022-21445-for-12.2.1.3.0-weblogic

CVE-2022-21445-for-12.2.1.3.0-Weblogic

# Oracle WebLogic ADF Faces 사전 인증 원격 코드 실행 익스플로잇 (CVE-2022-21445, CVSS 9.8) Oracle WebLogic ADF Faces용 사전 인증 원격 코드 실행 익스플로잇 (CVE-2022-21445, CVSS 9.8). 침투 테스트를 위한 상세한 환경 설정, 페이로드 생성, 원격 디버깅 지침을 포함합니다.

저장소 보기
53472년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

개요

CVE-2022-21445(점수 CVSS 9.8)는 신뢰할 수 없는 데이터의 역직렬화 취약점으로, ADF Faces 구성 요소에 존재하는 것으로 확인되었으며, 공격자가 사전 인증(pre-authentication) 없이 원격에서 악용하여 RCE를 수행할 수 있습니다.

이 취약점은 VNG Corporation의 PeterJson과 VNPT의 Nguyen Jang이라는 두 사이버 보안 전문가에 의해 발견되었습니다. 이후 Oracle은 2021년 10월에 이 보고서를 접수했으며, 패치를 출시하는 데 6개월, 즉 2022년 4월까지 걸렸습니다.

이 글에서의 공격은 Oracle Bussiness Intelligence 버전 12.2.1.4.0에 초점을 맞춥니다.

분석 - 취약점 재현

환경 설정

피해자/타깃 머신 측

조건: 라이선스가 활성화된 Window 10+ Pro 또는 Window Home(x64)을 설치하거나 Window Server를 사용합니다(Oracle 제품 우선).

1단계: Java 설치, jdk 8u112 이상(8Ux) 버전. 다운로드 링크: JDKv8U112

  • __JAVA_HOME__을 jdk 디렉터리(jre가 아님)를 가리키는 경로로 추가합니다. 그림 1.1: Java 설치

2단계: Oracle Database 19c 설치, 다운로드 링크: Oracle 19c

  1. 데이터베이스 설치를 위한 폴더를 준비하고, 아래와 같은 경로를 만든 다음 새로 다운로드한 데이터베이스 zip 파일을 ___C:\app\oracle\product\19c\db_home1___에 압축 해제합니다.

  2. setup.application 파일을 관리자 권한으로 실행합니다. 그림 2.1: DB setup 실행

  3. DB 설치 안내에 따라 단계별로 수행합니다.

  • 매우 중요한 주의: 8/17 단계에서 __Create as Container database__를 선택하여 향후 Fusion Middleware 설치 프로세스를 위한 플러거블 DB를 엽니다. 그림 2.2: Pluggable Database 초기화

  • 9/17 단계에서 Character를 Unicode(AL32UTF8)로 선택합니다. 그림 2.3: Unicode 선택

    1. 설치 프로세스가 완료되면 Window의 서비스에서 아래 그림과 같이 4개의 주요 서비스가 RUNNING 상태인지 주의 깊게 확인합니다. 그림 2.4: 설치 성공

    그림 2.5: 서비스 확인

    1. 다음 단계에 따라 새로운 Oracle Database 계정을 생성합니다:
    • Terminal Administrator -> sqlplus / as sysdba
    • system 시스템 사용자 생성: alter user system identified by system_password account unlock;
    • system 사용자 존재 확인: select username from dba_users;
    • 환경 설정: alter session set “_oracle_script”=true;
    • 일반 사용자 hr 생성: create user hr identified by user_password;
    • 권한 부여: grant all privileges to hr;
    • 계정 잠금 해제 – 비밀번호 변경: alter user hr identified by hr_pass account unlock;
    • 새 시스템 계정 생성: alter user sys identified by sys_pass account unlock;

    3단계: SQL Developer 설치, no-jre 버전. 다운로드 링크: SQLDev-NoJRE 그림 3.1: SQL Developer 다운로드

    • sqldeveloper.application 파일을 관리자 권한으로 실행합니다. 그림 3.2: SQL Developer 실행

    • 아래 그림과 같이 새 연결에 대한 매개변수를 설정합니다. Username과 Password(위 예시의 경우 hr), Hostname(기본값 localhost), Port(기본값 1521), SID(2단계에서 설치한 전역 데이터베이스 이름)를 변경해야 합니다. 그림 3.3: SQL Developer 매개변수 설정

    • __Test__를 선택했을 때 Success 메시지가 표시되면 연결이 성공한 것이므로 __Connect__를 선택합니다.

    4단계: Fusion Middleware Infrastructure(FMW) 12.2.1.3.0 버전 설치, 다운로드 링크 FMW_ver_12.2.1.3.0 그림 4.1: FMW 다운로드

    • FMW 설치 디렉터리 경로를 C:\Oracle\Middleware\Oracle_Home 형식으로 생성합니다.
    • FMW 설치 안내에 따라 순서대로 단계를 수행합니다.

    5단계: Oracle Bussiness Intelligence(OBIEE) 12.2.1.4.0 버전 설치, 다운로드 링크: OBIEE_ver_12.2.1.4.0

    • setup_bi_platform-12.2.1.4.0_win64.exe 파일을 관리자 권한으로 실행합니다. 그림 5.1: OBIEE 설치 파일 실행

    • OBIEE 설치 안내에 따라 단계별로 설치합니다.

    • 주의: BI 경로는 FWM을 설치한 경로와 동일해야 합니다. 여기서는 __Oracle/Middleware/Oracle_Home__입니다. 그림 5.2: BI 경로는 FWM과 동일해야 함

    6단계: Repository Creation Utility(RCU)를 사용하여 BI 스키마 설정

    • C:\Oracle\Middleware\Oracle_Home\oracle_common\bin 경로에서 rcu.bat 파일을 관리자 권한으로 실행합니다.

    • 다음 단계를 순서대로 수행합니다.

    그림 6.1: 리포지토리 생성

    그림 6.2: 데이터베이스 연결 세부 정보

    그림 6.3: 구성 요소 선택

    그림 6.4: 스키마 비밀번호

    • 마지막으로 __Create__를 눌러 시스템이 BI 스키마를 생성하게 합니다.

    7단계: OBIEE용 환경 변수 설정

    • 제어판 > 시스템 > 고급 시스템 설정 > 고급 > 환경 변수 > 새 시스템 변수로 이동합니다. 그림 7.1: 환경 변수

    8단계: BI 도메인 생성

    1. C:\Oracle\Middleware\Oracle_Home\bi\bin 경로에서 config.cmd 파일을 관리자 권한으로 실행합니다.

    그림 8.1: config 파일 실행

    1. 1단계에서: 3가지 구성 요소를 모두 선택합니다. Essbase는 OLAP 서버, Business Intelligence Enterprise Edition은 BI Analytics, Business Intelligence Publisher는 BI Publisher입니다.

    그림 8.2: 구성 요소 선택

    1. 3단계에서: 아래 그림과 같이 새 도메인을 설정합니다. !! 도메인 비밀번호를 반드시 기억하세요. 나중에 다시 찾기가 매우 어렵습니다. 그리고 도메인은 기본값이므로 __bi__로 둡니다.

    그림 8.3: 도메인 계정

    1. 4단계에서: 데이터베이스에 대한 도메인 정보를 업데이트합니다.

    그림 8.4: 정보 업데이트

    1. 8단계에서: 프로세스가 순조롭게 진행되면 아래 그림과 같은 결과가 나타납니다.

    그림 8.5: 구성 성공

    1. 모든 것이 Done이면 다음 단계를 위해 OBIEE 정보 파일을 저장하고 다음 URL로 로그인합니다:
    • http://localhost:9500/console*
    • http://localhost:9500/em*
    • http://localhost:9502/xmlpserver*
    • http://localhost:9502/analytics*
    1. 발생할 수 있는 몇 가지 오류
    • 4단계에서 시스템이 로그온 실패를 보고하면 도메인 비밀번호가 정확한지 다시 확인합니다.

    • 8단계에서 시스템이 아래 그림과 같은 오류를 보고하면 Window 라이선스를 활성화했는지, Window가 조건 부분에서 설명한 것과 같은지 확인합니다.

    그림 8.6: 라이선스 오류

    • BI_HOME_PRODUCT를 아직 추가하지 않은 오류, __7단계__를 다시 확인합니다.
    • 업데이트 오류 ...

    9단계: 설정이 완료되면 방금 생성한 BI 도메인의 경로 __$Oracle_Home\user_projects\domains\bi\servers\AdminServer\tmp_WL_user\adf.oracle.domain.webapp\i83uao__에 접근합니다.

    • 여기의 모든 jar 파일을 별도의 디렉터리에 복사하여 공격 머신에 공유합니다(랩 환경에서는 이렇게 합니다. 실제 공격 시에도 공격 머신에 타깃 머신과 동일하게 설치하여 소스 코드를 확보해야 합니다).

    • $Oracle_Home\coherence\lib 경로의 coherence.jar 라이브러리도 이 디렉터리에 추가합니다.

    • 이 디렉터리는 페이로드의 성공 여부를 결정하는 중요한 디렉터리입니다. FMW나 BI의 버전, 각 머신의 설치 환경이 일반적으로 다르기 때문에 정확한 버전이 필요하며, 페이로드 전송 중 발생할 수 있는 위험이나 예외를 줄이기 위해서입니다.

    10단계 (원격 디버그가 필요한 경우에만 수행합니다. 다시 말하지만 실제 환경이 아닌 테스트에서는 피해자 머신을 마음대로 설정할 수 없으므로, 공격자는 자신의 머신에 타깃 머신 설정도 수행하여 원격 디버그로 오류를 확인할 수 있어야 합니다.)

    • Mozilla를 설치하고 포트 8181의 Burp Proxy를 추가합니다.

    • BI 서버에서 원격 디버그 활성화

      localhost:9500/console에 접속합니다.

      Domain Structure -> bi 선택 -> Environment -> Servers

    그림 10.1: 도메인 구조

    두 개의 서버가 표시됩니다. WebLogic의 AdminServer와 BI의 bi_server1입니다.

    그림 10.2: 표시된 서버 목록

    왼쪽 끝 모서리에서 Lock & Edit을 선택하고 bi_server1을 체크하여 구성을 편집합니다. 여기서 Configuration -> Server start -> 끝까지 스크롤 -> Advance(있을 경우) 선택 -> Arguments에 입력 선택 -> 디버그 매개변수를 입력합니다:

    -Xdebug -Xnoagent – Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n

    (나중에 bi_server1을 다시 시작할 수 없는 오류가 발생하면 0.0.0.0:5005로 시도할 수 있습니다. bi_server1)

    WebLogic 비밀번호(앞서 Config BI Domain 부분에서 설정한 것)를 입력합니다 -> Apply change & Restart

    관리자 터미널을 시작합니다 -> $Oracle_Home\user_projects\domains\bi\bitools\bin 경로로 이동하여 ./stop.cmd 및 ./start.cmd를 실행해 bi_server1을 다시 시작합니다. 재시작 과정에서 오류가 발생하지 않으면 디버그가 열려 위와 같이 포트 5005에서 수신 대기 중인 것입니다. 오류가 발생하면 위의 디버그 매개변수에 공백이 과하거나 address 부분이 잘못되었는지 다시 확인합니다.

    공격 머신 측

    1단계: IntelliJ IDEA Ultimate를 다운로드하고 GitHub에서 찾은 코드로 활성화합니다.

    2단계 (공격 과정에서 500 Server Error, ... 같은 오류가 발생할 때만 이 단계를 수행합니다. 페이로드에 예외가 있기 때문입니다.)

    1. 프로젝트의 jdk – sdk 버전을 타깃 머신과 동일한 버전으로 변경합니다(설치 방법은 __타깃 머신 부분 - 1단계__와 동일).

    2. 소스 코드 분석 및 원격 디버그를 위한 빈 Project를 생성합니다. 3. 타깃 머신에서 받은 디렉터리의 모든 jar 파일을 이 프로젝트에 추가합니다.

      Project Structure -> Modules -> + 선택 -> 1 JARS or Directories -> jar 디렉터리 전체 추가.

    그림 11.1: jar 파일 추가

    그림 11.2: 결과

    1. 원격 디버그 설정

      Run -> Edit Configurations -> + -> Remote JVM Debug

    그림 12.1: 원격 디버그 설정

    root@kitploit:~
     Remote Debug를 실행하고 콘솔에 Connected … 메시지가 표시되면 성공한 것입니다.
    

    그림 12.2: Remote Debug 실행

    3단계:

    • 이 저장소의 코드를 머신에 클론하고 lib 디렉터리에 있는 기존 coherence.jar 파일을 삭제한 후, 이전 단계에서 타깃 머신으로부터 받은 파일로 교체합니다.

    • 그런 다음 IntelliJ로 실행되는 프로젝트에 추가하고, __lib__의 jar 파일들을 Add as library 옵션으로 추가합니다.

    • LambdaIdentity$.... 클래스 이름이 WebLogic 버전에 맞는지 다시 확인하고, 변경 사항이 있으면 파일을 리팩터링하고 해당 파일의 이름을 수정합니다.

      Weblogic 12.2.1.3: LambdaIdentity$E12ECA49F06D0401A9D406B2DCC7463A

      Weblogic 12.2.1.4: LambdaIdentity$423B02C050017B24DB10DFF759AA56BF

    • Main.java 파일에서 LambdaIdentity$....class 파일의 경로를 수정합니다. 정확한 경로를 얻는 방법은 두 가지가 있습니다. __javac__를 실행해 jar 파일에서 .class 파일을 생성하거나, main 함수의 코드를 주석 처리한 후 이 프로젝트를 정상적으로 실행하면 클래스 파일 경로를 target 디렉터리에서 찾을 수 있습니다.

    • 프로젝트의 jdk와 sdk가 타깃 머신 쪽과 동일한지 다시 확인합니다.

    BI 코드 및 페이로드 생성 코드 분석

    BI 코드 분석

    1. $Oracle\Middleware\Oracle_Home\user_projects\domains\bi\servers\AdminServer\tmp_WL_user\em\fw8wi5\war\WEB-INF 경로에서

    web.xml 파일을 볼 수 있습니다. 이 파일은 servlet-mapping과 관련된 매핑 관계를 설명합니다. "resources"는 시스템 리소스와 관련된 서블릿으로, 중요한 데이터와 정보를 포함하고 있기 때문에 공격자들이 주로 노리는 위치입니다.

    그림 13.1: servlet-mapping 관계

    1. ResourceServlet 클래스, 구체적으로 org.apache.myfaces.trinidad.webapp.ResourceServlet을 살펴보면 서버로 전송된 GET 요청을 처리하는 doGet 함수를 확인할 수 있습니다.

    그림 13.2: doGet 함수

    • 여기서 _getResourceLoader() 메서드를 통해 입력 요청으로부터 새로운 로더가 생성됩니다. 동시에 resourcePath도 초기화되며, request를 매개변수로 전달받는 getResourcePath 메서드를 통해 servletPath와 servletInfo 값을 받습니다. 해당 로더는 getResource(resourcePath) 함수를 호출하여 입력 요청에서 리소스를 로드하려고 시도하고, org.apache.myfaces.trinidad.resource.ResourceLoader.getResource.findResource() 함수를 통해 이를 찾습니다. 마지막으로 찾은 값은 URL.class의 url 인스턴스에 전달됩니다.

    그림 13.3: getResource 함수

    • _getResourceLoader는 servletPath와 로더 간의 매핑 관계를 저장하기 위해 ConcurrentMap을 유지합니다. 이 관계는 oracle.adfinternal.view.resource.rich.RenderKitResourceLoader에 명확하게 정의되어 있습니다.

    그림 13.3: RenderKitResourceLoader 클래스

    • RenderKitResourceLoader() 함수의 _register 메서드가 호출되어 해당 regex + 로더를 전달한 후, 상위 함수인 super.register를 반환합니다. 이 함수는 concurrentmap_loaders에 partern 값과 해당 로더를 추가합니다. 따라서 doGet() 함수에서 로더가 초기화되고 입력 request 매개변수를 받으면, 전송된 요청 URL의 servletPath 값을 가져와 _loader.get()에 전달하여 해당 서블릿을 얻습니다.

    그림 13.4: _register 메서드

    그림 13.5: register 메서드(상위 메서드)

    • 취약점의 발견자는 findResource() 메서드를 오버라이드하는 클래스 중 oracle.adfinternal.view.resource.rich.RemoteApplicationResourceLoader가 역직렬화로 이어질 위험이 있는 클래스라고 판단했습니다. 그 이유를 찾기 위해 이를 분석해 보겠습니다.

    RemoteApplicationResourceLoader.class의 findResource() 함수 분석

    그림 13.6: findResource() 함수

    이 함수는 사용자 지정 프로토콜 RAStreamHandler()를 포함하는 메서드를 반환합니다. RAStreamHandler는 값이 new RAURLConnection인 URLConnection 객체를 생성합니다.

    그림 13.7: RAStreamHandler() 메서드

    RAURLConnection 함수는 _getPathBean 함수를 호출합니다.

    그림 13.8: RAURLConnection() 메서드

    _getPathBean 함수는 getInstanceFromString() 함수를 호출하여 생성된 bean 객체를 포함합니다. 이 함수는 입력받은 문자열을 처리하여 해당 키(필터)를 추출합니다.

    그림 13.9: _getPathBean 함수

    입력된 bean 문자열은 SerializationUtils 클래스를 통해 URL 인코딩 형식에서 URLEncoderPathBean 객체로 변환됩니다. 모든 것이 정상이면 이후 입력은 계속해서 fromURLEncodeString() 함수에 전달됩니다.

    그림 13.10: getInstanceFromString() 함수

    그림 13.11: fromURLEncodedString() 함수

    입력 문자열에 오류가 있으면 예외가 발생합니다. 예외는 주로 페이로드에 사용된 라이브러리에서 발생하며, 버전 불일치 또는 Lambda 파일 경로 오류로 인해 발생합니다.

    fromURLEncodedString() 함수에서 url 매개변수를 사용하는 fromString 함수가 반환되며, 그 코드는 다음과 같습니다:

    그림 13.12: fromString() 함수

    fromString 함수에서 데이터는 readObject()로 읽혀 반환됩니다. 입력값이 전혀 필터링되지 않는 것을 볼 수 있습니다. 여러 함수를 거쳐 최종적으로 fromString()에서 역직렬화됩니다. 이것이 바로 공격에 사용되는 싱크(sink)입니다. 싱크가 있으니 이제 소스(source)만 찾으면 됩니다.

    1. 소스 찾기: 위에서 분석한 것처럼 소스를 찾으려면 입력 요청 URL을 식별해야 합니다. findResource() 함수를 호출하려면 RemoteApplicationResourceLoader 클래스로 접근할 수 있어야 합니다. RenderKitResourceLoader 클래스에 매우 명확하게 정의되어 있습니다:```bash this._register("/./remote/(.)", new RemoteApplicationResourceLoader());
    root@kitploit:~
    Do đó, để gọi được đến class kể trên thì ta cần có regex dạng “/.*/remote/(.*)”. Bởi thế, khi router hay đường dẫn đầu vào có dạng /em/afr/foo/remote/payload thì nó sẽ thỏa mãn cấu trúc được quy định ở file này, khi đó RemoteApplicationResourceLoader sẽ được sử dụng như loader tại  doGet, và file class tương ứng oracle.adfinternal.view.resource.rich.RemoteApplicationResourceLoader sẽ gọi đến hàm findResource() được override trong đó.Thế cho nên nếu như truyền payload đến đúng địa chỉ thì dữ liệu sẽ được được truyền đi dễ dàng mà không vướng phải filter.
    
    따라서 위 클래스를 호출하려면 “/.*/remote/(.*)” 형식의 정규식이 필요합니다. 그렇기 때문에 라우터나 입력 경로가 /em/afr/foo/remote/payload 형태라면 이 파일에 정의된 구조를 충족하게 되고, 이때 RemoteApplicationResourceLoader가 doGet에서 로더로 사용되며, 해당 클래스 파일인 oracle.adfinternal.view.resource.rich.RemoteApplicationResourceLoader가 그 안에서 오버라이드된 findResource() 함수를 호출합니다. 따라서 payload를 정확한 주소로 전달하면 필터에 걸리지 않고 데이터를 쉽게 전송할 수 있습니다.
    
    Đây là url sau cùng dùng cho khai thác:
    __hostname:port/contextApp/afr/foo/remote/payload/__
    
    최종 악용 URL은 다음과 같습니다:
    __hostname:port/contextApp/afr/foo/remote/payload/__
    
    Trong đó contextApp là một trong những path khi mới cài đặt xong OBIEE sẽ có như /em; /bicomposer; ….
    
    여기서 contextApp은 OBIEE 설치 직후 존재하는 경로 중 하나로, /em, /bicomposer 등이 있습니다.
    
    Foo là chuỗi bất kỳ
    
    Foo는 임의의 문자열입니다.
    
    Payload là chuỗi sinh ra khi chạy hàm Main của Project tấn công đã chuẩn bị.
    
    Payload는 준비된 공격 프로젝트의 Main 함수를 실행할 때 생성되는 문자열입니다.
    
    ### Phân tích code dùng để tạo payload
    
    ### Payload 생성 코드 분석
    
    Project này tuân theo gadget chain của CVE-2020-14644
    
    이 프로젝트는 CVE-2020-14644의 gadget chain을 따릅니다.
    
    ![file Lambda](https://raw.githubusercontent.com/hienkiet/CVE-2022-201145-12.2.1.3.0-Weblogic/main/image/payload2.png)
    
    Class LambdaIdentity$E12ECA49F06D0401A9D406B2DCC7463A được kế thừa từ AbstractRemotable được sử dụng để tương tác với hệ thống từ xa.
    
    AbstractRemotable로부터 상속받은 LambdaIdentity$E12ECA49F06D0401A9D406B2DCC7463A 클래스는 원격 시스템과 상호 작용하는 데 사용됩니다.
    
    Với việc sử dụng Java Reflection API, attacker có thể dễ dàng lấy ra WorkAdapter từ luồng thực thi hiện tại.
    
    Java Reflection API를 사용하면 공격자가 현재 실행 스레드에서 WorkAdapter를 쉽게 얻을 수 있습니다.
    
    Kế đó sẽ lấy tiếp trường connectionHandler của WorkAdapter và 
    thực hiện truy vấn để lấy ra ServletRequest và ServletResponse từ connectionHandler.
    
    그런 다음 WorkAdapter의 connectionHandler 필드를 가져오고 
    connectionHandler에서 ServletRequest와 ServletResponse를 가져오기 위한 쿼리를 수행합니다.
    
    Tiếp theo, lấy ra giá trị của tiêu đề "cmd" từ yêu cầu (ServletRequest), sau đó kiểm tra nếu "cmd" không rỗng, thực hiện một lệnh shell tương ứng với hệ điều hành hiện đang chạy (Windows hoặc Linux/Unix).
    
    다음으로 ServletRequest에서 "cmd" 헤더의 값을 가져온 다음, "cmd"가 비어 있지 않은지 확인하고 현재 실행 중인 운영 체제(Windows 또는 Linux/Unix)에 해당하는 셸 명령을 실행합니다.
    
    Đọc kết quả từ lệnh shell và gửi kết quả đó về phản hồi (ServletResponse).
    
    셸 명령의 결과를 읽고 해당 결과를 응답(ServletResponse)으로 보냅니다.
    
    Nếu có bất kỳ lỗi nào xảy ra trong quá trình thực thi, chúng sẽ được in ra màn hình console thông qua phương thức printStackTrace().
    
    실행 중 오류가 발생하면 printStackTrace() 메서드를 통해 콘솔 화면에 출력됩니다.
    
    Id phía sau tên lớp LamdaIdentity phụ thuộc vào phiên bản của weblogic server, là một chuỗi được mã hóa theo giá trị băm MD5 của class com.tangosol.internal.util.invoke.ClassIdentity, và vì ở mỗi phiên bản thì class này sẽ khác nhau nên như đã nói, để payload không bị lỗi thì phải kiểm tra kỹ cái này.
    
    LamdaIdentity 클래스 이름 뒤의 Id는 weblogic server 버전에 따라 달라지며, com.tangosol.internal.util.invoke.ClassIdentity 클래스의 MD5 해시 값으로 인코딩된 문자열입니다. 각 버전마다 이 클래스가 다르기 때문에 앞서 말했듯이 payload가 오류 없이 동작하려면 이를 주의 깊게 확인해야 합니다.
    
    Tại đây, một biến cmd được lấy từ header trong request đầu vào, sau đó được thêm vào câu lệnh Runtime.getRumtime.exec() bên dưới, được mã hóa và giải mã theo dạng mã hexa md5, sau khi được truyền đến hệ thống OBIEE sẽ trả về giá trị được deserialization.
    
    여기서 cmd 변수는 들어오는 요청의 헤더에서 가져온 다음, 아래의 Runtime.getRumtime.exec() 명령문에 추가되어 MD5 hex 코드 형태로 인코딩 및 디코딩됩니다. OBIEE 시스템으로 전달된 후 역직렬화(deserialization)된 값을 반환합니다.
    
    Cuối cùng, tại hàm Main, một đối tượng RemoteConstructor được tạo ra, thông qua thư viện SerializationUtils để được chuyển đổi thành một chuỗi URL encoded. Chuỗi này sẽ truyền trực tiếp vào url source, gây ra cơ hội cho các attacker chèn lệnh __cmd__ tùy ý.
    
    마지막으로 Main 함수에서 RemoteConstructor 객체가 생성되고, SerializationUtils 라이브러리를 통해 URL 인코딩된 문자열로 변환됩니다. 이 문자열은 소스 URL에 직접 전달되어 공격자가 임의의 __cmd__ 명령을 주입할 수 있는 기회를 제공합니다.
    
    ![Hàm Main](https://raw.githubusercontent.com/hienkiet/CVE-2022-201145-12.2.1.3.0-Weblogic/main/image/payload1.png)
    
    ![Main 함수](https://raw.githubusercontent.com/hienkiet/CVE-2022-201145-12.2.1.3.0-Weblogic/main/image/payload1.png)
    
    ## Tái hiện khai thác
    
    ## 공격 재현
    
    ![Khai thác /em](https://raw.githubusercontent.com/hienkiet/CVE-2022-201145-12.2.1.3.0-Weblogic/main/image/exploit1.png)
    
    ![/em 공격](https://raw.githubusercontent.com/hienkiet/CVE-2022-201145-12.2.1.3.0-Weblogic/main/image/exploit1.png)
    
    
    ![Khai thác /em](https://raw.githubusercontent.com/hienkiet/CVE-2022-201145-12.2.1.3.0-Weblogic/main/image/exploit2.png)
    
    ![/em 공격](https://raw.githubusercontent.com/hienkiet/CVE-2022-201145-12.2.1.3.0-Weblogic/main/image/exploit2.png)
    
    
    ## Reference
    
    ## 참고 자료
    
    1. https://peterjson.medium.com/miracle-one-vulnerability-to-rule-them-all-c3aed9edeea2
    
    2. https://testbnull.medium.com/oracle-access-manager-pre-auth-rce-cve-2021-35587-analysis-1302a4542316
    
    ## Author of Vulnerability: Jang Nguyen & Duc PeterJson
    
    ## 취약점 발견자: Jang Nguyen & Duc PeterJson
    
    도구 다운로드