
CVE-2021-44228(Log4shell) 취약 장비를 스캔하는 Python3 스크립트입니다.

이 Python3 스크립트는 Log4j2 Java 로깅 라이브러리에서 발견된 매우 치명적인 취약점인 Log4Shell이라고도 알려진 CVE-2021-44228에 취약한 서버를 찾으려고 시도합니다.
취약한 대상을 확인하고 검증하기 위해 외부 DNS 로그 서버에 의존하지 않습니다. 시작되면 모든 인터페이스와 포트 55555(.env 파일 또는 환경 변수를 사용해 변경 가능)에서 수신 대기하는 새 스레드가 생성됩니다. 이 스레드는 취약한 머신의 콜백 연결을 기다렸다가 Python Queue를 통해 메인 스레드에 알립니다. 수신 IP:포트 쌍으로 들어오는 연결을 허용하려면 방화벽 규칙(및/또는 포트 전달 규칙)을 추가해야 할 수도 있다는 점을 명심하세요.
취약점을 트리거할 가능성을 높이기 위해 이 도구는 URL(또는 URL 목록)을 인수로 받아 제공된 URL에 포함된 모든 양식을 찾습니다. 그런 다음 발견된 각 양식의 각 매개변수를 사용해 취약점을 악용하려고 시도합니다(GET 및 POST 요청). 이것이 기본 동작이지만 --skip-forms 옵션을 사용해 비활성화할 수 있습니다(이 경우 1개의 요청만 수행되며 페이로드는 몇 개의 헤더 필드에 배치됩니다).
또한 타깃이 취약한지 테스트하기 위해 다음의 사전 정의된 헤더가 사용됩니다:
명령줄 옵션을 통해 사용자 정의 헤더를 추가할 수 있습니다.
전체 사용법 설명은 아래 섹션을 참조하세요.
python3 log4j_checker.py -h
usage: log4j_checker.py [-h] [--url URL] [--headers HEADERS [HEADERS ...]] [--urls URLS] [--skip-forms]
optional arguments:
-h, --help show this help message and exit
--url URL Single url you want to test (valid url is http(s)://host:[port]/[path])
--headers HEADERS [HEADERS ...]
Custom headers you want to try (space separated)
--urls URLS A file containing 1 url per line
--skip-forms Skip forms check (only perform 1 request)
이 도구는 자신의 시스템을 테스트하기 위해 사용해야 합니다.
중요 참고 사항: 결과가 음성이라 할지라도 이 도구는 서버가 취약하지 않다는 것을 보장하지 않습니다. 애플리케이션이 악성 페이로드를 다른 곳에 기록할 수 있고 모든 경우를 다룰 수 없기 때문입니다. 따라서 취약한지 확인하는 가장 좋은 방법은 전체 파일 시스템에서 취약한 패키지(예: log4j-core*.jar 및 log4j-api*.jar)를 찾는 것입니다.