diff --git a/lib/core/option.py b/lib/core/option.py index d2d3d6835..0a58853c9 100644 --- a/lib/core/option.py +++ b/lib/core/option.py @@ -1134,10 +1134,10 @@ def __setKnowledgeBaseAttributes(): kb.data = advancedDict() # Injection types - kb.booleanTest = property(lambda self: isTechniqueAvailable(PAYLOAD.TECHNIQUE.BOOLEAN)) - kb.errorTest = property(lambda self: isTechniqueAvailable(PAYLOAD.TECHNIQUE.ERROR)) - kb.stackedTest = property(lambda self: isTechniqueAvailable(PAYLOAD.TECHNIQUE.STACKED)) - kb.timeTest = property(lambda self: isTechniqueAvailable(PAYLOAD.TECHNIQUE.TIME)) + kb.booleanTest = None + kb.errorTest = None + kb.stackedTest = None + kb.timeTest = None kb.unionTest = None # Basic back-end DBMS fingerprint diff --git a/lib/request/inject.py b/lib/request/inject.py index 036e3e018..5f3a25195 100644 --- a/lib/request/inject.py +++ b/lib/request/inject.py @@ -16,6 +16,8 @@ from lib.core.common import cleanQuery from lib.core.common import dataToSessionFile from lib.core.common import dataToStdout from lib.core.common import expandAsteriskForColumns +from lib.core.common import getPublicTypeMembers +from lib.core.common import isTechniqueAvailable from lib.core.common import parseUnionPage from lib.core.common import popValue from lib.core.common import pushValue @@ -399,7 +401,7 @@ def getValue(expression, blind=True, inband=True, error=True, time=True, fromUse try: if conf.direct: value = direct(expression) - elif any(test is not None for test in [kb.booleanTest, kb.errorTest, kb.unionTest, kb.timeTest, kb.stackedTest]): + elif any(test is not None for test in map(isTechniqueAvailable, getPublicTypeMembers(PAYLOAD.TECHNIQUE, onlyValues=True))) or kb.unionTest: query = cleanQuery(expression) query = expandAsteriskForColumns(query) value = None @@ -427,7 +429,7 @@ def getValue(expression, blind=True, inband=True, error=True, time=True, fromUse oldParamNegative = kb.unionNegative kb.unionNegative = False - if error and kb.errorTest and not found: + if error and isTechniqueAvailable(PAYLOAD.TECHNIQUE.ERROR) and not found: kb.technique = PAYLOAD.TECHNIQUE.ERROR if expected == EXPECTED.BOOL: @@ -437,7 +439,7 @@ def getValue(expression, blind=True, inband=True, error=True, time=True, fromUse found = value or (value is None and expectingNone) - if blind and kb.booleanTest and not found: + if blind and isTechniqueAvailable(PAYLOAD.TECHNIQUE.BOOLEAN) and not found: kb.technique = PAYLOAD.TECHNIQUE.BOOLEAN if expected == EXPECTED.BOOL: @@ -447,10 +449,10 @@ def getValue(expression, blind=True, inband=True, error=True, time=True, fromUse found = value or (value is None and expectingNone) - if time and (kb.timeTest or kb.stackedTest) and not found: - if kb.timeTest: + if time and (isTechniqueAvailable(PAYLOAD.TECHNIQUE.TIME) or isTechniqueAvailable(PAYLOAD.TECHNIQUE.STACKED)) and not found: + if isTechniqueAvailable(PAYLOAD.TECHNIQUE.TIME): kb.technique = PAYLOAD.TECHNIQUE.TIME - elif kb.stackedTest: + else: kb.technique = PAYLOAD.TECHNIQUE.STACKED if expected == EXPECTED.BOOL: