@@ -98,33 +98,37 @@ def _oneShotUnionUse(expression, unpack=True, limited=False):
9898 incrementCounter (PAYLOAD .TECHNIQUE .UNION )
9999
100100 if kb .jsonAggMode :
101- if Backend .isDbms (DBMS .MSSQL ):
102- output = extractRegexResult (r"%s(?P<result>.*)%s" % (kb .chars .start , kb .chars .stop ), removeReflectiveValues (page or "" , payload ))
103- if output :
104- try :
105- retVal = ""
106- fields = re .findall (r'"([^"]+)":' , extractRegexResult (r"{(?P<result>[^}]+)}" , output ))
107- for row in json .loads (output ):
108- retVal += "%s%s%s" % (kb .chars .start , kb .chars .delimiter .join (getUnicode (row [field ] or NULL ) for field in fields ), kb .chars .stop )
109- except :
110- pass
111- else :
112- retVal = getUnicode (retVal )
113- elif Backend .isDbms (DBMS .PGSQL ):
114- output = extractRegexResult (r"(?P<result>%s.*%s)" % (kb .chars .start , kb .chars .stop ), removeReflectiveValues (page or "" , payload ))
115- if output :
116- retVal = output
117- else :
118- output = extractRegexResult (r"%s(?P<result>.*?)%s" % (kb .chars .start , kb .chars .stop ), removeReflectiveValues (page or "" , payload ))
119- if output :
120- try :
121- retVal = ""
122- for row in json .loads (output ):
123- retVal += "%s%s%s" % (kb .chars .start , row , kb .chars .stop )
124- except :
125- pass
126- else :
127- retVal = getUnicode (retVal )
101+ for _page in (page or "" , (page or "" ).replace ('\\ "' , '"' )):
102+ if Backend .isDbms (DBMS .MSSQL ):
103+ output = extractRegexResult (r"%s(?P<result>.*)%s" % (kb .chars .start , kb .chars .stop ), removeReflectiveValues (_page , payload ))
104+ if output :
105+ try :
106+ retVal = ""
107+ fields = re .findall (r'"([^"]+)":' , extractRegexResult (r"{(?P<result>[^}]+)}" , output ))
108+ for row in json .loads (output ):
109+ retVal += "%s%s%s" % (kb .chars .start , kb .chars .delimiter .join (getUnicode (row [field ] or NULL ) for field in fields ), kb .chars .stop )
110+ except :
111+ pass
112+ else :
113+ retVal = getUnicode (retVal )
114+ elif Backend .isDbms (DBMS .PGSQL ):
115+ output = extractRegexResult (r"(?P<result>%s.*%s)" % (kb .chars .start , kb .chars .stop ), removeReflectiveValues (_page , payload ))
116+ if output :
117+ retVal = output
118+ else :
119+ output = extractRegexResult (r"%s(?P<result>.*?)%s" % (kb .chars .start , kb .chars .stop ), removeReflectiveValues (_page , payload ))
120+ if output :
121+ try :
122+ retVal = ""
123+ for row in json .loads (output ):
124+ retVal += "%s%s%s" % (kb .chars .start , row , kb .chars .stop )
125+ except :
126+ pass
127+ else :
128+ retVal = getUnicode (retVal )
129+
130+ if retVal :
131+ break
128132 else :
129133 # Parse the returned page to get the exact UNION-based
130134 # SQL injection output
0 commit comments