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

Skip to content

Commit 1ae2fa7

Browse files
committed
update regarding time based payloads
1 parent bdff4ab commit 1ae2fa7

2 files changed

Lines changed: 10 additions & 10 deletions

File tree

lib/controller/checks.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
from difflib import SequenceMatcher
1515

1616
from lib.core.agent import agent
17-
from lib.core.common import average
1817
from lib.core.common import beep
1918
from lib.core.common import calculateDeltaSeconds
2019
from lib.core.common import extractRegexResult
@@ -26,7 +25,6 @@
2625
from lib.core.common import readInput
2726
from lib.core.common import removeDynamicContent
2827
from lib.core.common import showStaticWords
29-
from lib.core.common import stdev
3028
from lib.core.common import trimAlphaNum
3129
from lib.core.common import wasLastRequestDBMSError
3230
from lib.core.common import DynamicContentItem
@@ -351,12 +349,7 @@ def checkSqlInjection(place, parameter, value):
351349
socket.setdefaulttimeout(120)
352350

353351
# Perform the test's request
354-
_ = Request.queryPage(reqPayload, place, content=True, noteResponseTime=False)
355-
356-
# 99.9999999997440% of all non time-based sql injection
357-
# affected durations should be inside +-7*stdev(durations)
358-
# (Reference: http://www.answers.com/topic/standard-deviation)
359-
trueResult = (kb.lastQueryDuration >= average(kb.responseTimes) + 7 * stdev(kb.responseTimes))
352+
trueResult = Request.queryPage(reqPayload, place, timeBasedCompare=True)
360353

361354
if trueResult:
362355
infoMsg = "%s parameter '%s' is '%s' injectable " % (place, parameter, title)

lib/request/connect.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717

1818
from lib.contrib import multipartpost
1919
from lib.core.agent import agent
20+
from lib.core.common import average
2021
from lib.core.common import calculateDeltaSeconds
2122
from lib.core.common import extractErrorMessage
2223
from lib.core.common import getFilteredPageContent
2324
from lib.core.common import getUnicode
2425
from lib.core.common import logHTTPTraffic
2526
from lib.core.common import readInput
27+
from lib.core.common import stdev
2628
from lib.core.convert import urlencode
2729
from lib.core.common import urlEncodeCookieValues
2830
from lib.core.data import conf
@@ -321,7 +323,7 @@ def getPage(**kwargs):
321323
return page, responseHeaders
322324

323325
@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):
325327
"""
326328
This method calls a function to get the target url page content
327329
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
417419
if conf.cj:
418420
conf.cj.clear()
419421

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:
421428
kb.responseTimes.append(kb.lastQueryDuration)
422429

423430
if content or response:

0 commit comments

Comments
 (0)