mirror of
				https://github.com/sqlmapproject/sqlmap.git
				synced 2025-10-31 16:07:55 +03:00 
			
		
		
		
	Minor adjustment on private request
This commit is contained in:
		
							parent
							
								
									fced29a242
								
							
						
					
					
						commit
						84bc2640d1
					
				|  | @ -191,7 +191,7 @@ class Agent(object): | |||
| 
 | ||||
|             if kb.postHint == POST_HINT.JSON and not isNumber(newValue) and '"%s"' % _ not in paramString: | ||||
|                 newValue = '"%s"' % self.addPayloadDelimiters(newValue) | ||||
|             elif kb.postHint == POST_HINT.JSON_LIKE and not isNumber(newValue) and "'%s'" % _ not in paramString: | ||||
|             elif kb.postHint == POST_HINT.JSON_LIKE and not isNumber(newValue) and re.search(r"['\"]%s['\"]" % re.escape(_), paramString) is None: | ||||
|                 newValue = "'%s'" % self.addPayloadDelimiters(newValue) | ||||
|             else: | ||||
|                 newValue = self.addPayloadDelimiters(newValue) | ||||
|  |  | |||
|  | @ -18,7 +18,7 @@ from lib.core.enums import OS | |||
| from thirdparty.six import unichr as _unichr | ||||
| 
 | ||||
| # sqlmap version (<major>.<minor>.<month>.<monthly commit>) | ||||
| VERSION = "1.4.7.23" | ||||
| VERSION = "1.4.7.24" | ||||
| TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable" | ||||
| TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34} | ||||
| VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE) | ||||
|  | @ -817,7 +817,7 @@ XML_RECOGNITION_REGEX = r"(?s)\A\s*<[^>]+>(.+>)?\s*\Z" | |||
| JSON_RECOGNITION_REGEX = r'(?s)\A(\s*\[)*\s*\{.*"[^"]+"\s*:\s*("[^"]*"|\d+|true|false|null|\[).*\}\s*(\]\s*)*\Z' | ||||
| 
 | ||||
| # Regular expression used for detecting JSON-like POST data | ||||
| JSON_LIKE_RECOGNITION_REGEX = r"(?s)\A(\s*\[)*\s*\{.*'[^']+'\s*:\s*('[^']+'|\d+).*\}\s*(\]\s*)*\Z" | ||||
| JSON_LIKE_RECOGNITION_REGEX = r"(?s)\A(\s*\[)*\s*\{.*('[^']+'|\"[^\"]+\"|\w+)\s*:\s*('[^']+'|\"[^\"]+\"|\d+).*\}\s*(\]\s*)*\Z" | ||||
| 
 | ||||
| # Regular expression used for detecting multipart POST data | ||||
| MULTIPART_RECOGNITION_REGEX = r"(?i)Content-Disposition:[^;]+;\s*name=" | ||||
|  |  | |||
|  | @ -120,7 +120,7 @@ def _setRequestParams(): | |||
|                     else: | ||||
|                         break | ||||
|                 if kb.customInjectionMark in retVal: | ||||
|                     hintNames.append((retVal.split(kb.customInjectionMark)[0], match.group("name"))) | ||||
|                     hintNames.append((retVal.split(kb.customInjectionMark)[0], match.group("name").strip('"\'') if kb.postHint == POST_HINT.JSON_LIKE else match.group("name"))) | ||||
| 
 | ||||
|             return retVal | ||||
| 
 | ||||
|  | @ -145,6 +145,7 @@ def _setRequestParams(): | |||
|             if choice == 'Q': | ||||
|                 raise SqlmapUserQuitException | ||||
|             elif choice == 'Y': | ||||
|                 kb.postHint = POST_HINT.JSON | ||||
|                 if not (kb.processUserMarks and kb.customInjectionMark in conf.data): | ||||
|                     conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data) | ||||
|                     conf.data = conf.data.replace(kb.customInjectionMark, ASTERISK_MARKER) | ||||
|  | @ -159,8 +160,6 @@ def _setRequestParams(): | |||
|                                 _ = re.sub(r'(\A|,|\s+)(-?\d[\d\.]*\b)', r'\g<0>%s' % kb.customInjectionMark, _) | ||||
|                                 conf.data = conf.data.replace(match.group(0), match.group(0).replace(match.group(2), _)) | ||||
| 
 | ||||
|                 kb.postHint = POST_HINT.JSON | ||||
| 
 | ||||
|         elif re.search(JSON_LIKE_RECOGNITION_REGEX, conf.data): | ||||
|             message = "JSON-like data found in %s body. " % conf.method | ||||
|             message += "Do you want to process it? [Y/n/q] " | ||||
|  | @ -169,13 +168,16 @@ def _setRequestParams(): | |||
|             if choice == 'Q': | ||||
|                 raise SqlmapUserQuitException | ||||
|             elif choice == 'Y': | ||||
|                 kb.postHint = POST_HINT.JSON_LIKE | ||||
|                 if not (kb.processUserMarks and kb.customInjectionMark in conf.data): | ||||
|                     conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data) | ||||
|                     conf.data = conf.data.replace(kb.customInjectionMark, ASTERISK_MARKER) | ||||
|                     conf.data = re.sub(r"('(?P<name>[^']+)'\s*:\s*'[^']+)'", functools.partial(process, repl=r"\g<1>%s'" % kb.customInjectionMark), conf.data) | ||||
|                     conf.data = re.sub(r"('(?P<name>[^']+)'\s*:\s*)(-?\d[\d\.]*\b)", functools.partial(process, repl=r"\g<0>%s" % kb.customInjectionMark), conf.data) | ||||
| 
 | ||||
|                 kb.postHint = POST_HINT.JSON_LIKE | ||||
|                     if '"' in conf.data: | ||||
|                         conf.data = re.sub(r'((?P<name>"[^"]+"|\w+)\s*:\s*"[^"]+)"', functools.partial(process, repl=r'\g<1>%s"' % kb.customInjectionMark), conf.data) | ||||
|                         conf.data = re.sub(r'((?P<name>"[^"]+"|\w+)\s*:\s*)(-?\d[\d\.]*\b)', functools.partial(process, repl=r'\g<0>%s' % kb.customInjectionMark), conf.data) | ||||
|                     else: | ||||
|                         conf.data = re.sub(r"((?P<name>'[^']+'|\w+)\s*:\s*'[^']+)'", functools.partial(process, repl=r"\g<1>%s'" % kb.customInjectionMark), conf.data) | ||||
|                         conf.data = re.sub(r"((?P<name>'[^']+'|\w+)\s*:\s*)(-?\d[\d\.]*\b)", functools.partial(process, repl=r"\g<0>%s" % kb.customInjectionMark), conf.data) | ||||
| 
 | ||||
|         elif re.search(ARRAY_LIKE_RECOGNITION_REGEX, conf.data): | ||||
|             message = "Array-like data found in %s body. " % conf.method | ||||
|  | @ -185,12 +187,11 @@ def _setRequestParams(): | |||
|             if choice == 'Q': | ||||
|                 raise SqlmapUserQuitException | ||||
|             elif choice == 'Y': | ||||
|                 kb.postHint = POST_HINT.ARRAY_LIKE | ||||
|                 if not (kb.processUserMarks and kb.customInjectionMark in conf.data): | ||||
|                     conf.data = conf.data.replace(kb.customInjectionMark, ASTERISK_MARKER) | ||||
|                     conf.data = re.sub(r"(=[^%s]+)" % DEFAULT_GET_POST_DELIMITER, r"\g<1>%s" % kb.customInjectionMark, conf.data) | ||||
| 
 | ||||
|                 kb.postHint = POST_HINT.ARRAY_LIKE | ||||
| 
 | ||||
|         elif re.search(XML_RECOGNITION_REGEX, conf.data): | ||||
|             message = "SOAP/XML data found in %s body. " % conf.method | ||||
|             message += "Do you want to process it? [Y/n/q] " | ||||
|  | @ -199,13 +200,12 @@ def _setRequestParams(): | |||
|             if choice == 'Q': | ||||
|                 raise SqlmapUserQuitException | ||||
|             elif choice == 'Y': | ||||
|                 kb.postHint = POST_HINT.SOAP if "soap" in conf.data.lower() else POST_HINT.XML | ||||
|                 if not (kb.processUserMarks and kb.customInjectionMark in conf.data): | ||||
|                     conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data) | ||||
|                     conf.data = conf.data.replace(kb.customInjectionMark, ASTERISK_MARKER) | ||||
|                     conf.data = re.sub(r"(<(?P<name>[^>]+)( [^<]*)?>)([^<]+)(</\2)", functools.partial(process, repl=r"\g<1>\g<4>%s\g<5>" % kb.customInjectionMark), conf.data) | ||||
| 
 | ||||
|                 kb.postHint = POST_HINT.SOAP if "soap" in conf.data.lower() else POST_HINT.XML | ||||
| 
 | ||||
|         elif re.search(MULTIPART_RECOGNITION_REGEX, conf.data): | ||||
|             message = "Multipart-like data found in %s body. " % conf.method | ||||
|             message += "Do you want to process it? [Y/n/q] " | ||||
|  | @ -214,13 +214,12 @@ def _setRequestParams(): | |||
|             if choice == 'Q': | ||||
|                 raise SqlmapUserQuitException | ||||
|             elif choice == 'Y': | ||||
|                 kb.postHint = POST_HINT.MULTIPART | ||||
|                 if not (kb.processUserMarks and kb.customInjectionMark in conf.data): | ||||
|                     conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data) | ||||
|                     conf.data = conf.data.replace(kb.customInjectionMark, ASTERISK_MARKER) | ||||
|                     conf.data = re.sub(r"(?si)((Content-Disposition[^\n]+?name\s*=\s*[\"']?(?P<name>[^\"'\r\n]+)[\"']?).+?)((%s)+--)" % ("\r\n" if "\r\n" in conf.data else '\n'), functools.partial(process, repl=r"\g<1>%s\g<4>" % kb.customInjectionMark), conf.data) | ||||
| 
 | ||||
|                 kb.postHint = POST_HINT.MULTIPART | ||||
| 
 | ||||
|         if not kb.postHint: | ||||
|             if kb.customInjectionMark in conf.data:  # later processed | ||||
|                 pass | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user