|
17 | 17 |
|
18 | 18 | from lib.contrib import multipartpost |
19 | 19 | from lib.core.agent import agent |
| 20 | +from lib.core.common import average |
20 | 21 | from lib.core.common import calculateDeltaSeconds |
21 | 22 | from lib.core.common import extractErrorMessage |
22 | 23 | from lib.core.common import getFilteredPageContent |
23 | 24 | from lib.core.common import getUnicode |
24 | 25 | from lib.core.common import logHTTPTraffic |
25 | 26 | from lib.core.common import readInput |
| 27 | +from lib.core.common import stdev |
26 | 28 | from lib.core.convert import urlencode |
27 | 29 | from lib.core.common import urlEncodeCookieValues |
28 | 30 | from lib.core.data import conf |
@@ -321,7 +323,7 @@ def getPage(**kwargs): |
321 | 323 | return page, responseHeaders |
322 | 324 |
|
323 | 325 | @staticmethod |
324 | | - def queryPage(value=None, place=None, content=False, getSeqMatcher=False, silent=False, method=None, auxHeaders=None, response=False, raise404 = None, noteResponseTime = True): |
| 326 | + def queryPage(value=None, place=None, content=False, getSeqMatcher=False, silent=False, method=None, auxHeaders=None, response=False, raise404 = None, noteResponseTime = True, timeBasedCompare = False): |
325 | 327 | """ |
326 | 328 | This method calls a function to get the target url page content |
327 | 329 | and returns its page MD5 hash or a boolean value in case of |
@@ -417,7 +419,12 @@ def queryPage(value=None, place=None, content=False, getSeqMatcher=False, silent |
417 | 419 | if conf.cj: |
418 | 420 | conf.cj.clear() |
419 | 421 |
|
420 | | - if noteResponseTime: |
| 422 | + if timeBasedCompare: |
| 423 | + # 99.9999999997440% of all non time-based sql injection |
| 424 | + # affected durations should be inside +-7*stdev(durations) |
| 425 | + # (Reference: http://www.answers.com/topic/standard-deviation) |
| 426 | + return (kb.lastQueryDuration >= average(kb.responseTimes) + 7 * stdev(kb.responseTimes)) |
| 427 | + elif noteResponseTime: |
421 | 428 | kb.responseTimes.append(kb.lastQueryDuration) |
422 | 429 |
|
423 | 430 | if content or response: |
|
0 commit comments