Skip to content

Instantly share code, notes, and snippets.

@y0ug
Created September 21, 2014 08:36
Show Gist options
  • Save y0ug/cf476ee4ae47aa94013c to your computer and use it in GitHub Desktop.
Save y0ug/cf476ee4ae47aa94013c to your computer and use it in GitHub Desktop.
Impacket SMB server
#!/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()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment