Path: blob/master/plugins/dbms/oracle/connector.py
3555 views
#!/usr/bin/env python12"""3Copyright (c) 2006-2026 sqlmap developers (https://sqlmap.org)4See the file 'LICENSE' for copying permission5"""67try:8import oracledb9except ImportError:10pass1112import logging13import os1415from lib.core.common import getSafeExString16from lib.core.convert import getText17from lib.core.data import conf18from lib.core.data import logger19from lib.core.exception import SqlmapConnectionException20from plugins.generic.connector import Connector as GenericConnector2122os.environ["NLS_LANG"] = ".AL32UTF8"2324class Connector(GenericConnector):25"""26Homepage: https://oracle.github.io/python-oracledb/27User: https://python-oracledb.readthedocs.io/en/latest/28License: https://github.com/oracle/python-oracledb/blob/main/LICENSE.txt29"""3031def connect(self):32self.initConnection()3334self.user = getText(self.user)35self.password = getText(self.password)3637try:38dsn = oracledb.makedsn(self.hostname, self.port, service_name=self.db)39self.connector = oracledb.connect(user=self.user, password=self.password, dsn=dsn, mode=oracledb.AUTH_MODE_SYSDBA)40logger.info("successfully connected as SYSDBA")41except oracledb.DatabaseError:42# Try again without SYSDBA43try:44self.connector = oracledb.connect(user=self.user, password=self.password, dsn=dsn)45except oracledb.DatabaseError as ex:46raise SqlmapConnectionException(ex)4748self.initCursor()49self.printConnected()5051def fetchall(self):52try:53return self.cursor.fetchall()54except oracledb.InterfaceError as ex:55logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) '%s'" % getSafeExString(ex))56return None5758def execute(self, query):59retVal = False6061try:62self.cursor.execute(getText(query))63retVal = True64except oracledb.DatabaseError as ex:65logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) '%s'" % getSafeExString(ex))6667self.connector.commit()68return retVal6970def select(self, query):71retVal = None7273if self.execute(query):74retVal = self.fetchall()7576return retVal777879