mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2026-08-04 14:55:40 +00:00
71 lines
3.1 KiB
Python
71 lines
3.1 KiB
Python
#!/usr/bin/env python
|
|
|
|
"""
|
|
Copyright (c) 2006-2026 sqlmap developers (https://sqlmap.org)
|
|
See the file 'LICENSE' for copying permission
|
|
"""
|
|
|
|
from lib.core.common import Backend
|
|
from lib.core.data import logger
|
|
from lib.core.data import queries
|
|
from lib.core.enums import DBMS
|
|
from lib.core.enums import FORK
|
|
|
|
from plugins.generic.enumeration import Enumeration as GenericEnumeration
|
|
|
|
class Enumeration(GenericEnumeration):
|
|
def getHostname(self):
|
|
warnMsg = "on PostgreSQL it is not possible to enumerate the hostname"
|
|
logger.warning(warnMsg)
|
|
|
|
def getColumns(self, *args, **kwargs):
|
|
if not Backend.isFork(FORK.DUCKDB):
|
|
return GenericEnumeration.getColumns(self, *args, **kwargs)
|
|
|
|
# DuckDB (PostgreSQL fork) exposes column metadata through information_schema instead of the
|
|
# pg_catalog tables (pg_attribute yields no rows), so swap those queries in for the generic routine
|
|
columns = queries[DBMS.PGSQL].columns
|
|
backup = (columns.inband.query, columns.inband.condition, columns.blind.query, columns.blind.query2, columns.blind.count, columns.blind.condition)
|
|
|
|
columns.inband.query = "SELECT column_name,data_type FROM information_schema.columns WHERE table_name='%s' AND table_schema='%s' ORDER BY column_name"
|
|
columns.blind.query = "SELECT column_name FROM information_schema.columns WHERE table_name='%s' AND table_schema='%s' ORDER BY column_name"
|
|
columns.blind.query2 = "SELECT data_type FROM information_schema.columns WHERE table_name='%s' AND column_name='%s' AND table_schema='%s'"
|
|
columns.blind.count = "SELECT COUNT(column_name) FROM information_schema.columns WHERE table_name='%s' AND table_schema='%s'"
|
|
columns.inband.condition = columns.blind.condition = "column_name"
|
|
|
|
try:
|
|
return GenericEnumeration.getColumns(self, *args, **kwargs)
|
|
finally:
|
|
columns.inband.query, columns.inband.condition, columns.blind.query, columns.blind.query2, columns.blind.count, columns.blind.condition = backup
|
|
|
|
def getUsers(self):
|
|
if Backend.isFork(FORK.DUCKDB):
|
|
warnMsg = "on DuckDB it is not possible to enumerate the users"
|
|
logger.warning(warnMsg)
|
|
return []
|
|
|
|
return GenericEnumeration.getUsers(self)
|
|
|
|
def getPasswordHashes(self):
|
|
if Backend.isFork(FORK.DUCKDB):
|
|
warnMsg = "on DuckDB it is not possible to enumerate the user password hashes"
|
|
logger.warning(warnMsg)
|
|
return {}
|
|
|
|
return GenericEnumeration.getPasswordHashes(self)
|
|
|
|
def getPrivileges(self, query2=False):
|
|
if Backend.isFork(FORK.DUCKDB):
|
|
warnMsg = "on DuckDB it is not possible to enumerate the user privileges"
|
|
logger.warning(warnMsg)
|
|
return {}
|
|
|
|
return GenericEnumeration.getPrivileges(self, query2)
|
|
|
|
def getRoles(self, query2=False):
|
|
if Backend.isFork(FORK.DUCKDB):
|
|
warnMsg = "on DuckDB it is not possible to enumerate the user roles"
|
|
logger.warning(warnMsg)
|
|
return {}
|
|
|
|
return GenericEnumeration.getRoles(self, query2)
|