116116from lib .core .settings import ML
117117from lib .core .settings import MIN_TIME_RESPONSES
118118from lib .core .settings import PAYLOAD_DELIMITER
119+ from lib .core .settings import REFLECTED_BORDER_REGEX
119120from lib .core .settings import REFLECTED_REPLACEMENT_REGEX
120121from lib .core .settings import REFLECTED_MAX_REGEX_PARTS
121122from 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
21662167def 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+
0 commit comments