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 @@
-->
-
+