mirror of https://github.com/MISP/mail_to_misp
new: Support email forwarding
parent
beace3732a
commit
eb9b7d907d
19
fake_smtp.py
19
fake_smtp.py
|
@ -1,5 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
import sys
|
|
||||||
import ssl
|
import ssl
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import importlib
|
import importlib
|
||||||
|
@ -9,11 +8,11 @@ from aiosmtpd.smtp import SMTP
|
||||||
import subprocess
|
import subprocess
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
|
|
||||||
|
def get_context():
|
||||||
key_path = Path('certs', 'key.pem')
|
key_path = Path('certs', 'key.pem')
|
||||||
cert_path = Path('certs', 'cert.pem')
|
cert_path = Path('certs', 'cert.pem')
|
||||||
|
|
||||||
|
|
||||||
def get_context():
|
|
||||||
if not cert_path.exists() and not key_path.exists():
|
if not cert_path.exists() and not key_path.exists():
|
||||||
subprocess.call(f'openssl req -x509 -newkey rsa:4096 -keyout {key_path.as_posix()} -out {cert_path.as_posix()} -days 365 -nodes -subj "/CN=localhost"', shell=True)
|
subprocess.call(f'openssl req -x509 -newkey rsa:4096 -keyout {key_path.as_posix()} -out {cert_path.as_posix()} -days 365 -nodes -subj "/CN=localhost"', shell=True)
|
||||||
|
|
||||||
|
@ -39,6 +38,9 @@ class CustomSMTPHandler:
|
||||||
print(f'Message addressed from: {envelope.mail_from}')
|
print(f'Message addressed from: {envelope.mail_from}')
|
||||||
print(f'Message addressed to : {envelope.rcpt_tos}')
|
print(f'Message addressed to : {envelope.rcpt_tos}')
|
||||||
print(f'Message length : {len(envelope.content)}')
|
print(f'Message length : {len(envelope.content)}')
|
||||||
|
if email_forward in envelope.rcpt_tos:
|
||||||
|
p = run([binpath_forward, "-"], stdout=PIPE, input=envelope.content)
|
||||||
|
else:
|
||||||
p = run([binpath, "-"], stdout=PIPE, input=envelope.content)
|
p = run([binpath, "-"], stdout=PIPE, input=envelope.content)
|
||||||
print(p)
|
print(p)
|
||||||
return '250 OK'
|
return '250 OK'
|
||||||
|
@ -47,25 +49,26 @@ class CustomSMTPHandler:
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
parser = argparse.ArgumentParser(description='Launch a fake SMTP server to push SPAMs to a MISP instance')
|
parser = argparse.ArgumentParser(description='Launch a fake SMTP server to push SPAMs to a MISP instance')
|
||||||
parser.add_argument("--path", default='./mail_to_misp.py', help="Path to the mail_to_misp.py script.")
|
parser.add_argument("--path", default='./mail_to_misp.py', help="Path to the mail_to_misp.py script.")
|
||||||
|
parser.add_argument("--path_forward", default='./mail_to_misp.py', help="Path to the mail_to_misp.py script.")
|
||||||
|
parser.add_argument("--email_forward", default='mail2misp@example.com', help="Path to the mail_to_misp.py script.")
|
||||||
parser.add_argument("--host", default='127.0.0.1', help="IP to attach the SMTP server to.")
|
parser.add_argument("--host", default='127.0.0.1', help="IP to attach the SMTP server to.")
|
||||||
parser.add_argument("--port", default='2525', help="Port of the SMTP server")
|
parser.add_argument("--port", default='2525', help="Port of the SMTP server")
|
||||||
parser.add_argument("--ssl", action='store_true', help="Pure SMTPs.")
|
parser.add_argument("--ssl", action='store_true', help="Pure SMTPs.")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if not args.path and not args.host and not args.port and not args.ssl:
|
|
||||||
configmodule = Path(__file__).as_posix().replace('.py', '_config')
|
configmodule = Path(__file__).as_posix().replace('.py', '_config')
|
||||||
if Path(f'{configmodule}.py').exists():
|
if Path(f'{configmodule}.py').exists():
|
||||||
config = importlib.import_module(configmodule)
|
config = importlib.import_module(configmodule)
|
||||||
else:
|
|
||||||
print("Couldn't locate config file {0}".format(f'{configmodule}.py'))
|
|
||||||
sys.exit(-1)
|
|
||||||
|
|
||||||
binpath = config.binpath
|
binpath = config.binpath
|
||||||
|
binpath_forward = config.binpath_forward
|
||||||
|
email_forward = config.email_forward
|
||||||
smtp_addr = config.smtp_addr
|
smtp_addr = config.smtp_addr
|
||||||
smtp_port = config.smtp_port
|
smtp_port = config.smtp_port
|
||||||
smtps = config.ssl
|
smtps = config.ssl
|
||||||
else:
|
else:
|
||||||
binpath = args.path
|
binpath = args.path
|
||||||
|
binpath_forward = args.path_forward
|
||||||
|
email_forward = args.email_forward
|
||||||
smtp_addr = args.host
|
smtp_addr = args.host
|
||||||
smtp_port = args.port
|
smtp_port = args.port
|
||||||
smtps = args.ssl
|
smtps = args.ssl
|
||||||
|
|
|
@ -2,7 +2,10 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
binpath = Path(__file__).cwd() / 'mail_to_misp.py'
|
binpath = Path(__file__).parent / 'mail_to_misp.py'
|
||||||
|
binpath_forward = Path(__file__).parent / 'mail_to_misp_forward.py'
|
||||||
|
|
||||||
|
forward_email = 'mail2misp@example.com'
|
||||||
|
|
||||||
smtp_addr = '127.0.0.1'
|
smtp_addr = '127.0.0.1'
|
||||||
smtp_port = 2525
|
smtp_port = 2525
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
mail_to_misp.py
|
Loading…
Reference in New Issue