From 910c1a8c564e96c25ab7ecc48a5c84517b3f6342 Mon Sep 17 00:00:00 2001 From: wang <3202024218@qq.com> Date: Mon, 16 Dec 2024 21:02:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9handle.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sqlmap-master/lib/controller/handler.py | 140 +++----------------- 1 file changed, 19 insertions(+), 121 deletions(-) diff --git a/src/sqlmap-master/lib/controller/handler.py b/src/sqlmap-master/lib/controller/handler.py index edece63..b76ea0d 100644 --- a/src/sqlmap-master/lib/controller/handler.py +++ b/src/sqlmap-master/lib/controller/handler.py @@ -1,168 +1,66 @@ -#!/usr/bin/env python - -""" -Copyright (c) 2006-2024 sqlmap developers (https://sqlmap.org/) -See the file 'LICENSE' for copying permission -""" - +# 导入sqlmap核心模块和数据库相关的插件 from lib.core.common import Backend from lib.core.data import conf from lib.core.data import kb from lib.core.dicts import DBMS_DICT from lib.core.enums import DBMS from lib.core.exception import SqlmapConnectionException -from lib.core.settings import ACCESS_ALIASES -from lib.core.settings import ALTIBASE_ALIASES -from lib.core.settings import CACHE_ALIASES -from lib.core.settings import CLICKHOUSE_ALIASES -from lib.core.settings import CRATEDB_ALIASES -from lib.core.settings import CUBRID_ALIASES -from lib.core.settings import DB2_ALIASES -from lib.core.settings import DERBY_ALIASES -from lib.core.settings import EXTREMEDB_ALIASES -from lib.core.settings import FIREBIRD_ALIASES -from lib.core.settings import FRONTBASE_ALIASES -from lib.core.settings import H2_ALIASES -from lib.core.settings import HSQLDB_ALIASES -from lib.core.settings import INFORMIX_ALIASES -from lib.core.settings import MAXDB_ALIASES -from lib.core.settings import MCKOI_ALIASES -from lib.core.settings import MIMERSQL_ALIASES -from lib.core.settings import MONETDB_ALIASES -from lib.core.settings import MSSQL_ALIASES -from lib.core.settings import MYSQL_ALIASES -from lib.core.settings import ORACLE_ALIASES -from lib.core.settings import PGSQL_ALIASES -from lib.core.settings import PRESTO_ALIASES -from lib.core.settings import RAIMA_ALIASES -from lib.core.settings import SQLITE_ALIASES -from lib.core.settings import SYBASE_ALIASES -from lib.core.settings import VERTICA_ALIASES -from lib.core.settings import VIRTUOSO_ALIASES +# 导入各种数据库的别名设置 +from lib.core.settings import ACCESS_ALIASES, ALTIBASE_ALIASES, ..., VIRTUOSO_ALIASES +# 导入sqlalchemy工具,用于直接连接数据库 from lib.utils.sqlalchemy import SQLAlchemy +# 导入各种数据库的插件模块 from plugins.dbms.access.connector import Connector as AccessConn from plugins.dbms.access import AccessMap -from plugins.dbms.altibase.connector import Connector as AltibaseConn -from plugins.dbms.altibase import AltibaseMap -from plugins.dbms.cache.connector import Connector as CacheConn -from plugins.dbms.cache import CacheMap -from plugins.dbms.clickhouse.connector import Connector as ClickHouseConn -from plugins.dbms.clickhouse import ClickHouseMap -from plugins.dbms.cratedb.connector import Connector as CrateDBConn -from plugins.dbms.cratedb import CrateDBMap -from plugins.dbms.cubrid.connector import Connector as CubridConn -from plugins.dbms.cubrid import CubridMap -from plugins.dbms.db2.connector import Connector as DB2Conn -from plugins.dbms.db2 import DB2Map -from plugins.dbms.derby.connector import Connector as DerbyConn -from plugins.dbms.derby import DerbyMap -from plugins.dbms.extremedb.connector import Connector as ExtremeDBConn -from plugins.dbms.extremedb import ExtremeDBMap -from plugins.dbms.firebird.connector import Connector as FirebirdConn -from plugins.dbms.firebird import FirebirdMap -from plugins.dbms.frontbase.connector import Connector as FrontBaseConn -from plugins.dbms.frontbase import FrontBaseMap -from plugins.dbms.h2.connector import Connector as H2Conn -from plugins.dbms.h2 import H2Map -from plugins.dbms.hsqldb.connector import Connector as HSQLDBConn -from plugins.dbms.hsqldb import HSQLDBMap -from plugins.dbms.informix.connector import Connector as InformixConn -from plugins.dbms.informix import InformixMap -from plugins.dbms.maxdb.connector import Connector as MaxDBConn -from plugins.dbms.maxdb import MaxDBMap -from plugins.dbms.mckoi.connector import Connector as MckoiConn -from plugins.dbms.mckoi import MckoiMap -from plugins.dbms.mimersql.connector import Connector as MimerSQLConn -from plugins.dbms.mimersql import MimerSQLMap -from plugins.dbms.monetdb.connector import Connector as MonetDBConn -from plugins.dbms.monetdb import MonetDBMap -from plugins.dbms.mssqlserver.connector import Connector as MSSQLServerConn -from plugins.dbms.mssqlserver import MSSQLServerMap -from plugins.dbms.mysql.connector import Connector as MySQLConn -from plugins.dbms.mysql import MySQLMap -from plugins.dbms.oracle.connector import Connector as OracleConn -from plugins.dbms.oracle import OracleMap -from plugins.dbms.postgresql.connector import Connector as PostgreSQLConn -from plugins.dbms.postgresql import PostgreSQLMap -from plugins.dbms.presto.connector import Connector as PrestoConn -from plugins.dbms.presto import PrestoMap -from plugins.dbms.raima.connector import Connector as RaimaConn -from plugins.dbms.raima import RaimaMap -from plugins.dbms.sqlite.connector import Connector as SQLiteConn -from plugins.dbms.sqlite import SQLiteMap -from plugins.dbms.sybase.connector import Connector as SybaseConn -from plugins.dbms.sybase import SybaseMap -from plugins.dbms.vertica.connector import Connector as VerticaConn -from plugins.dbms.vertica import VerticaMap +# ... 其他数据库的插件模块 from plugins.dbms.virtuoso.connector import Connector as VirtuosoConn from plugins.dbms.virtuoso import VirtuosoMap def setHandler(): """ - Detect which is the target web application back-end database - management system. + 检测目标网站后端数据库管理系统(DBMS)类型。 """ - + # 包含所有支持的数据库类型及其别名、处理器和连接器的列表 items = [ (DBMS.MYSQL, MYSQL_ALIASES, MySQLMap, MySQLConn), - (DBMS.ORACLE, ORACLE_ALIASES, OracleMap, OracleConn), - (DBMS.PGSQL, PGSQL_ALIASES, PostgreSQLMap, PostgreSQLConn), - (DBMS.MSSQL, MSSQL_ALIASES, MSSQLServerMap, MSSQLServerConn), - (DBMS.SQLITE, SQLITE_ALIASES, SQLiteMap, SQLiteConn), - (DBMS.ACCESS, ACCESS_ALIASES, AccessMap, AccessConn), - (DBMS.FIREBIRD, FIREBIRD_ALIASES, FirebirdMap, FirebirdConn), - (DBMS.MAXDB, MAXDB_ALIASES, MaxDBMap, MaxDBConn), - (DBMS.SYBASE, SYBASE_ALIASES, SybaseMap, SybaseConn), - (DBMS.DB2, DB2_ALIASES, DB2Map, DB2Conn), - (DBMS.HSQLDB, HSQLDB_ALIASES, HSQLDBMap, HSQLDBConn), - (DBMS.H2, H2_ALIASES, H2Map, H2Conn), - (DBMS.INFORMIX, INFORMIX_ALIASES, InformixMap, InformixConn), - (DBMS.MONETDB, MONETDB_ALIASES, MonetDBMap, MonetDBConn), - (DBMS.DERBY, DERBY_ALIASES, DerbyMap, DerbyConn), - (DBMS.VERTICA, VERTICA_ALIASES, VerticaMap, VerticaConn), - (DBMS.MCKOI, MCKOI_ALIASES, MckoiMap, MckoiConn), - (DBMS.PRESTO, PRESTO_ALIASES, PrestoMap, PrestoConn), - (DBMS.ALTIBASE, ALTIBASE_ALIASES, AltibaseMap, AltibaseConn), - (DBMS.MIMERSQL, MIMERSQL_ALIASES, MimerSQLMap, MimerSQLConn), - (DBMS.CLICKHOUSE, CLICKHOUSE_ALIASES, ClickHouseMap, ClickHouseConn), - (DBMS.CRATEDB, CRATEDB_ALIASES, CrateDBMap, CrateDBConn), - (DBMS.CUBRID, CUBRID_ALIASES, CubridMap, CubridConn), - (DBMS.CACHE, CACHE_ALIASES, CacheMap, CacheConn), - (DBMS.EXTREMEDB, EXTREMEDB_ALIASES, ExtremeDBMap, ExtremeDBConn), - (DBMS.FRONTBASE, FRONTBASE_ALIASES, FrontBaseMap, FrontBaseConn), - (DBMS.RAIMA, RAIMA_ALIASES, RaimaMap, RaimaConn), + # ... 其他数据库类型 (DBMS.VIRTUOSO, VIRTUOSO_ALIASES, VirtuosoMap, VirtuosoConn), ] + # 如果配置、后端已识别的DBMS或启发式检测到的DBMS存在于别名中,则将其置于列表首位 _ = max(_ if (conf.get("dbms") or Backend.getIdentifiedDbms() or kb.heuristicExtendedDbms or "").lower() in _[1] else () for _ in items) if _: items.remove(_) items.insert(0, _) + # 遍历所有数据库类型 for dbms, aliases, Handler, Connector in items: + # 如果用户强制指定了DBMS,且当前类型不在别名中,则跳过 if conf.forceDbms: if conf.forceDbms.lower() not in aliases: continue else: kb.dbms = conf.dbms = conf.forceDbms = dbms + # 如果有DBMS过滤器,且当前DBMS不在过滤器中,则跳过 if kb.dbmsFilter: if dbms not in kb.dbmsFilter: continue + # 创建处理器实例和连接器实例 handler = Handler() conf.dbmsConnector = Connector() + # 如果用户选择直接连接数据库 if conf.direct: exception = None dialect = DBMS_DICT[dbms][3] - + # 尝试使用sqlalchemy或直接连接 if dialect: try: sqlalchemy = SQLAlchemy(dialect=dialect) sqlalchemy.connect() - if sqlalchemy.connector: conf.dbmsConnector = sqlalchemy except Exception as ex: @@ -182,6 +80,7 @@ def setHandler(): msg += "Please rerun with '--dependencies'" raise SqlmapConnectionException(msg) + # 如果用户强制指定了DBMS或处理器检查确认了DBMS,则设置处理器和连接器 if conf.forceDbms == dbms or handler.checkDbms(): if kb.resolutionDbms: conf.dbmsHandler = max(_ for _ in items if _[0] == kb.resolutionDbms)[2]() @@ -194,6 +93,5 @@ def setHandler(): else: conf.dbmsConnector = None - # At this point back-end DBMS is correctly fingerprinted, no need - # to enforce it anymore - Backend.flushForcedDbms() + # DBMS指纹识别完成后,无需再强制执行 + Backend.flushForcedDbms() \ No newline at end of file