@@ -156,12 +156,27 @@ def payload(self, place=None, parameter=None, value=None, newValue=None, where=N
156156 elif place in (PLACE .USER_AGENT , PLACE .REFERER , PLACE .HOST ):
157157 retVal = paramString .replace (origValue , self .addPayloadDelimiters (newValue ))
158158 else :
159+ def _ (pattern , repl , string ):
160+ retVal = string
161+ match = None
162+ for match in re .finditer (pattern , string ):
163+ pass
164+ if match :
165+ while True :
166+ _ = re .search (r"\\g<([^>]+)>" , repl )
167+ if _ :
168+ repl = repl .replace (_ .group (0 ), match .group (int (_ .group (1 )) if _ .group (1 ).isdigit () else _ .group (1 )))
169+ else :
170+ break
171+ retVal = string [:match .start ()] + repl + string [match .end ():]
172+ return retVal
173+
159174 if origValue :
160- retVal = re . sub (r"(\A|\b)%s=%s(\Z|\b)" % (re .escape (parameter ), re .escape (origValue )), "%s=%s" % (parameter , self .addPayloadDelimiters (newValue .replace ("\\ " , "\\ \\ " ))), paramString )
175+ retVal = _ (r"(\A|\b)%s=%s(\Z|\b)" % (re .escape (parameter ), re .escape (origValue )), "%s=%s" % (parameter , self .addPayloadDelimiters (newValue .replace ("\\ " , "\\ \\ " ))), paramString )
161176 else :
162- retVal = re . sub (r"(\A|\b)%s=%s(\Z|%s|%s|\s)" % (re .escape (parameter ), re .escape (origValue ), DEFAULT_GET_POST_DELIMITER , DEFAULT_COOKIE_DELIMITER ), "%s=%s\g<2>" % (parameter , self .addPayloadDelimiters (newValue .replace ("\\ " , "\\ \\ " ))), paramString )
177+ retVal = _ (r"(\A|\b)%s=%s(\Z|%s|%s|\s)" % (re .escape (parameter ), re .escape (origValue ), DEFAULT_GET_POST_DELIMITER , DEFAULT_COOKIE_DELIMITER ), "%s=%s\g<2>" % (parameter , self .addPayloadDelimiters (newValue .replace ("\\ " , "\\ \\ " ))), paramString )
163178 if retVal == paramString and urlencode (parameter ) != parameter :
164- retVal = re . sub (r"(\A|\b)%s=%s" % (re .escape (urlencode (parameter )), re .escape (origValue )), "%s=%s" % (urlencode (parameter ), self .addPayloadDelimiters (newValue .replace ("\\ " , "\\ \\ " ))), paramString )
179+ retVal = _ (r"(\A|\b)%s=%s" % (re .escape (urlencode (parameter )), re .escape (origValue )), "%s=%s" % (urlencode (parameter ), self .addPayloadDelimiters (newValue .replace ("\\ " , "\\ \\ " ))), paramString )
165180
166181 return retVal
167182
0 commit comments