mirror of
https://github.com/samba-team/samba.git
synced 2025-11-14 12:23:52 +03:00
158 lines
3.4 KiB
Python
Executable File
158 lines
3.4 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
import dcerpc
|
|
from optparse import OptionParser
|
|
|
|
def test_Connect(handle):
|
|
|
|
print 'testing samr_Connect'
|
|
|
|
r = {}
|
|
r['system_name'] = 0;
|
|
r['access_mask'] = 0x02000000
|
|
|
|
result = dcerpc.samr_Connect(pipe, r)
|
|
dcerpc.samr_Close(pipe, result)
|
|
|
|
print 'testing samr_Connect2'
|
|
|
|
r = {}
|
|
r['system_name'] = None
|
|
r['access_mask'] = 0x02000000
|
|
|
|
result = dcerpc.samr_Connect2(pipe, r)
|
|
dcerpc.samr_Close(pipe, result)
|
|
|
|
print 'testing samr_Connect3'
|
|
|
|
r = {}
|
|
r['system_name'] = None
|
|
r['unknown'] = 0
|
|
r['access_mask'] = 0x02000000
|
|
|
|
result = dcerpc.samr_Connect3(pipe, r)
|
|
dcerpc.samr_Close(pipe, result)
|
|
|
|
print 'testing samr_Connect4'
|
|
|
|
r = {}
|
|
r['system_name'] = None
|
|
r['unknown'] = 0
|
|
r['access_mask'] = 0x02000000
|
|
|
|
result = dcerpc.samr_Connect4(pipe, r)
|
|
dcerpc.samr_Close(pipe, result)
|
|
|
|
print 'testing samr_Connect5'
|
|
|
|
r = {}
|
|
r['system_name'] = None
|
|
r['access_mask'] = 0x02000000
|
|
r['level'] = 1
|
|
r['info'] = {}
|
|
r['info']['info1'] = {}
|
|
r['info']['info1']['unknown1'] = 0
|
|
r['info']['info1']['unknown2'] = 0
|
|
|
|
result = dcerpc.samr_Connect5(pipe, r)
|
|
|
|
return result['handle']
|
|
|
|
def test_QuerySecurity(pipe, handle):
|
|
|
|
print 'testing samr_QuerySecurity'
|
|
|
|
r = {}
|
|
r['handle'] = handle
|
|
r['sec_info'] = 7
|
|
|
|
result = dcerpc.samr_QuerySecurity(pipe, r)
|
|
|
|
s = {}
|
|
s['handle'] = handle
|
|
s['sec_info'] = 7
|
|
s['sdbuf'] = result['sdbuf']
|
|
|
|
result = dcerpc.samr_SetSecurity(pipe, s)
|
|
|
|
result = dcerpc.samr_QuerySecurity(pipe, r)
|
|
|
|
def test_LookupDomain(pipe, handle, domain):
|
|
|
|
print 'testing samr_LookupDomain'
|
|
|
|
r = {}
|
|
r['handle'] = handle
|
|
r['domain'] = {}
|
|
r['domain']['name_len'] = 0
|
|
r['domain']['name_size'] = 0
|
|
r['domain']['name'] = domain
|
|
|
|
result = dcerpc.samr_LookupDomain(pipe, r)
|
|
|
|
r['domain']['name'] = 'xxNODOMAINxx'
|
|
|
|
try:
|
|
result = dcerpc.samr_LookupDomain(pipe, r)
|
|
except dcerpc.NTSTATUS, arg:
|
|
if arg[0] != 0xc00000df:
|
|
raise dcerpc.NTSTATUS(arg)
|
|
|
|
def test_EnumDomains(pipe, handle):
|
|
|
|
print 'testing samr_EnumDomains'
|
|
|
|
r = {}
|
|
r['handle'] = handle
|
|
r['resume_handle'] = 0
|
|
r['buf_size'] = -1
|
|
|
|
result = dcerpc.samr_EnumDomains(pipe, r)
|
|
|
|
for domain in result['sam']['entries']:
|
|
test_LookupDomain(pipe, handle, domain['name']['name'])
|
|
|
|
# Parse command line
|
|
|
|
parser = OptionParser()
|
|
|
|
parser.add_option("-b", "--binding", action="store", type="string",
|
|
dest="binding")
|
|
|
|
parser.add_option("-d", "--domain", action="store", type="string",
|
|
dest="domain")
|
|
|
|
parser.add_option("-u", "--username", action="store", type="string",
|
|
dest="username")
|
|
|
|
parser.add_option("-p", "--password", action="store", type="string",
|
|
dest="password")
|
|
|
|
(options, args) = parser.parse_args()
|
|
|
|
if not options.binding:
|
|
parser.error('You must supply a binding string')
|
|
|
|
if not options.username or not options.password or not options.domain:
|
|
parser.error('You must supply a domain, username and password')
|
|
|
|
|
|
binding = options.binding
|
|
domain = options.domain
|
|
username = options.username
|
|
password = options.password
|
|
|
|
print 'Connecting...'
|
|
|
|
pipe = dcerpc.pipe_connect(binding,
|
|
dcerpc.DCERPC_SAMR_UUID, dcerpc.DCERPC_SAMR_VERSION,
|
|
domain, username, password)
|
|
|
|
handle = test_Connect(pipe)
|
|
|
|
test_QuerySecurity(pipe, handle)
|
|
|
|
test_EnumDomains(pipe, handle)
|
|
|
|
print 'Done'
|