|
#!/usr/bin/env python |
|
# -*- coding: utf-8 -*- |
|
from impacket import smbserver |
|
from impacket.smbconnection import * |
|
import threading |
|
import ConfigParser |
|
|
|
class ThreadedSMBServer(threading.Thread): |
|
""" |
|
Threaded SMB server that can be spun up locally. |
|
|
|
Hosts the files in /tmp/shared/ |
|
""" |
|
|
|
def __init__(self): |
|
threading.Thread.__init__(self) |
|
|
|
def run(self): |
|
# Here we write a mini config for the server |
|
smbConfig = ConfigParser.ConfigParser() |
|
smbConfig.add_section('global') |
|
smbConfig.set('global','server_name','SERVICE') |
|
smbConfig.set('global','server_os','UNIX') |
|
smbConfig.set('global','server_domain','WORKGROUP') |
|
smbConfig.set('global','log_file','/tmp/smb.log') |
|
smbConfig.set('global','credentials_file','') |
|
|
|
# Let's add a dummy share, /tmp/shared/, as HOST\SYSTEM\ |
|
smbConfig.add_section("SYSTEM") |
|
smbConfig.set("SYSTEM",'comment','system share') |
|
smbConfig.set("SYSTEM",'read only','yes') |
|
smbConfig.set("SYSTEM",'share type','0') |
|
smbConfig.set("SYSTEM",'path',"/tmp/shared/") |
|
|
|
# IPC always needed |
|
smbConfig.add_section('IPC$') |
|
smbConfig.set('IPC$','comment','') |
|
smbConfig.set('IPC$','read only','yes') |
|
smbConfig.set('IPC$','share type','3') |
|
smbConfig.set('IPC$','path') |
|
|
|
self.smb = smbserver.SMBSERVER(('0.0.0.0',445), config_parser = smbConfig) |
|
|
|
print ' [*] setting up SMB server...' |
|
self.smb.processConfigFile() |
|
try: |
|
self.smb.serve_forever() |
|
except: |
|
pass |
|
|
|
def shutdown(self): |
|
print '\n [*] killing SMB server...' |
|
self.smb.shutdown() |
|
self.smb.socket.close() |
|
self.smb.server_close() |
|
self._Thread__stop() |
|
|
|
if __name__ == "__main__": |
|
server = ThreadedSMBServer() |
|
server.run() |