From 35e72a1620ae68daf29f740e6371fce2f9e26d50 Mon Sep 17 00:00:00 2001 From: Warmlight <344053630@qq.com> Date: Mon, 30 Dec 2024 23:10:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=87=E7=BA=B9=E8=AF=86=E5=88=AB=E4=B8=8Esq?= =?UTF-8?q?lite=E6=95=B0=E6=8D=AE=E5=BA=93=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugins/dbms/sqlite/fingerprint.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/sqlmap-master/plugins/dbms/sqlite/fingerprint.py b/src/sqlmap-master/plugins/dbms/sqlite/fingerprint.py index 5f32b4f..4f4b4ec 100644 --- a/src/sqlmap-master/plugins/dbms/sqlite/fingerprint.py +++ b/src/sqlmap-master/plugins/dbms/sqlite/fingerprint.py @@ -17,17 +17,23 @@ from lib.core.settings import SQLITE_ALIASES from lib.request import inject from plugins.generic.fingerprint import Fingerprint as GenericFingerprint +# 该插件用于检测sqlite数据库,通过执行一些常用函数来判断数据库类型,并获取数据库版本信息,最后返回检测结果。 +# 通过执行SQLITE_VERSION()函数来判断数据库类型,获取数据库版本信息,检测数据库是否存在。 + class Fingerprint(GenericFingerprint): def __init__(self): + # 初始化父类Fingerprint,对象的数据库管理系统类型设置为SQLite GenericFingerprint.__init__(self, DBMS.SQLITE) def getFingerprint(self): value = "" + # 获取Web服务器的操作系统指纹 wsOsFp = Format.getOs("web server", kb.headersFp) if wsOsFp: value += "%s\n" % wsOsFp + # 获取数据库服务器的操作系统指纹 if kb.data.banner: dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp) @@ -36,14 +42,17 @@ class Fingerprint(GenericFingerprint): value += "back-end DBMS: " + # 如果不是详尽指纹模式,直接返回DBMS类型 if not conf.extensiveFp: value += DBMS.SQLITE return value + # 获取当前活动的数据库管理系统信息 actVer = Format.getDbms() blank = " " * 15 value += "active fingerprint: %s" % actVer + # 如果有数据库版本信息的指纹,则进行处理 if kb.bannerFp: banVer = kb.bannerFp.get("dbmsVersion") @@ -51,6 +60,7 @@ class Fingerprint(GenericFingerprint): banVer = Format.getDbms([banVer]) value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer) + # 获取HTML错误消息中的指纹 htmlErrorFp = Format.getErrorParsedDBMSes() if htmlErrorFp: @@ -66,6 +76,7 @@ class Fingerprint(GenericFingerprint): * http://www.sqlite.org/cvstrac/wiki?p=LoadableExtensions """ + # 如果不是详尽指纹模式并且数据库管理系统在已知的SQLite别名之中 if not conf.extensiveFp and Backend.isDbmsWithin(SQLITE_ALIASES): setDbms(DBMS.SQLITE) @@ -76,12 +87,14 @@ class Fingerprint(GenericFingerprint): infoMsg = "testing %s" % DBMS.SQLITE logger.info(infoMsg) + # 检查布尔表达式,验证是否为SQLite result = inject.checkBooleanExpression("LAST_INSERT_ROWID()=LAST_INSERT_ROWID()") if result: infoMsg = "confirming %s" % DBMS.SQLITE logger.info(infoMsg) + # 进一步确认数据库版本 result = inject.checkBooleanExpression("SQLITE_VERSION()=SQLITE_VERSION()") if not result: @@ -93,6 +106,7 @@ class Fingerprint(GenericFingerprint): infoMsg = "actively fingerprinting %s" % DBMS.SQLITE logger.info(infoMsg) + # 依据RANDOMBLOB函数确定SQLite版本 result = inject.checkBooleanExpression("RANDOMBLOB(-1)>0") version = '3' if result else '2' Backend.setVersion(version) @@ -109,4 +123,5 @@ class Fingerprint(GenericFingerprint): return False def forceDbmsEnum(self): + # 强制数据库管理系统枚举,设置数据库名称 conf.db = "%s%s" % (DBMS.SQLITE, METADB_SUFFIX)