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

Skip to content

Commit 45ec8c1

Browse files
committed
Consistency between --*-test switches/output
1 parent dac7436 commit 45ec8c1

7 files changed

Lines changed: 38 additions & 15 deletions

File tree

lib/core/option.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1112,6 +1112,7 @@ def __setKnowledgeBaseAttributes():
11121112
kb.unionPosition = None
11131113
kb.unionNegative = False
11141114
kb.unionFalseCond = False
1115+
kb.unionTest = None
11151116
kb.userAgents = None
11161117
kb.valueStack = []
11171118

lib/request/inject.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ def getValue(expression, blind=True, inband=True, error=True, fromUser=False, ex
353353
expression = expression.replace("DISTINCT ", "")
354354

355355
if error and conf.errorTest:
356-
value = errorUse(expression)
356+
value = goError(expression)
357357

358358
if not value:
359359
warnMsg = "for some reason(s) it was not possible to retrieve "
@@ -408,7 +408,12 @@ def goStacked(expression, silent=False):
408408
return payload, page
409409

410410
def goError(expression, suppressOutput=False, returnPayload=False):
411-
#expression = cleanQuery(expression)
411+
"""
412+
Retrieve the output of a SQL query taking advantage of an error-based
413+
SQL injection vulnerability on the affected parameter.
414+
"""
415+
416+
result = None
412417

413418
if suppressOutput:
414419
pushValue(conf.verbose)
@@ -417,9 +422,21 @@ def goError(expression, suppressOutput=False, returnPayload=False):
417422
if conf.direct:
418423
return direct(expression), None
419424

420-
result, payload = errorUse(expression, returnPayload)
425+
condition = (
426+
kb.resumedQueries and conf.url in kb.resumedQueries.keys()
427+
and expression in kb.resumedQueries[conf.url].keys()
428+
)
429+
430+
if condition:
431+
result = resume(expression, None)
432+
433+
if not result:
434+
result = errorUse(expression, returnPayload)
435+
436+
if not returnPayload:
437+
dataToSessionFile("[%s][%s][%s][%s][%s]\n" % (conf.url, kb.injPlace, conf.parameters[kb.injPlace], expression, result))
421438

422439
if suppressOutput:
423440
conf.verbose = popValue()
424441

425-
return result, payload
442+
return result

lib/techniques/blind/timebased.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
from lib.request.connect import Connect as Request
2020

2121
def timeTest():
22+
if kb.timeTest is not None:
23+
return kb.timeTest
24+
2225
infoMsg = "testing time-based blind sql injection on parameter "
2326
infoMsg += "'%s' with %s condition syntax" % (kb.injParameter, conf.logic)
2427
logger.info(infoMsg)
@@ -37,7 +40,7 @@ def timeTest():
3740
infoMsg += "'%s'" % kb.injParameter
3841
logger.info(infoMsg)
3942

40-
kb.timeTest = payload
43+
kb.timeTest = agent.removePayloadDelimiters(payload, False)
4144
else:
4245
warnMsg = "the target url is not affected by a time-based blind "
4346
warnMsg += "sql injection with AND condition syntax on parameter "
@@ -59,7 +62,7 @@ def timeTest():
5962
infoMsg += "'%s'" % kb.injParameter
6063
logger.info(infoMsg)
6164

62-
kb.timeTest = payload
65+
kb.timeTest = agent.removePayloadDelimiters(payload, False)
6366
else:
6467
warnMsg = "the target url is not affected by a time-based blind "
6568
warnMsg += "sql injection with stacked queries syntax on parameter "

lib/techniques/error/test.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import time
1111

12+
from lib.core.agent import agent
1213
from lib.core.common import getUnicode
1314
from lib.core.common import randomInt
1415
from lib.core.data import conf
@@ -38,7 +39,7 @@ def errorTest():
3839
infoMsg += "injection on parameter '%s'" % kb.injParameter
3940
logger.info(infoMsg)
4041

41-
kb.errorTest = True
42+
kb.errorTest = agent.removePayloadDelimiters(usedPayload, False)
4243
else:
4344
warnMsg = "the target url is not affected by an error-based sql "
4445
warnMsg += "injection on parameter '%s'" % kb.injParameter
@@ -48,7 +49,4 @@ def errorTest():
4849

4950
setError()
5051

51-
if kb.errorTest:
52-
return usedPayload
53-
else:
54-
return False
52+
return kb.errorTest

lib/techniques/error/use.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ def errorUse(expression, returnPayload=False):
7373

7474
if match:
7575
output = match.group('result')
76+
7677
if output:
7778
output = output.replace(ERROR_SPACE, " ").replace(ERROR_EMPTY_CHAR, "")
7879

lib/techniques/inband/union/test.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,8 @@ def unionTest():
174174
if conf.direct:
175175
return
176176

177-
if kb.unionCount is not None and kb.unionPosition is not None:
178-
return
177+
if kb.unionTest is not None:
178+
return kb.unionTest
179179

180180
if conf.uTech == "orderby":
181181
technique = "ORDER BY clause bruteforcing"
@@ -209,5 +209,7 @@ def unionTest():
209209

210210
if validPayload is None:
211211
validPayload = ""
212+
elif isinstance(validPayload, basestring):
213+
kb.unionTest = agent.removePayloadDelimiters(validPayload, False)
212214

213-
return validPayload
215+
return kb.unionTest

lib/techniques/outband/stacked.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import time
1111

12+
from lib.core.agent import agent
1213
from lib.core.common import calculateDeltaSeconds
1314
from lib.core.common import getDelayQuery
1415
from lib.core.data import conf
@@ -38,7 +39,7 @@ def stackedTest():
3839
infoMsg += "sql injection on parameter '%s'" % kb.injParameter
3940
logger.info(infoMsg)
4041

41-
kb.stackedTest = payload
42+
kb.stackedTest = agent.removePayloadDelimiters(payload, False)
4243
else:
4344
warnMsg = "the target url is not affected by a stacked queries "
4445
warnMsg += "sql injection on parameter '%s'" % kb.injParameter

0 commit comments

Comments
 (0)