mirror of
				https://github.com/sqlmapproject/sqlmap.git
				synced 2025-10-31 07:57:47 +03:00 
			
		
		
		
	added support for comma separated list of files for --file-read - fixes issue #223
This commit is contained in:
		
							parent
							
								
									8d9aa2c384
								
							
						
					
					
						commit
						326ed33f31
					
				|  | @ -552,7 +552,7 @@ class Dump(object): | |||
|         self.string(query, queryRes) | ||||
| 
 | ||||
|     def rFile(self, filePath, fileData): | ||||
|         self.string("%s file saved to" % filePath, fileData, sort=False) | ||||
|         self.lister("files saved to", fileData, sort=False) | ||||
| 
 | ||||
|     def registerValue(self, registerData): | ||||
|         self.string("Registry key value data", registerData, sort=False) | ||||
|  |  | |||
|  | @ -179,64 +179,68 @@ class Filesystem: | |||
|         errMsg += "into the specific DBMS plugin" | ||||
|         raise SqlmapUndefinedMethod, errMsg | ||||
| 
 | ||||
|     def readFile(self, remoteFile): | ||||
|     def readFile(self, remoteFiles): | ||||
|         fileContent = None | ||||
|         remoteFilePaths = [] | ||||
| 
 | ||||
|         self.checkDbmsOs() | ||||
| 
 | ||||
|         kb.fileReadMode = True | ||||
|         for remoteFile in remoteFiles.split(","): | ||||
|             kb.fileReadMode = True | ||||
| 
 | ||||
|         if conf.direct or isTechniqueAvailable(PAYLOAD.TECHNIQUE.STACKED): | ||||
|             if isTechniqueAvailable(PAYLOAD.TECHNIQUE.STACKED): | ||||
|                 debugMsg = "going to read the file with stacked query SQL " | ||||
|                 debugMsg += "injection technique" | ||||
|             if conf.direct or isTechniqueAvailable(PAYLOAD.TECHNIQUE.STACKED): | ||||
|                 if isTechniqueAvailable(PAYLOAD.TECHNIQUE.STACKED): | ||||
|                     debugMsg = "going to read the file with stacked query SQL " | ||||
|                     debugMsg += "injection technique" | ||||
|                     logger.debug(debugMsg) | ||||
| 
 | ||||
|                 fileContent = self.stackedReadFile(remoteFile) | ||||
|             elif Backend.isDbms(DBMS.MYSQL): | ||||
|                 debugMsg = "going to read the file with a non-stacked query " | ||||
|                 debugMsg += "SQL injection technique" | ||||
|                 logger.debug(debugMsg) | ||||
| 
 | ||||
|             fileContent = self.stackedReadFile(remoteFile) | ||||
|         elif Backend.isDbms(DBMS.MYSQL): | ||||
|             debugMsg = "going to read the file with a non-stacked query " | ||||
|             debugMsg += "SQL injection technique" | ||||
|             logger.debug(debugMsg) | ||||
|                 fileContent = self.nonStackedReadFile(remoteFile) | ||||
|             else: | ||||
|                 errMsg = "none of the SQL injection techniques detected can " | ||||
|                 errMsg += "be used to read files from the underlying file " | ||||
|                 errMsg += "system of the back-end %s server" % Backend.getDbms() | ||||
|                 logger.error(errMsg) | ||||
| 
 | ||||
|             fileContent = self.nonStackedReadFile(remoteFile) | ||||
|         else: | ||||
|             errMsg = "none of the SQL injection techniques detected can " | ||||
|             errMsg += "be used to read files from the underlying file " | ||||
|             errMsg += "system of the back-end %s server" % Backend.getDbms() | ||||
|             logger.error(errMsg) | ||||
|                 return None | ||||
| 
 | ||||
|             return None | ||||
|             kb.fileReadMode = False | ||||
| 
 | ||||
|         kb.fileReadMode = False | ||||
|             if fileContent in (None, "") and not Backend.isDbms(DBMS.PGSQL): | ||||
|                 self.cleanup(onlyFileTbl=True) | ||||
| 
 | ||||
|         if fileContent in (None, "") and not Backend.isDbms(DBMS.PGSQL): | ||||
|             self.cleanup(onlyFileTbl=True) | ||||
|                 return | ||||
|             elif isListLike(fileContent): | ||||
|                 newFileContent = "" | ||||
| 
 | ||||
|             return | ||||
|         elif isListLike(fileContent): | ||||
|             newFileContent = "" | ||||
|                 for chunk in fileContent: | ||||
|                     if isListLike(chunk): | ||||
|                         if len(chunk) > 0: | ||||
|                             chunk = chunk[0] | ||||
|                         else: | ||||
|                             chunk = "" | ||||
| 
 | ||||
|             for chunk in fileContent: | ||||
|                 if isListLike(chunk): | ||||
|                     if len(chunk) > 0: | ||||
|                         chunk = chunk[0] | ||||
|                     else: | ||||
|                         chunk = "" | ||||
|                     if chunk: | ||||
|                         newFileContent += chunk | ||||
| 
 | ||||
|                 if chunk: | ||||
|                     newFileContent += chunk | ||||
|                 fileContent = newFileContent | ||||
| 
 | ||||
|             fileContent = newFileContent | ||||
|             fileContent = decodeHexValue(fileContent) | ||||
|             remoteFilePath = dataToOutFile(fileContent) | ||||
| 
 | ||||
|         fileContent = decodeHexValue(fileContent) | ||||
|         remoteFilePath = dataToOutFile(fileContent) | ||||
|             if not Backend.isDbms(DBMS.PGSQL): | ||||
|                 self.cleanup(onlyFileTbl=True) | ||||
| 
 | ||||
|         if not Backend.isDbms(DBMS.PGSQL): | ||||
|             self.cleanup(onlyFileTbl=True) | ||||
|             self.askCheckReadFile(remoteFilePath, remoteFile) | ||||
| 
 | ||||
|         self.askCheckReadFile(remoteFilePath, remoteFile) | ||||
|             remoteFilePaths.append(remoteFilePath) | ||||
| 
 | ||||
|         return remoteFilePath | ||||
|         return remoteFilePaths | ||||
| 
 | ||||
|     def writeFile(self, localFile, remoteFile, fileType=None): | ||||
|         self.checkDbmsOs() | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user