
https://github.com/kozmer/log4j-shell-poc에서 파생된 Log4Shell 개념 증명(Proof-Of-Concept)
이 저장소는 CVE-2021-44228 취약점에 대한 개념 증명입니다.
이 저장소는 이 저장소에서 파생되었습니다.
이 저장소에서는 취약한 애플리케이션의 예와 이를 익스플로잇하는 방법에 대한 데모를 만들었습니다.
저는 이 취약점의 생성을 자동화하기 위해 상위 파이썬 스크립트를 수정했습니다.
이 저장소에는 쉽게 사용할 수 있도록 두 개의 Dockerfile이 있습니다.
이 Docker 이미지에서는 제 구글 드라이브에서 자바 jdk-8u20을 다운로드합니다. 오라클 계정이 필요하기 때문입니다.
이를 신뢰하지 않는다면, Dockerfile에서 다운로드 파일을 수정하고 여기에서 jdk를 다운로드할 수 있습니다. (Linux용 Java SE Development Kit 8u20 버전을 다운로드해야 합니다.)
이 Docker 이미지는 kozmer가 제공한 스크립트의 수정된 버전을 실행하며 다음을 수행합니다.
기본적으로 사용되는 포트는 JNDI LDAP용 1389, SimpleHttpServer용 8000, 리버스 셸용 **9001**입니다.
이것을 컴파일하고 실행하려면 다음을 실행하세요:
sudo docker build -t log4j-ldap .
sudo docker run -d -p 8000:8000 -p 1389:1389 log4j-ldap
docker logs <containerID>를 사용하여 애플리케이션 로그를 확인하고 취약한 애플리케이션에 제공해야 하는 올바른 입력을 검색하세요.
이 PoC에서는 Docker에서 사용하는 기본 IP(172.17.0.1/24)를 고려했습니다. 시나리오에 맞게 ./Docker-Ldap/run.sh 스크립트에서 변경할 수 있습니다.
이 Docker 이미지에서는 패치되지 않은 Log4J 2 버전을 사용하는 취약한 웹 애플리케이션을 실행하며, 이를 포트 8080에 노출합니다.
앱 소스는 ./Docker-Vuln에서도 확인할 수 있으며, kozmer의 크레딧입니다.
이것을 컴파일하고 실행하려면 다음을 실행하세요:
sudo docker build -t log4j-ldap .
sudo docker run -d -p 8000:8000 -p 1389:1389 log4j-ldap
사용자 이름이 주입 가능한 필드입니다!
리버스 셸을 수신하려면 포트 **9001**에 대한 netcat 리스너를 생성해야 합니다.
nc -lvnp 9001
저장소를 다운로드한 후, docker 엔진이 설치되어 있고 다른 docker 이미지가 실행 중이 아닌지 확인하세요.
config.sh 스크립트를 실행하여 이미지를 빌드하고 시작하세요. (이 스크립트는 실행 시 root 권한을 사용하므로 필요에 따라 수정할 수 있습니다.)9001**에서 netcat 리스너를 엽니다.localhost:8080으로 이동하세요.docker logs <containerID>)