1#!/usr/bin/env python 2 3""" 4Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) 5See the file 'LICENSE' for copying permission 6""" 7 8try: 9 import pyodbc 10except: 11 pass 12 13import logging 14 15from lib.core.common import getSafeExString 16from lib.core.data import conf 17from lib.core.data import logger 18from lib.core.exception import SqlmapConnectionException 19from lib.core.exception import SqlmapUnsupportedFeatureException 20from lib.core.settings import IS_WIN 21from plugins.generic.connector import Connector as GenericConnector 22 23class Connector(GenericConnector): 24 """ 25 Homepage: http://pyodbc.googlecode.com/ 26 User guide: http://code.google.com/p/pyodbc/wiki/GettingStarted 27 API: http://code.google.com/p/pyodbc/w/list 28 Debian package: python-pyodbc 29 License: MIT 30 """ 31 32 def connect(self): 33 if not IS_WIN: 34 errMsg = "currently, direct connection to Microsoft Access database(s) " 35 errMsg += "is restricted to Windows platforms" 36 raise SqlmapUnsupportedFeatureException(errMsg) 37 38 self.initConnection() 39 self.checkFileDb() 40 41 try: 42 self.connector = pyodbc.connect('Driver={Microsoft Access Driver (*.mdb)};Dbq=%s;Uid=Admin;Pwd=;' % self.db) 43 except (pyodbc.Error, pyodbc.OperationalError) as ex: 44 raise SqlmapConnectionException(getSafeExString(ex)) 45 46 self.initCursor() 47 self.printConnected() 48 49 def fetchall(self): 50 try: 51 return self.cursor.fetchall() 52 except pyodbc.ProgrammingError as ex: 53 logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % getSafeExString(ex)) 54 return None 55 56 def execute(self, query): 57 try: 58 self.cursor.execute(query) 59 except (pyodbc.OperationalError, pyodbc.ProgrammingError) as ex: 60 logger.log(logging.WARN if conf.dbmsHandler else logging.DEBUG, "(remote) %s" % getSafeExString(ex)) 61 except pyodbc.Error as ex: 62 raise SqlmapConnectionException(getSafeExString(ex)) 63 64 self.connector.commit() 65 66 def select(self, query): 67 self.execute(query) 68 return self.fetchall() 69