77See the file 'doc/COPYING' for copying permission
88"""
99
10+ import re
11+
1012from lib .controller .action import action
1113from lib .controller .checks import checkSqlInjection
1214from lib .controller .checks import heuristicCheckSqlInjection
@@ -116,6 +118,21 @@ def start():
116118 conf .data = targetData
117119 conf .cookie = targetCookie
118120 injData = []
121+
122+ initTargetEnv ()
123+ parseTargetUrl ()
124+
125+ testSqlInj = False
126+ if "GET" in conf .parameters :
127+ for parameter in re .findall (r"([^=]+)=[^&]+&?" , conf .parameters ["GET" ]):
128+ paramKey = (conf .hostname , conf .path , "GET" , parameter )
129+ if paramKey not in kb .testedParams :
130+ testSqlInj = True
131+ break
132+ if not testSqlInj :
133+ infoMsg = "skipping '%s'" % targetUrl
134+ logger .info (infoMsg )
135+ continue
119136
120137 if conf .multipleTargets :
121138 hostCount += 1
@@ -140,8 +157,6 @@ def start():
140157 logMsg = "testing url %s" % targetUrl
141158 logger .info (logMsg )
142159
143- initTargetEnv ()
144- parseTargetUrl ()
145160 setupTargetEnv ()
146161
147162 if not checkConnection () or not checkString () or not checkRegexp ():
@@ -192,23 +207,26 @@ def start():
192207 continue
193208
194209 paramDict = conf .paramDict [place ]
195-
196210 for parameter , value in paramDict .items ():
197211 testSqlInj = True
198- paramKey = (conf .hostname , place , parameter )
212+ paramKey = (conf .hostname , conf . path , place , parameter )
199213
200214 if paramKey in kb .testedParams :
201- warnMsg = "skipping previously processed %s parameter '%s'" % (place , parameter )
202- logger .warn (warnMsg )
203215 testSqlInj = False
216+
217+ infoMsg = "skipping previously processed %s parameter '%s'" % (place , parameter )
218+ logger .info (infoMsg )
219+
204220 # Avoid dinamicity test if the user provided the
205221 # parameter manually
206222 elif parameter in conf .testParameter :
207223 pass
224+
208225 elif not checkDynParam (place , parameter , value ):
209226 warnMsg = "%s parameter '%s' is not dynamic" % (place , parameter )
210227 logger .warn (warnMsg )
211228 testSqlInj = False
229+
212230 else :
213231 logMsg = "%s parameter '%s' is dynamic" % (place , parameter )
214232 logger .info (logMsg )
@@ -217,6 +235,7 @@ def start():
217235
218236 if testSqlInj :
219237 heuristicCheckSqlInjection (place , parameter , value )
238+
220239 for parenthesis in range (0 , 4 ):
221240 logMsg = "testing sql injection on %s " % place
222241 logMsg += "parameter '%s' with " % parameter
@@ -227,8 +246,8 @@ def start():
227246
228247 if injType :
229248 injData .append ((place , parameter , injType ))
230-
231249 break
250+
232251 else :
233252 infoMsg = "%s parameter '%s' is not " % (place , parameter )
234253 infoMsg += "injectable with %d parenthesis" % parenthesis
0 commit comments