mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2025-02-16 19:40:37 +03:00
two major bug fixes regarding time calculation (previously comparison was also a part of "delta", which screwed results in cases with large pages; other was a standard distribution based one)
This commit is contained in:
parent
b21eb88905
commit
293ce18fed
|
@ -350,16 +350,13 @@ def checkSqlInjection(place, parameter, value):
|
||||||
# time based checks can take awhile
|
# time based checks can take awhile
|
||||||
socket.setdefaulttimeout(120)
|
socket.setdefaulttimeout(120)
|
||||||
|
|
||||||
# Perform the test's request and check how long
|
# Perform the test's request
|
||||||
# it takes to get the response back
|
|
||||||
start = time.time()
|
|
||||||
_ = Request.queryPage(reqPayload, place, noteResponseTime = False)
|
_ = Request.queryPage(reqPayload, place, noteResponseTime = False)
|
||||||
duration = calculateDeltaSeconds(start)
|
|
||||||
|
|
||||||
# 99.9999999997440% of all non time-based sql injection
|
# 99.9999999997440% of all non time-based sql injection
|
||||||
# affected durations should be inside 7*stdev(durations)
|
# affected durations should be inside +-7*stdev(durations)
|
||||||
# (Reference: http://www.answers.com/topic/standard-deviation)
|
# (Reference: http://www.answers.com/topic/standard-deviation)
|
||||||
trueResult = (duration >= 7 * stdev(kb.responseTimes))
|
trueResult = (kb.lastQueryDuration >= average(kb.responseTimes) + 7 * stdev(kb.responseTimes))
|
||||||
|
|
||||||
if trueResult:
|
if trueResult:
|
||||||
infoMsg = "%s parameter '%s' is '%s' injectable " % (place, parameter, title)
|
infoMsg = "%s parameter '%s' is '%s' injectable " % (place, parameter, title)
|
||||||
|
|
|
@ -1149,6 +1149,7 @@ def __setKnowledgeBaseAttributes():
|
||||||
kb.injections = []
|
kb.injections = []
|
||||||
kb.keywords = set(getFileItems(paths.SQL_KEYWORDS))
|
kb.keywords = set(getFileItems(paths.SQL_KEYWORDS))
|
||||||
kb.lastErrorPage = None
|
kb.lastErrorPage = None
|
||||||
|
kb.lastQueryDuration = 0
|
||||||
kb.lastRequestUID = 0
|
kb.lastRequestUID = 0
|
||||||
|
|
||||||
kb.locks = advancedDict()
|
kb.locks = advancedDict()
|
||||||
|
|
|
@ -340,7 +340,6 @@ class Connect:
|
||||||
uri = None
|
uri = None
|
||||||
raise404 = place != PLACE.URI if raise404 is None else raise404
|
raise404 = place != PLACE.URI if raise404 is None else raise404
|
||||||
toUrlencode = { PLACE.GET: True, PLACE.POST: True, PLACE.COOKIE: conf.cookieUrlencode, PLACE.UA: True, PLACE.URI: False }
|
toUrlencode = { PLACE.GET: True, PLACE.POST: True, PLACE.COOKIE: conf.cookieUrlencode, PLACE.UA: True, PLACE.URI: False }
|
||||||
start = time.time()
|
|
||||||
|
|
||||||
if not place:
|
if not place:
|
||||||
place = kb.injection.place
|
place = kb.injection.place
|
||||||
|
@ -387,6 +386,7 @@ class Connect:
|
||||||
if kb.queryCounter % conf.saFreq == 0:
|
if kb.queryCounter % conf.saFreq == 0:
|
||||||
Connect.getPage(url=conf.safUrl, cookie=cookie, direct=True, silent=True, ua=ua)
|
Connect.getPage(url=conf.safUrl, cookie=cookie, direct=True, silent=True, ua=ua)
|
||||||
|
|
||||||
|
start = time.time()
|
||||||
if not content and not response and kb.nullConnection:
|
if not content and not response and kb.nullConnection:
|
||||||
if kb.nullConnection == NULLCONNECTION.HEAD:
|
if kb.nullConnection == NULLCONNECTION.HEAD:
|
||||||
method = HTTPMETHOD.HEAD
|
method = HTTPMETHOD.HEAD
|
||||||
|
@ -405,6 +405,7 @@ class Connect:
|
||||||
|
|
||||||
if not pageLength:
|
if not pageLength:
|
||||||
page, headers = Connect.getPage(url=uri, get=get, post=post, cookie=cookie, ua=ua, silent=silent, method=method, auxHeaders=auxHeaders, response=response, raise404=raise404)
|
page, headers = Connect.getPage(url=uri, get=get, post=post, cookie=cookie, ua=ua, silent=silent, method=method, auxHeaders=auxHeaders, response=response, raise404=raise404)
|
||||||
|
kb.lastQueryDuration = calculateDeltaSeconds(start)
|
||||||
|
|
||||||
if conf.textOnly:
|
if conf.textOnly:
|
||||||
page = getFilteredPageContent(page)
|
page = getFilteredPageContent(page)
|
||||||
|
@ -415,7 +416,7 @@ class Connect:
|
||||||
conf.cj.clear()
|
conf.cj.clear()
|
||||||
|
|
||||||
if noteResponseTime:
|
if noteResponseTime:
|
||||||
kb.responseTimes.append(calculateDeltaSeconds(start))
|
kb.responseTimes.append(kb.lastQueryDuration)
|
||||||
|
|
||||||
if content or response:
|
if content or response:
|
||||||
return page, headers
|
return page, headers
|
||||||
|
|
Loading…
Reference in New Issue
Block a user