diff --git a/lib/core/agent.py b/lib/core/agent.py index 10d518a2f..1f8e8eca7 100644 --- a/lib/core/agent.py +++ b/lib/core/agent.py @@ -328,7 +328,7 @@ class Agent: if not Backend.getDbms(): return fields - if fields.startswith("(CASE"): + if fields.startswith("(CASE") or fields.startswith("SUBSTR"): nulledCastedConcatFields = fields else: fields = fields.replace(", ", ",") @@ -368,9 +368,12 @@ class Agent: fieldsSelectFrom = re.search("\ASELECT%s\s+(.+?)\s+FROM\s+" % prefixRegex, query, re.I) fieldsExists = re.search("EXISTS(.*)", query, re.I) fieldsSelect = re.search("\ASELECT%s\s+(.*)" % prefixRegex, query, re.I) + fieldsSubstr = re.search("\ASUBSTR", query, re.I) fieldsNoSelect = query - if fieldsExists: + if fieldsSubstr: + fieldsToCastStr = query + elif fieldsExists: fieldsToCastStr = fieldsSelect.groups()[0] elif fieldsSelectTop: fieldsToCastStr = fieldsSelectTop.groups()[0] @@ -386,7 +389,7 @@ class Agent: fieldsToCastStr = fieldsNoSelect # Function - if re.search("\A\w+\(.*\)", fieldsToCastStr, re.I) or fieldsSelectCase: + if re.search("\A\w+\(.*\)", fieldsToCastStr, re.I) or fieldsSelectCase or fieldsSubstr: fieldsToCastList = [fieldsToCastStr] else: fieldsToCastList = fieldsToCastStr.replace(", ", ",") diff --git a/lib/takeover/udf.py b/lib/takeover/udf.py index 93d7e13fe..ea0771e62 100644 --- a/lib/takeover/udf.py +++ b/lib/takeover/udf.py @@ -51,8 +51,8 @@ class UDF: def __checkExistUdf(self, udf): logger.info("checking if UDF '%s' already exist" % udf) - query = agent.forgeCaseStatement(queries[Backend.getIdentifiedDbms()].check_udf.query % (udf, udf)) - exists = inject.getValue(query, resumeValue=False, unpack=False, charsetType=2) + query = agent.forgeCaseStatement(queries[Backend.getIdentifiedDbms()].check_udf.query % (udf, udf)) + exists = inject.getValue(query, resumeValue=False, charsetType=2) if exists == "1": return True diff --git a/plugins/generic/enumeration.py b/plugins/generic/enumeration.py index a5df1f77d..7adcfb512 100644 --- a/plugins/generic/enumeration.py +++ b/plugins/generic/enumeration.py @@ -142,7 +142,7 @@ class Enumeration: query = queries[Backend.getIdentifiedDbms()].is_dba.query query = agent.forgeCaseStatement(query) - isDba = inject.getValue(query, unpack=False, charsetType=1) + isDba = inject.getValue(query, charsetType=1) if user is None: kb.data.isDba = isDba diff --git a/plugins/generic/misc.py b/plugins/generic/misc.py index 695c6053c..e73b35972 100644 --- a/plugins/generic/misc.py +++ b/plugins/generic/misc.py @@ -74,7 +74,7 @@ class Miscellaneous: if conf.direct: query = "SELECT %s" % query - kb.bannerFp["dbmsVersion"] = inject.getValue(query, unpack=False) + kb.bannerFp["dbmsVersion"] = inject.getValue(query) kb.bannerFp["dbmsVersion"] = kb.bannerFp["dbmsVersion"].replace(",", "").replace("-", "").replace(" ", "") def delRemoteFile(self, tempFile): diff --git a/xml/queries.xml b/xml/queries.xml index 141b1dd8a..9efa5e7ba 100644 --- a/xml/queries.xml +++ b/xml/queries.xml @@ -95,7 +95,7 @@ --> - +