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

Skip to content

Commit 627bfc5

Browse files
committed
some more updates in reflective removal mechanism
1 parent 8b130f6 commit 627bfc5

2 files changed

Lines changed: 26 additions & 10 deletions

File tree

lib/core/common.py

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@
116116
from lib.core.settings import ML
117117
from lib.core.settings import MIN_TIME_RESPONSES
118118
from lib.core.settings import PAYLOAD_DELIMITER
119+
from lib.core.settings import REFLECTED_BORDER_REGEX
119120
from lib.core.settings import REFLECTED_REPLACEMENT_REGEX
120121
from lib.core.settings import REFLECTED_MAX_REGEX_PARTS
121122
from lib.core.settings import REFLECTED_VALUE_MARKER
@@ -2160,7 +2161,7 @@ def extractTextTagContent(page):
21602161
Returns list containing content from "textual" tags
21612162
"""
21622163

2163-
page = re.sub(r"(?si)%s[^<]*" % REFLECTED_VALUE_MARKER, "", page or "")
2164+
page = re.sub(r"(?si)[^\s]*%s[^<]*" % REFLECTED_VALUE_MARKER, "", page or "")
21642165
return [_.group('result') for _ in re.finditer(TEXT_TAG_REGEX, page)]
21652166

21662167
def trimAlphaNum(value):
@@ -2634,7 +2635,6 @@ def removeReflectiveValues(content, payload, suppressWarning=False):
26342635
"""
26352636

26362637
retVal = content
2637-
regex = ""
26382638

26392639
if all([content, payload]) and isinstance(content, unicode) and kb.reflectiveMechanism:
26402640
def _(value):
@@ -2643,20 +2643,32 @@ def _(value):
26432643
return value
26442644

26452645
payload = getUnicode(urldecode(payload.replace(PAYLOAD_DELIMITER, '')))
2646-
regex = _(filterStringValue(payload, r'[A-Za-z0-9]', REFLECTED_REPLACEMENT_REGEX.encode("string-escape")))
2646+
regex = _(filterStringValue(payload, r"[A-Za-z0-9]", REFLECTED_REPLACEMENT_REGEX.encode("string-escape")))
26472647

26482648
if regex != payload:
26492649
if all(part.lower() in content.lower() for part in filter(None, regex.split(REFLECTED_REPLACEMENT_REGEX))[1:]): # fast optimization check
26502650
parts = regex.split(REFLECTED_REPLACEMENT_REGEX)
2651+
26512652
if len(parts) > REFLECTED_MAX_REGEX_PARTS: # preventing CPU hogs
2652-
parts = parts[:REFLECTED_MAX_REGEX_PARTS / 2] + parts[-REFLECTED_MAX_REGEX_PARTS / 2:]
2653-
parts = filter(None, parts)
2653+
regex = _("%s%s%s" % (REFLECTED_REPLACEMENT_REGEX.join(parts[:REFLECTED_MAX_REGEX_PARTS / 2]), REFLECTED_REPLACEMENT_REGEX, REFLECTED_REPLACEMENT_REGEX.join(parts[-REFLECTED_MAX_REGEX_PARTS / 2:])))
2654+
2655+
parts = filter(None, regex.split(REFLECTED_REPLACEMENT_REGEX))
2656+
2657+
if regex.startswith(REFLECTED_REPLACEMENT_REGEX):
2658+
regex = r"%s%s" % (REFLECTED_BORDER_REGEX, regex[len(REFLECTED_REPLACEMENT_REGEX):])
2659+
else:
2660+
regex = r"\b%s" % regex
26542661

2655-
for _ in xrange(2):
2656-
if parts:
2657-
regex = r"(?i)\b%s\b" % REFLECTED_REPLACEMENT_REGEX.join(parts)
2658-
retVal = re.sub(regex, REFLECTED_VALUE_MARKER, retVal)
2659-
parts = parts[1:]
2662+
if regex.endswith(REFLECTED_REPLACEMENT_REGEX):
2663+
regex = r"%s%s" % (regex[:-len(REFLECTED_REPLACEMENT_REGEX)], REFLECTED_BORDER_REGEX)
2664+
else:
2665+
regex = r"%s\b" % regex
2666+
2667+
retVal = re.sub(r"(?i)%s" % regex, REFLECTED_VALUE_MARKER, content)
2668+
2669+
if len(parts) > 2:
2670+
regex = REFLECTED_REPLACEMENT_REGEX.join(parts[1:])
2671+
retVal = re.sub(r"(?i)\b%s\b" % regex, REFLECTED_VALUE_MARKER, content)
26602672

26612673
if retVal != content:
26622674
kb.reflectiveCounters[REFLECTIVE_COUNTER.HIT] += 1
@@ -3193,3 +3205,4 @@ def resetCookieJar(cookieJar):
31933205
errMsg = "there was a problem loading "
31943206
errMsg += "cookies file ('%s')" % msg
31953207
raise sqlmapGenericException, errMsg
3208+

lib/core/settings.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,9 @@
332332
# Mark used for replacement of reflected values
333333
REFLECTED_VALUE_MARKER = "__REFLECTED_VALUE__"
334334

335+
# Regular expression used for replacing border non-alphanum characters
336+
REFLECTED_BORDER_REGEX = r"[^A-Za-z]+"
337+
335338
# Regular expression used for replacing non-alphanum characters
336339
REFLECTED_REPLACEMENT_REGEX = r".+?"
337340

0 commit comments

Comments
 (0)