Path: blob/master/plugins/dbms/oracle/connector.py
2992 views
#!/usr/bin/env python12"""3Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org)4See the file 'LICENSE' for copying permission5"""67try:8import oracledb9except ImportError:10pass1112import logging13import os14import re1516from lib.core.common import getSafeExString17from lib.core.convert import getText18from lib.core.data import conf19from lib.core.data import logger20from lib.core.exception import SqlmapConnectionException21from plugins.generic.connector import Connector as GenericConnector2223os.environ["NLS_LANG"] = ".AL32UTF8"2425class Connector(GenericConnector):26"""27Homepage: https://oracle.github.io/python-oracledb/28User: https://python-oracledb.readthedocs.io/en/latest/29License: https://github.com/oracle/python-oracledb/blob/main/LICENSE.txt30"""3132def connect(self):33self.initConnection()3435self.user = getText(self.user)36self.password = getText(self.password)3738try:39dsn = oracledb.makedsn(self.hostname, self.port, service_name=self.db)40self.connector = oracledb.connect(user=self.user, password=self.password, dsn=dsn, mode=oracledb.AUTH_MODE_SYSDBA)41logger.info("successfully connected as SYSDBA")42except oracledb.DatabaseError as ex:43# Try again without SYSDBA44try:45self.connector = oracledb.connect(user=self.user, password=self.password, dsn=dsn)46except oracledb.DatabaseError as ex:47raise SqlmapConnectionException(ex)4849self.initCursor()50self.printConnected()5152def fetchall(self):53try:54return self.cursor.fetchall()55except oracledb.InterfaceError as ex:56logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) '%s'" % getSafeExString(ex))57return None5859def execute(self, query):60retVal = False6162try:63self.cursor.execute(getText(query))64retVal = True65except oracledb.DatabaseError as ex:66logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) '%s'" % getSafeExString(ex))6768self.connector.commit()69return retVal7071def select(self, query):72retVal = None7374if self.execute(query):75retVal = self.fetchall()7677return retVal787980