1- #import fnmatch
21import re
32
43try :
@@ -18,7 +17,7 @@ def __init__(self, config, display, lock):
1817 self .description = "connect to remote SMB Share service and search for interesting files"
1918
2019 self .requirements = []
21- self .triggers = ["newServicen_smb " , "newPort_tcp_445" , "newPort_tcp_139" ]
20+ self .triggers = ["newService_smb " , "newPort_tcp_445" , "newPort_tcp_139" ]
2221 self .types = ["filesearch" ]
2322
2423 self .safeLevel = 4
@@ -30,6 +29,39 @@ def getTargets(self):
3029 self .targets = kb .get ('port/tcp/445' , 'port/tcp/139' )
3130 self .targets2 = kb .get ('service/smb' )
3231
32+ def searchDir (self , conn , share , path , depth = 0 ):
33+ if depth > 5 :
34+ return
35+
36+ try :
37+ # list the files on each share (recursivity?)
38+ print "----------" + share + "---" + path
39+ names = conn .listPath (share , path , timeout = 30 )
40+
41+ for name in names :
42+ if name .isDirectory :
43+ if name .filename not in [u'.' , u'..' ]:
44+ self .searchDir (conn , share , path + name .filename + '/' , depth + 1 )
45+ else :
46+ for pattern in self .filepatterns :
47+ try :
48+ re .compile (pattern )
49+ result = re .match (pattern , name .filename )
50+ if (result ):
51+ outfile = self .config ["proofsDir" ] + self .shortName + "_" + host + "_" + share + "_" + name .file .name .replace ("/" , "-" ) + "_" + Utils .getRandStr (10 )
52+
53+ # TODO
54+ #conn.retrieveFile(share, path + name.filename, loacl_file)
55+ #Utils.writeFile(result, outfile)
56+ self .display .debug ("_____ Share[" + share + "] =" + path + name .filename )
57+ except re .error :
58+ pass
59+ #self.display.debug("Invalid File Pattern --> %s <--" % pattern)
60+ except :
61+ self .display .error ('### can not access the resource' )
62+
63+ return
64+
3365 def searchTarget (self , host , username , password , domainname ):
3466 success = False
3567
@@ -55,23 +87,24 @@ def searchTarget(self, host, username, password, domainname):
5587 self .display .debug ('Shares on: ' + host )
5688 for i in range (len (Response )): # iterate through the list of shares
5789 self .display .debug (" Share[" + str (i ) + "] =" + str (Response [i ].name ))
58- try :
59- # list the files on each share (recursivity?)
60- Response2 = conn .listPath (Response [i ].name , '/' , timeout = 30 )
61- self .display .debug (' Files on: ' + host + '/' + " Share[" + str (i ) + "] =" + str (Response [i ].name ))
62- for i in range (len (Response2 )):
63- for pattern in self .filepatterns :
64- try :
65- re .compile (pattern )
66- result = re .match (pattern , Response2 [i ].filename )
67- if (result ):
68- # TODO
69- # host.download(fpath, self.config["proofsDir"] + ip + fpath.replace("/", "_"))
70- self .display .debug (" File[" + str (i ) + "] =" + str (Response2 [i ].filename ))
71- except re .error :
72- self .display .debug ("Invalid File Pattern --> %s <--" % pattern )
73- except :
74- self .display .error ('### can not access the resource' )
90+ self .searchDir (conn , Response [i ].name , '/' )
91+ # try:
92+ # # list the files on each share (recursivity?)
93+ # Response2 = conn.listPath(Response[i].name, '/', timeout=30)
94+ # self.display.debug(' Files on: ' + host + '/' + " Share[" + str(i) + "] =" + str(Response[i].name))
95+ # for i in range(len(Response2)):
96+ # for pattern in self.filepatterns:
97+ # try:
98+ # re.compile(pattern)
99+ # result = re.match(pattern, Response2[i].filename)
100+ # if (result):
101+ # # TODO
102+ # # host.download(fpath, self.config["proofsDir"] + ip + fpath.replace("/", "_"))
103+ # self.display.debug(" File[" + str(i) + "] =" + str(Response2[i].filename))
104+ # except re.error:
105+ # self.display.debug("Invalid File Pattern --> %s <--" % pattern)
106+ # except:
107+ # self.display.error('### can not access the resource')
75108 except :
76109 self .display .error ('### can not list shares' )
77110 except :
0 commit comments