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

Skip to content

Commit 8e03f4d

Browse files
committed
Patch for an Issue #1062
1 parent f96f33a commit 8e03f4d

2 files changed

Lines changed: 39 additions & 2 deletions

File tree

lib/core/settings.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,9 @@
611611
# Timeout in seconds in which Metasploit remote session has to be initialized
612612
METASPLOIT_SESSION_TIMEOUT = 300
613613

614+
# Suffix used to mark variables having keyword names
615+
EVALCODE_KEYWORD_SUFFIX = "_KEYWORD"
616+
614617
# Reference: http://www.cookiecentral.com/faq/#3.5
615618
NETSCAPE_FORMAT_HEADER_COOKIES = "# Netscape HTTP Cookie File."
616619

lib/request/connect.py

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
See the file 'doc/COPYING' for copying permission
66
"""
77

8+
import compiler
89
import httplib
910
import json
11+
import keyword
1012
import logging
1113
import re
1214
import socket
@@ -72,6 +74,7 @@
7274
from lib.core.settings import DEFAULT_CONTENT_TYPE
7375
from lib.core.settings import DEFAULT_COOKIE_DELIMITER
7476
from lib.core.settings import DEFAULT_GET_POST_DELIMITER
77+
from lib.core.settings import EVALCODE_KEYWORD_SUFFIX
7578
from lib.core.settings import HTTP_ACCEPT_HEADER_VALUE
7679
from lib.core.settings import HTTP_ACCEPT_ENCODING_HEADER_VALUE
7780
from lib.core.settings import MAX_CONNECTION_CHUNK_SIZE
@@ -831,23 +834,54 @@ def _randomizeParameter(paramString, randomParameter):
831834
delimiter = conf.paramDel or DEFAULT_GET_POST_DELIMITER
832835
variables = {"uri": uri}
833836
originals = {}
837+
keywords = keyword.kwlist
834838

835839
for item in filter(None, (get, post if not kb.postHint else None)):
836840
for part in item.split(delimiter):
837841
if '=' in part:
838842
name, value = part.split('=', 1)
843+
name = name.strip()
844+
if name in keywords:
845+
name = "%s%s" % (name, EVALCODE_KEYWORD_SUFFIX)
839846
value = urldecode(value, convall=True, plusspace=(item==post and kb.postSpaceToPlus))
840-
evaluateCode("%s=%s" % (name.strip(), repr(value)), variables)
847+
evaluateCode("%s=%s" % (name, repr(value)), variables)
841848

842849
if cookie:
843850
for part in cookie.split(conf.cookieDel or DEFAULT_COOKIE_DELIMITER):
844851
if '=' in part:
845852
name, value = part.split('=', 1)
853+
name = name.strip()
854+
if name in keywords:
855+
name = "%s%s" % (name, EVALCODE_KEYWORD_SUFFIX)
846856
value = urldecode(value, convall=True)
847-
evaluateCode("%s=%s" % (name.strip(), repr(value)), variables)
857+
evaluateCode("%s=%s" % (name, repr(value)), variables)
858+
859+
while True:
860+
try:
861+
compiler.parse(conf.evalCode.replace(';', '\n'))
862+
except SyntaxError, ex:
863+
original = replacement = ex.text.strip()
864+
for _ in re.findall(r"[A-Za-z_]+", original)[::-1]:
865+
if _ in keywords:
866+
replacement = replacement.replace(_, "%s%s" % (_, EVALCODE_KEYWORD_SUFFIX))
867+
break
868+
if original == replacement:
869+
conf.evalCode = conf.evalCode.replace(EVALCODE_KEYWORD_SUFFIX, "")
870+
break
871+
else:
872+
conf.evalCode = conf.evalCode.replace(ex.text.strip(), replacement)
873+
else:
874+
break
848875

849876
originals.update(variables)
850877
evaluateCode(conf.evalCode, variables)
878+
879+
for variable in variables.keys():
880+
if variable.endswith(EVALCODE_KEYWORD_SUFFIX):
881+
value = variables[variable]
882+
del variables[variable]
883+
variables[variable.replace(EVALCODE_KEYWORD_SUFFIX, "")] = value
884+
851885
uri = variables["uri"]
852886

853887
for name, value in variables.items():

0 commit comments

Comments
 (0)