Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 816348f

Browse files
committed
Patch for an Issue #963
1 parent 05f7b1f commit 816348f

1 file changed

Lines changed: 18 additions & 3 deletions

File tree

lib/core/agent.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)