@@ -120,7 +120,7 @@ def process(match, repl):
120120 else :
121121 break
122122 if kb .customInjectionMark in retVal :
123- hintNames .append ((retVal .split (kb .customInjectionMark )[0 ], match .group ("name" )))
123+ hintNames .append ((retVal .split (kb .customInjectionMark )[0 ], match .group ("name" ). strip ( '" \' ' ) if kb . postHint == POST_HINT . JSON_LIKE else match . group ( "name" ) ))
124124
125125 return retVal
126126
@@ -145,6 +145,7 @@ def process(match, repl):
145145 if choice == 'Q' :
146146 raise SqlmapUserQuitException
147147 elif choice == 'Y' :
148+ kb .postHint = POST_HINT .JSON
148149 if not (kb .processUserMarks and kb .customInjectionMark in conf .data ):
149150 conf .data = getattr (conf .data , UNENCODED_ORIGINAL_VALUE , conf .data )
150151 conf .data = conf .data .replace (kb .customInjectionMark , ASTERISK_MARKER )
@@ -159,8 +160,6 @@ def process(match, repl):
159160 _ = re .sub (r'(\A|,|\s+)(-?\d[\d\.]*\b)' , r'\g<0>%s' % kb .customInjectionMark , _ )
160161 conf .data = conf .data .replace (match .group (0 ), match .group (0 ).replace (match .group (2 ), _ ))
161162
162- kb .postHint = POST_HINT .JSON
163-
164163 elif re .search (JSON_LIKE_RECOGNITION_REGEX , conf .data ):
165164 message = "JSON-like data found in %s body. " % conf .method
166165 message += "Do you want to process it? [Y/n/q] "
@@ -169,13 +168,16 @@ def process(match, repl):
169168 if choice == 'Q' :
170169 raise SqlmapUserQuitException
171170 elif choice == 'Y' :
171+ kb .postHint = POST_HINT .JSON_LIKE
172172 if not (kb .processUserMarks and kb .customInjectionMark in conf .data ):
173173 conf .data = getattr (conf .data , UNENCODED_ORIGINAL_VALUE , conf .data )
174174 conf .data = conf .data .replace (kb .customInjectionMark , ASTERISK_MARKER )
175- conf .data = re .sub (r"('(?P<name>[^']+)'\s*:\s*'[^']+)'" , functools .partial (process , repl = r"\g<1>%s'" % kb .customInjectionMark ), conf .data )
176- conf .data = re .sub (r"('(?P<name>[^']+)'\s*:\s*)(-?\d[\d\.]*\b)" , functools .partial (process , repl = r"\g<0>%s" % kb .customInjectionMark ), conf .data )
177-
178- kb .postHint = POST_HINT .JSON_LIKE
175+ if '"' in conf .data :
176+ conf .data = re .sub (r'((?P<name>"[^"]+"|\w+)\s*:\s*"[^"]+)"' , functools .partial (process , repl = r'\g<1>%s"' % kb .customInjectionMark ), conf .data )
177+ 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 )
178+ else :
179+ conf .data = re .sub (r"((?P<name>'[^']+'|\w+)\s*:\s*'[^']+)'" , functools .partial (process , repl = r"\g<1>%s'" % kb .customInjectionMark ), conf .data )
180+ 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 )
179181
180182 elif re .search (ARRAY_LIKE_RECOGNITION_REGEX , conf .data ):
181183 message = "Array-like data found in %s body. " % conf .method
@@ -185,12 +187,11 @@ def process(match, repl):
185187 if choice == 'Q' :
186188 raise SqlmapUserQuitException
187189 elif choice == 'Y' :
190+ kb .postHint = POST_HINT .ARRAY_LIKE
188191 if not (kb .processUserMarks and kb .customInjectionMark in conf .data ):
189192 conf .data = conf .data .replace (kb .customInjectionMark , ASTERISK_MARKER )
190193 conf .data = re .sub (r"(=[^%s]+)" % DEFAULT_GET_POST_DELIMITER , r"\g<1>%s" % kb .customInjectionMark , conf .data )
191194
192- kb .postHint = POST_HINT .ARRAY_LIKE
193-
194195 elif re .search (XML_RECOGNITION_REGEX , conf .data ):
195196 message = "SOAP/XML data found in %s body. " % conf .method
196197 message += "Do you want to process it? [Y/n/q] "
@@ -199,13 +200,12 @@ def process(match, repl):
199200 if choice == 'Q' :
200201 raise SqlmapUserQuitException
201202 elif choice == 'Y' :
203+ kb .postHint = POST_HINT .SOAP if "soap" in conf .data .lower () else POST_HINT .XML
202204 if not (kb .processUserMarks and kb .customInjectionMark in conf .data ):
203205 conf .data = getattr (conf .data , UNENCODED_ORIGINAL_VALUE , conf .data )
204206 conf .data = conf .data .replace (kb .customInjectionMark , ASTERISK_MARKER )
205207 conf .data = re .sub (r"(<(?P<name>[^>]+)( [^<]*)?>)([^<]+)(</\2)" , functools .partial (process , repl = r"\g<1>\g<4>%s\g<5>" % kb .customInjectionMark ), conf .data )
206208
207- kb .postHint = POST_HINT .SOAP if "soap" in conf .data .lower () else POST_HINT .XML
208-
209209 elif re .search (MULTIPART_RECOGNITION_REGEX , conf .data ):
210210 message = "Multipart-like data found in %s body. " % conf .method
211211 message += "Do you want to process it? [Y/n/q] "
@@ -214,13 +214,12 @@ def process(match, repl):
214214 if choice == 'Q' :
215215 raise SqlmapUserQuitException
216216 elif choice == 'Y' :
217+ kb .postHint = POST_HINT .MULTIPART
217218 if not (kb .processUserMarks and kb .customInjectionMark in conf .data ):
218219 conf .data = getattr (conf .data , UNENCODED_ORIGINAL_VALUE , conf .data )
219220 conf .data = conf .data .replace (kb .customInjectionMark , ASTERISK_MARKER )
220221 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 )
221222
222- kb .postHint = POST_HINT .MULTIPART
223-
224223 if not kb .postHint :
225224 if kb .customInjectionMark in conf .data : # later processed
226225 pass
0 commit comments