diff --git a/plugins/dbms/maxdb/enumeration.py b/plugins/dbms/maxdb/enumeration.py
index 795ba54cf..70feb070c 100644
--- a/plugins/dbms/maxdb/enumeration.py
+++ b/plugins/dbms/maxdb/enumeration.py
@@ -7,8 +7,14 @@ Copyright (c) 2006-2010 sqlmap developers (http://sqlmap.sourceforge.net/)
See the file 'doc/COPYING' for copying permission
"""
+from lib.core.common import Backend
+from lib.core.common import isTechniqueAvailable
+from lib.core.common import randomStr
+from lib.core.data import conf
from lib.core.data import kb
from lib.core.data import logger
+from lib.core.data import queries
+from lib.core.enums import PAYLOAD
from plugins.generic.enumeration import Enumeration as GenericEnumeration
class Enumeration(GenericEnumeration):
@@ -34,3 +40,37 @@ class Enumeration(GenericEnumeration):
logger.warn(warnMsg)
return []
+
+ def getColumns(self, onlyColNames=False):
+ self.forceDbmsEnum()
+
+ rootQuery = queries[Backend.getIdentifiedDbms()].columns
+ condition = rootQuery.blind.condition if 'condition' in rootQuery.blind else None
+
+ infoMsg = "fetching columns "
+ infoMsg += "for table '%s' " % conf.tbl
+ logger.info(infoMsg)
+
+ if isTechniqueAvailable(PAYLOAD.TECHNIQUE.UNION) or isTechniqueAvailable(PAYLOAD.TECHNIQUE.ERROR) or conf.direct:
+ blinds = [False, True]
+ else:
+ blinds = [True]
+
+ for blind in blinds:
+ randStr = randomStr()
+ query = rootQuery.inband.query % conf.tbl
+ retVal = self.__pivotDumpTable("(%s) AS %s" % (query, randStr), ['%s.columnname' % randStr,'%s.datatype' % randStr,'%s.len' % randStr], blind=blind)
+
+ if retVal:
+ table = {}
+ columns = {}
+
+ for columnname, datatype, length in zip(retVal[0]["%s.columnname" % randStr], retVal[0]["%s.datatype" % randStr], retVal[0]["%s.len" % randStr]):
+ columns[columnname] = "%s(%s)" % (datatype, length)
+
+ table[conf.tbl] = columns
+ kb.data.cachedColumns[conf.db] = table
+
+ break
+
+ return kb.data.cachedColumns
diff --git a/plugins/dbms/maxdb/fingerprint.py b/plugins/dbms/maxdb/fingerprint.py
index ce717941b..8d6d4ddbb 100644
--- a/plugins/dbms/maxdb/fingerprint.py
+++ b/plugins/dbms/maxdb/fingerprint.py
@@ -136,3 +136,6 @@ class Fingerprint(GenericFingerprint):
def forceDbmsEnum(self):
conf.db = "%s%s" % (DBMS.MAXDB, METADB_SUFFIX)
+
+ if conf.tbl:
+ conf.tbl = conf.tbl.upper()
diff --git a/plugins/generic/enumeration.py b/plugins/generic/enumeration.py
index 7f63799be..d23433812 100644
--- a/plugins/generic/enumeration.py
+++ b/plugins/generic/enumeration.py
@@ -1364,6 +1364,8 @@ class Enumeration:
query = rootQuery.blind.count % conf.tbl
elif Backend.getIdentifiedDbms() == DBMS.SYBASE:
query = rootQuery.blind.count % ("%s..%s" % (conf.db, conf.tbl))
+ elif Backend.getIdentifiedDbms() == DBMS.MAXDB:
+ query = rootQuery.blind.count % ("%s" % conf.tbl)
else:
query = rootQuery.blind.count % (conf.db, conf.tbl)
count = inject.getValue(query, inband=False, error=False, expected=EXPECTED.INT, charsetType=2)
@@ -1383,10 +1385,10 @@ class Enumeration:
entries = {}
try:
- if Backend.getIdentifiedDbms() in (DBMS.ACCESS, DBMS.SYBASE):
- if DBMS.ACCESS:
+ if Backend.getIdentifiedDbms() in (DBMS.ACCESS, DBMS.SYBASE, DBMS.MAXDB):
+ if Backend.getIdentifiedDbms() in (DBMS.ACCESS, DBMS.MAXDB):
table = conf.tbl
- elif DBMS.SYBASE:
+ elif Backend.getIdentifiedDbms() == DBMS.SYBASE:
table = "%s..%s" % (conf.db, conf.tbl)
entries, lengths = self.__pivotDumpTable(table, colList, count, blind=True)
diff --git a/xml/queries.xml b/xml/queries.xml
index f13aad968..cd849d372 100644
--- a/xml/queries.xml
+++ b/xml/queries.xml
@@ -437,7 +437,7 @@
-
+
@@ -450,7 +450,7 @@
-
+
@@ -461,8 +461,8 @@
-
-
+
+