diff --git a/lib/request/direct.py b/lib/request/direct.py index 4be59a232..ec888dcda 100644 --- a/lib/request/direct.py +++ b/lib/request/direct.py @@ -26,6 +26,7 @@ from lib.core.agent import agent from lib.core.data import conf from lib.core.data import kb from lib.core.settings import SQL_STATEMENTS +from lib.utils.timeout import timeout def direct(query, content=True): output = None @@ -42,9 +43,9 @@ def direct(query, content=True): break if select: - output = conf.dbmsConnector.select(query) + output = timeout(func=conf.dbmsConnector.select, args = query, duration=conf.timeout, default=None) else: - output = conf.dbmsConnector.execute(query) + output = timeout(func=conf.dbmsConnector.execute, args = query, duration=conf.timeout, default=None) if output is None or len(output) == 0: return None diff --git a/lib/utils/timeout.py b/lib/utils/timeout.py index 126af4861..804778621 100644 --- a/lib/utils/timeout.py +++ b/lib/utils/timeout.py @@ -7,14 +7,12 @@ def timeout(func, args=(), kwargs={}, duration=1, default=None): def __init__(self): threading.Thread.__init__(self) self.exceeded = False - self.exceptionMsg = None self.result = None def run(self): try: self.result = func(*args, **kwargs) - except Exception, msg: - self.exceptionMsg = msg + except: self.result = default thread = InterruptableThread() diff --git a/plugins/dbms/access/connector.py b/plugins/dbms/access/connector.py index e07858634..cfddd0e1d 100644 --- a/plugins/dbms/access/connector.py +++ b/plugins/dbms/access/connector.py @@ -30,7 +30,6 @@ except ImportError, _: from lib.core.data import conf from lib.core.data import logger from lib.core.exception import sqlmapConnectionException -from lib.utils.timeout import timeout from plugins.generic.connector import Connector as GenericConnector @@ -61,10 +60,11 @@ class Connector(GenericConnector): self.connected() def fetchall(self): - retVal = timeout(func=self.cursor.fetchall, duration=conf.timeout, default=None) - if self.exceptionMsg: - logger.log(8, self.exceptionMsg[1]) - return retVal + try: + return self.cursor.fetchall() + except pyodbc.ProgrammingError, msg: + logger.log(8, msg[1]) + return None def execute(self, query): logger.debug(query) diff --git a/plugins/dbms/firebird/connector.py b/plugins/dbms/firebird/connector.py index 71df93785..1e0632a34 100644 --- a/plugins/dbms/firebird/connector.py +++ b/plugins/dbms/firebird/connector.py @@ -30,7 +30,6 @@ except ImportError, _: from lib.core.data import conf from lib.core.data import logger from lib.core.exception import sqlmapConnectionException -from lib.utils.timeout import timeout from plugins.generic.connector import Connector as GenericConnector @@ -60,10 +59,11 @@ class Connector(GenericConnector): self.connected() def fetchall(self): - retVal = timeout(func=self.cursor.fetchall, duration=conf.timeout, default=None) - if self.exceptionMsg: - logger.log(8, self.exceptionMsg[1]) - return retVal + try: + return self.cursor.fetchall() + except kinterbasdb.OperationalError, msg: + logger.log(8, msg[1]) + return None def execute(self, query): logger.debug(query) diff --git a/plugins/dbms/mssqlserver/connector.py b/plugins/dbms/mssqlserver/connector.py index 990292c48..e17abe93a 100644 --- a/plugins/dbms/mssqlserver/connector.py +++ b/plugins/dbms/mssqlserver/connector.py @@ -31,7 +31,6 @@ except ImportError, _: from lib.core.data import conf from lib.core.data import logger from lib.core.exception import sqlmapConnectionException -from lib.utils.timeout import timeout from plugins.generic.connector import Connector as GenericConnector @@ -64,10 +63,11 @@ class Connector(GenericConnector): self.connected() def fetchall(self): - retVal = timeout(func=self.cursor.fetchall, duration=conf.timeout, default=None) - if self.exceptionMsg: - logger.log(8, self.exceptionMsg) - return retVal + try: + return self.cursor.fetchall() + except (pymssql.ProgrammingError, pymssql.OperationalError, _mssql.MssqlDatabaseException), msg: + logger.log(8, msg) + return None def execute(self, query): logger.debug(query) diff --git a/plugins/dbms/mysql/connector.py b/plugins/dbms/mysql/connector.py index 5c3bc099c..b5cf472d6 100644 --- a/plugins/dbms/mysql/connector.py +++ b/plugins/dbms/mysql/connector.py @@ -30,7 +30,6 @@ except ImportError, _: from lib.core.data import conf from lib.core.data import logger from lib.core.exception import sqlmapConnectionException -from lib.utils.timeout import timeout from plugins.generic.connector import Connector as GenericConnector @@ -60,10 +59,11 @@ class Connector(GenericConnector): self.connected() def fetchall(self): - retVal = timeout(func=self.cursor.fetchall, duration=conf.timeout, default=None) - if self.exceptionMsg: - logger.log(8, self.exceptionMsg[1]) - return retVal + try: + return self.cursor.fetchall() + except MySQLdb.ProgrammingError, msg: + logger.log(8, msg[1]) + return None def execute(self, query): logger.debug(query) diff --git a/plugins/dbms/oracle/connector.py b/plugins/dbms/oracle/connector.py index 5d9bbc9ba..936d96eba 100644 --- a/plugins/dbms/oracle/connector.py +++ b/plugins/dbms/oracle/connector.py @@ -30,7 +30,6 @@ except ImportError, _: from lib.core.data import conf from lib.core.data import logger from lib.core.exception import sqlmapConnectionException -from lib.utils.timeout import timeout from plugins.generic.connector import Connector as GenericConnector @@ -62,10 +61,11 @@ class Connector(GenericConnector): self.connected() def fetchall(self): - retVal = timeout(func=self.cursor.fetchall, duration=conf.timeout, default=None) - if self.exceptionMsg: - logger.log(8, self.exceptionMsg) - return retVal + try: + return self.cursor.fetchall() + except cx_Oracle.InterfaceError, msg: + logger.log(8, msg) + return None def execute(self, query): logger.debug(query) diff --git a/plugins/dbms/postgresql/connector.py b/plugins/dbms/postgresql/connector.py index e8466f395..7168e971c 100644 --- a/plugins/dbms/postgresql/connector.py +++ b/plugins/dbms/postgresql/connector.py @@ -30,7 +30,6 @@ except ImportError, _: from lib.core.data import conf from lib.core.data import logger from lib.core.exception import sqlmapConnectionException -from lib.utils.timeout import timeout from plugins.generic.connector import Connector as GenericConnector @@ -60,10 +59,11 @@ class Connector(GenericConnector): self.connected() def fetchall(self): - retVal = timeout(func=self.cursor.fetchall, duration=conf.timeout, default=None) - if self.exceptionMsg: - logger.log(8, self.exceptionMsg) - return retVal + try: + return self.cursor.fetchall() + except psycopg2.ProgrammingError, msg: + logger.log(8, msg) + return None def execute(self, query): logger.debug(query) diff --git a/plugins/dbms/sqlite/connector.py b/plugins/dbms/sqlite/connector.py index 9bba1055f..9c4d34279 100644 --- a/plugins/dbms/sqlite/connector.py +++ b/plugins/dbms/sqlite/connector.py @@ -30,7 +30,6 @@ except ImportError, _: from lib.core.data import conf from lib.core.data import logger from lib.core.exception import sqlmapConnectionException -from lib.utils.timeout import timeout from plugins.generic.connector import Connector as GenericConnector @@ -61,10 +60,11 @@ class Connector(GenericConnector): self.connected() def fetchall(self): - retVal = timeout(func=self.cursor.fetchall, duration=conf.timeout, default=None) - if self.exceptionMsg: - logger.log(8, self.exceptionMsg[0]) - return retVal + try: + return self.cursor.fetchall() + except sqlite3.OperationalError, msg: + logger.log(8, msg[0]) + return None def execute(self, query): logger.debug(query)