Everything is hacked.

There is no 100 % security.

CVE Analyze/CVE-2021-44228

Log4shell - Vulnerable App Setting

Kai_HT 2023. 12. 19. 15:07

https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlCn7R%2FbtsB1Le1PsZ%2FtOKJqrxGtyZnDBHwzNwAok%2Fimg.png

취약점 CVE-2021-44228 (Log4shell) 에 대한 실습을 하기 위한 환경세팅 방법을 정리한 글이다.
해당 취약점에 대한 정리에 대해 서술한 글의 경우 아래 글을 참고. 다른 분들이 log4shell 실습을 위한 환경 구성 방법에 대해 설명해놓았으나 본인은 도커 이미지 세팅 이후 환경구성이 필요할 것으로 판단하여 정리하게 되었다.

해당 게시글은 취약점의 환경세팅에 대한 게시글이므로 CVE 실습 상세내역은 이후 작성되는 게시글을 확인하자.

 

CVE-2021-44228

LOG4J 란Log4j. - Log For JavaJava, Kotlin, Scala, Groovy, Clojure 언어로 작성된 프로그램의 로그를 기록해주는 라이브러리.아파치 소프트웨어 재단의 프로젝트 아파치 로깅 서비스의 일부이며 여러 자바 로

tistory.kaiht.kr

CVE-2021-44228


1

깃헙에서 kozmer 이라는 분과 christophetd 이라는 분 께서 log4shell 테스팅 이미지를 업로드 해놓으셨다.
본인은 해당 이미지를 이용하여 환경을 구성할 예정이다.


1. christophetd - log4shell-vulnerable-app

피해서버 (공격 대상서버) 환경 세팅

1. 도커 명령어로 실습 환경 다운로드 및 실행

kai_ht@localhost:~$ sudo docker run --name CVE-2021-44228 -p 44228:8080 ghcr.io/christophetd/log4shell-vulnerable-app


  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.1)

2023-12-18 06:11:38.068  INFO 1 --- [           main] f.c.l.v.VulnerableAppApplication         : Starting VulnerableAppApplication using Java 1.8.0_181 on 0a52b0909b7d with PID 1 (/app/spring-boot-application.jar started by root in /)
2023-12-18 06:11:38.355  INFO 1 --- [           main] f.c.l.v.VulnerableAppApplication         : No active profile set, falling back to default profiles: default
2023-12-18 06:12:02.126  INFO 1 --- [           main] o.s.b.w.e.t.TomcatWebServer              : Tomcat initialized with port(s): 8080 (http)
2023-12-18 06:12:02.398  INFO 1 --- [           main] o.a.c.c.StandardService                  : Starting service [Tomcat]
2023-12-18 06:12:02.403  INFO 1 --- [           main] o.a.c.c.StandardEngine                   : Starting Servlet engine: [Apache Tomcat/9.0.55]
2023-12-18 06:12:03.452  INFO 1 --- [           main] o.a.c.c.C.[.[.[/]                        : Initializing Spring embedded WebApplicationContext
2023-12-18 06:12:03.482  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 22917 ms
2023-12-18 06:12:11.510  INFO 1 --- [           main] o.s.b.w.e.t.TomcatWebServer              : Tomcat started on port(s): 8080 (http) with context path ''
2023-12-18 06:12:11.757  INFO 1 --- [           main] f.c.l.v.VulnerableAppApplication         : Started VulnerableAppApplication in 43.87 seconds (JVM running for 60.029)
2023-12-18 06:12:18.194  INFO 1 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/]                        : Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-12-18 06:12:18.206  INFO 1 --- [nio-8080-exec-1] o.s.w.s.DispatcherServlet                : Initializing Servlet 'dispatcherServlet'
2023-12-18 06:12:18.225  INFO 1 --- [nio-8080-exec-1] o.s.w.s.DispatcherServlet                : Completed initialization in 18 ms
2023-12-18 06:12:18.798  WARN 1 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingRequestHeaderException: Required request header 'X-Api-Version' for method parameter type String is not present]
2023-12-18 06:12:18.809  WARN 1 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingRequestHeaderException: Required request header 'X-Api-Version' for method parameter type String is not present]

해당 도커 명령어는 "CVE-2021-44228" 라는 이름으로 외부주소 "ghcr.io/christophetd/log4shell-vulnerable-app" 의 도커 이미지를 참고하여 실행시키고, 도커 옵션으로 외부 포트번호 44228, 내부포트 8080 으로 해당 서비스를 실행시킨다는 의미다. (해당 도커 이미지를 실행하는 경우 자동으로 8080 포트로 실행된다!)

CVE-2021-44228 실습 네트워크 환경구성

※ 로컬이 아닌 외부에서 테스팅을 하는 경우 외부포트-내부포트 포워딩을 따로 해줘야한다. (당연한 사실이겠지만...)
본인은 외부에서 해당 실습을 진행하기 위해 포트포워딩을 진행하였다.

공유기 포트포워딩 설정

포트포워딩 설정과 해당 서버가 실행 중일 때 실습 페이지 주소 (본인서버:44228) 로 접근하는 경우 

Log4shell 실습 도커이미지에 대한 클라이언트 접근화면

Whitelabel 페이지 확인이 가능하며, 도커가 실행 중인 서버에서 다음과 같은 로그가 확인가능하다.

2023-12-** **:**:**.**  WARN 1 --- [nio-8080-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingRequestHeaderException: Required request header 'X-Api-Version' for method parameter type String is not present]

공격자 환경세팅

공격대상 서버의 환경세팅이 끝났다면 공격자 서버 -LDAP 및 HTTP 서버- 를 구축해야한다.

공격자 서버에서 자바 클래스 파일에 대한 참조가 되어야하므로 공격자 서버 내 자바를 설치해야한다.

https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html

해당 자바 버전은 8u20 이며, 공식 홈페이지에서 로그인 후 다운로드 받아 사용하면 된다.
로그인해서 다운로드 받기가 번거로우므로 파일 링크를 올려둔다.

 

jdk-8u20-linux-x64.tar.gz

 

drive.google.com

해당 파일을 다운받고, 압축해제 후 자바 사용을 위한 폴더 변경 및 환경변수 처리가 필요하다.
+ 본인은 파일 다운로드 이후 SCP 를 이용하여 해당 파일을 서버로 옮겼다.

# 자바 파일 다운로드 (JDK 8u20 Linux x64 Version. → JNDI Exploit 1.2.jar)
##  본인은 공격 디바이스의 자바 호환성 문제로 JNDI Exploit 1.0 을 사용함에 따라 openJdk 11 버전을 사용하였음. (OpenJDK Build17)
##  자바 파일은 둘 중 하나만 다운로드 받는다.

### 자바 파일 다운로드 (JDK 8u20 Linux x64 Version. )
kai_ht@localhost:~$ wget 'https://drive.google.com/u/0/uc?id=1ecgL691ks_kUxnK_GkX93Qp4fWDsAuYJ&export=download&confirm=t&uuid=b91bb54d-24a2-4eab-b876-29fb940ea92e&at=AB6BwCBVUyS4zqAqWwm6GwIG9HZJ:1702964912628' -O jdk-8u20-linux-x64.tar.gz

### 자바 파일 다운로드 (openJDK 11 Version - Linux aarch64)
kai_ht@localhost:~$ wget https://aka.ms/download-jdk/microsoft-jdk-11-linux-aarch64.tar.gz


# 다운로드 자바파일 압축해제

## 8u20 (Linux x64)
kai_ht@localhost
:~$  tar xvzf jdk-8u20-linux-x64.tar.gz
# openJdk 11 (aarch64)

kai_ht@localhost:~$  tar xvzf microsoft-jdk-11-linux-aarch64.tar.gz

# 가독성을 위한 압축해제 디렉터리 명 변경
## 8u20 (Linux x64)

kai_ht@localhost:~$  mv jdk1.8.0_20/ jdk-1.8
## openJdk 11 (aarch64)
kai_ht@localhost:~$  mv jdk-11.0.21+0/ jdk-11.0

# 자바 프로그램 디렉터리, 시스템 디렉터리로 이동
## 8u20 (Linux x64)

kai_ht@localhost:~$ sudo mv jdk-1.8/ /usr/local/
## openJdk 11 (aarch64)

kai_ht@localhost:~$ sudo mv jdk-11.0/ /usr/local/

# 자바 실행여부 확인
## 8u20 (Linux x64)
kai_ht@localhost:~$ cd /usr/local/jdk-1.8/bin
## openJdk 11 (aarch64)
kai_ht@localhost:~$
cd /usr/local/jdk-11.0/bin

kai_ht@localhost:~$ ./java -version

# 자바 환경변수 등록
kai_ht@localhost:~sudo vi /etc/profile
## 맨 마지막 줄에 추가 및 저장

# 자바 환경변수 등록
## (jdk-8u20)

export JAVA_HOME=/usr/local/jdk-1.8
export JRE_HOME=/usr/local/jdk-1.8/jre
export PATH=$PATH:/usr/local/jdk-1.8/bin
## (openJdk-11)
export JAVA_HOME=/usr/local/jdk-11.0
export JRE_HOME=/usr/local/jdk-11.0/jre
export PATH=$PATH:/usr/local/jdk-11.0/bin

# /etc/profile 변동사항 적용

kai_ht@localhost:~source /etc/profile

# 자바 실행 검증
kai_ht@localhost:~java -version

java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)

자바 실행도 완료되었으면 환경 세팅은 모두 끝난다.
공격에 JNDI Exploit 을 이용할 것이며, 해당 파일은 다음 명령어로 다운받을 수 있다.

# JNDI Exploit Code Download
## JNDI Exploit 코드를 이용하여 LDAP 서버를 이용하는 것으로 보인다.
## 해당 파일의 경우 Github 에 업로드 되어있었으나, 파일이 삭제되어 아카이브 페이지에서 다운로드를 진행하였다.
kai_ht@localhost:~$ wget 'http://web.archive.org/web/20211211031401/https://objects.githubusercontent.com/github-production-release-asset-2e65be/314785055/a6f05000-9563-11eb-9a61-aa85eca37c76?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211211%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211211T031401Z&X-Amz-Expires=300&X-Amz-Signature=140e57e1827c6f42275aa5cb706fdff6dc6a02f69ef41e73769ea749db582ce0&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=314785055&response-content-disposition=attachment%3B%20filename%3DJNDIExploit.v1.2.zip&response-content-type=application%2Foctet-stream' -O JNDIExploit.v1.2.zip


# JNDI Exploit (1.2) 압축파일 압축해제
kai_ht@localhost:~$ unzip JNDIExploit.v1.2.zip
Archive:  JNDIExploit.v1.2.zip
  inflating: JNDIExploit-1.2-SNAPSHOT.jar
   creating: lib/
  inflating: lib/commons-beanutils-1.8.2.jar
  inflating: lib/commons-beanutils-1.9.2.jar

kai_ht@localhost:~$ 

# JNDI Exploit 1.2 버전의 경우 자바 버전과 본인 자바 버전이 동일하지 않아 다음 대체 코드를 사용하였다.
## JNDI-Injection-Exploit v1.0

kai_ht@localhost:~wget 'https://github.com/welk1n/JNDI-Injection-Exploit/releases/download/v1.0/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar'

압축해제까지 하고 나면 Log4shell 의 실습환경 세팅이 완료된다.


2. kozmer - log4shell-vulnerable-app

작성 예정


참고 :

더보기
 

Log4j 취약점(CVE-2021-44228) Log4Shell 발생 원인 및 실습

1. 기초 지식 1.1 Directory Service(DS) 여기서 말하는 Directory는 데이터, 프린터, 컴퓨터, 사용자 정보 등 데이터가 저장된 용기라고 보면 된다. Directory Service는 네트워크 서비스의 일종으로 네트워크

lactea.kr

 

GitHub: Let’s build from here

GitHub is where over 100 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and fea...

github.com

 

GitHub - kozmer/log4j-shell-poc: A Proof-Of-Concept for the CVE-2021-44228 vulnerability.

A Proof-Of-Concept for the CVE-2021-44228 vulnerability. - GitHub - kozmer/log4j-shell-poc: A Proof-Of-Concept for the CVE-2021-44228 vulnerability.

github.com

 

리눅스에서 jdk 설치(오라클, tar.gz)

오라클에서 제공하는 jdk를 설치할려고 한다. 이번에는 tar.gz 형태의 jdk를 리눅스 서버에 설치해보자. tar.gz 는 압축파일이라 압축을 풀고 JAVA_HOME, JRE_HOME 등의 환경변수를 잡아주고, 경우에 따라

web-obj.tistory.com

 

[POC] CVE-2021-44228(log4shell) 취약점 POC 실습 (1)

본 글은 아래의 링크를 참고하여 log4j 취약점 POC를 실습해보기 위해 필요한 내용들을 정리한 글이다.본 글을 통해 log4j 취약점이 얼마나 간단하고, 위험한 취약점인지 체험해보길바란다.log4j (Log4

velog.io

 

log4j (Log4Shell) POC(Proof-Of-Concept) 재현

- log4j 제로데이 보안 취약점 Apache Log4j 보안 업데이트 권고 (Update. 21-12-22 13:40) https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=36389 * 해킹 될수 있는 log4j 버전 - CVE-2021-44228 (2021-11-26) : 2.0 ~

codens.info

 

Apache Log4j 2.x 취약점 PoC

#195 1. Apache Log4j 2.x 취약점[CVE-2021-4428] Apache Log4j 2.x 취약점[CVE-2021-44228] #193 1. Log4j 2.x 취약점 - 취약점 : CVE-2021-44228 - 취약한 버전 : 2.0-beta9 ~ 2.14.1 모든 버전(Log4j 2.12.2 제외) CVE - CVE-2021-44228 Apache Log

goldsony.tistory.com

'CVE Analyze > CVE-2021-44228' 카테고리의 다른 글

CVE-2021-44228  (1) 2023.12.12