mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2024-11-22 01:26:42 +03:00
Major improvement to correctly enumerate tables, columns and dump tables
entries on PostgreSQL when the database name is not 'public' or a system database and on Oracle. Minor code restyle.
This commit is contained in:
parent
e07e48efb2
commit
8f5fb5657d
|
@ -189,6 +189,22 @@ class OracleMap(Fingerprint, Enumeration, Filesystem, Takeover):
|
|||
return False
|
||||
|
||||
|
||||
def forceDbmsEnum(self):
|
||||
if conf.db:
|
||||
conf.db = conf.db.upper()
|
||||
else:
|
||||
conf.db = "USERS"
|
||||
|
||||
warnMsg = "on Oracle it is only possible to enumerate "
|
||||
warnMsg += "if you provide a TABLESPACE_NAME as database "
|
||||
warnMsg += "name. sqlmap is going to use 'USERS' as database "
|
||||
warnMsg += "name"
|
||||
logger.warn(warnMsg)
|
||||
|
||||
if conf.tbl:
|
||||
conf.tbl = conf.tbl.upper()
|
||||
|
||||
|
||||
def getDbs(self):
|
||||
warnMsg = "this plugin can not enumerate databases"
|
||||
logger.warn(warnMsg)
|
||||
|
|
|
@ -35,6 +35,7 @@ from lib.core.data import logger
|
|||
from lib.core.exception import sqlmapSyntaxException
|
||||
from lib.core.session import setDbms
|
||||
from lib.core.settings import PGSQL_ALIASES
|
||||
from lib.core.settings import PGSQL_SYSTEM_DBS
|
||||
from lib.core.unescaper import unescaper
|
||||
from lib.request import inject
|
||||
#from lib.utils.fuzzer import passiveFuzzing
|
||||
|
@ -200,3 +201,14 @@ class PostgreSQLMap(Fingerprint, Enumeration, Filesystem, Takeover):
|
|||
logger.warn(warnMsg)
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def forceDbmsEnum(self):
|
||||
if kb.dbms == "PostgreSQL" and conf.db not in PGSQL_SYSTEM_DBS and conf.db != "public":
|
||||
conf.db = "public"
|
||||
|
||||
warnMsg = "on PostgreSQL it is only possible to enumerate "
|
||||
warnMsg += "on the current schema and on system databases, "
|
||||
warnMsg += "sqlmap is going to use 'public' schema as "
|
||||
warnMsg += "database name"
|
||||
logger.warn(warnMsg)
|
||||
|
|
|
@ -57,18 +57,18 @@ class Enumeration:
|
|||
def __init__(self, dbms):
|
||||
self.has_information_schema = None
|
||||
|
||||
self.banner = ""
|
||||
self.currentUser = ""
|
||||
self.currentDb = ""
|
||||
self.cachedUsers = []
|
||||
self.cachedUsersPassword = {}
|
||||
self.cachedUsersPrivileges = {}
|
||||
self.cachedDbs = []
|
||||
self.cachedTables = {}
|
||||
self.cachedColumns = {}
|
||||
self.dumpedTable = {}
|
||||
self.banner = ""
|
||||
self.currentUser = ""
|
||||
self.currentDb = ""
|
||||
self.cachedUsers = []
|
||||
self.cachedUsersPassword = {}
|
||||
self.cachedUsersPrivileges = {}
|
||||
self.cachedDbs = []
|
||||
self.cachedTables = {}
|
||||
self.cachedColumns = {}
|
||||
self.dumpedTable = {}
|
||||
|
||||
temp.inference = queries[dbms].inference
|
||||
temp.inference = queries[dbms].inference
|
||||
|
||||
if dbms == "MySQL":
|
||||
self.excludeDbsList = MYSQL_SYSTEM_DBS
|
||||
|
@ -80,6 +80,10 @@ class Enumeration:
|
|||
self.excludeDbsList = MSSQL_SYSTEM_DBS
|
||||
|
||||
|
||||
def forceDbmsEnum(self):
|
||||
pass
|
||||
|
||||
|
||||
def getBanner(self):
|
||||
logMsg = "fetching banner"
|
||||
logger.info(logMsg)
|
||||
|
@ -588,18 +592,7 @@ class Enumeration:
|
|||
errMsg += "back-end DBMS is MySQL < 5.0"
|
||||
raise sqlmapUnsupportedFeatureException, errMsg
|
||||
|
||||
if kb.dbms == "Oracle":
|
||||
if conf.db:
|
||||
conf.db = conf.db.upper()
|
||||
else:
|
||||
conf.db = "USERS"
|
||||
|
||||
warnMsg = "on Oracle it is only possible to enumerate "
|
||||
warnMsg += "tables if you provide a TABLESPACE_NAME as "
|
||||
warnMsg += "database name. sqlmap is going to use "
|
||||
warnMsg += "'USERS' to retrieve all tables owned by an "
|
||||
warnMsg += "Oracle database management system user"
|
||||
logger.warn(warnMsg)
|
||||
self.forceDbmsEnum()
|
||||
|
||||
logMsg = "fetching tables"
|
||||
if conf.db:
|
||||
|
@ -701,16 +694,11 @@ class Enumeration:
|
|||
if "." in conf.tbl:
|
||||
conf.db, conf.tbl = conf.tbl.split(".")
|
||||
|
||||
self.forceDbmsEnum()
|
||||
|
||||
if not conf.db:
|
||||
errMsg = "missing database parameter"
|
||||
|
||||
if kb.dbms == "PostgreSQL":
|
||||
conf.db = "public"
|
||||
|
||||
errMsg += ", sqlmap is going to use 'public' schema"
|
||||
logger.warn(errMsg)
|
||||
else:
|
||||
raise sqlmapMissingMandatoryOptionException, errMsg
|
||||
raise sqlmapMissingMandatoryOptionException, errMsg
|
||||
|
||||
logMsg = "fetching columns "
|
||||
logMsg += "for table '%s' " % conf.tbl
|
||||
|
@ -821,20 +809,11 @@ class Enumeration:
|
|||
if "." in conf.tbl:
|
||||
conf.db, conf.tbl = conf.tbl.split(".")
|
||||
|
||||
self.forceDbmsEnum()
|
||||
|
||||
if not conf.db:
|
||||
errMsg = "missing database parameter"
|
||||
|
||||
if kb.dbms == "PostgreSQL":
|
||||
conf.db = "public"
|
||||
|
||||
errMsg += ", sqlmap is going to use 'public' schema"
|
||||
logger.warn(errMsg)
|
||||
else:
|
||||
raise sqlmapMissingMandatoryOptionException, errMsg
|
||||
|
||||
if kb.dbms == "Oracle":
|
||||
conf.db = conf.db.upper()
|
||||
conf.tbl = conf.tbl.upper()
|
||||
raise sqlmapMissingMandatoryOptionException, errMsg
|
||||
|
||||
rootQuery = queries[kb.dbms].dumpTable
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user