Path: blob/master/plugins/dbms/sqlite/fingerprint.py
2992 views
#!/usr/bin/env python12"""3Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org)4See the file 'LICENSE' for copying permission5"""67from lib.core.common import Backend8from lib.core.common import Format9from lib.core.data import conf10from lib.core.data import kb11from lib.core.data import logger12from lib.core.enums import DBMS13from lib.core.session import setDbms14from lib.core.settings import METADB_SUFFIX15from lib.core.settings import SQLITE_ALIASES16from lib.request import inject17from plugins.generic.fingerprint import Fingerprint as GenericFingerprint1819class Fingerprint(GenericFingerprint):20def __init__(self):21GenericFingerprint.__init__(self, DBMS.SQLITE)2223def getFingerprint(self):24value = ""25wsOsFp = Format.getOs("web server", kb.headersFp)2627if wsOsFp:28value += "%s\n" % wsOsFp2930if kb.data.banner:31dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp)3233if dbmsOsFp:34value += "%s\n" % dbmsOsFp3536value += "back-end DBMS: "3738if not conf.extensiveFp:39value += DBMS.SQLITE40return value4142actVer = Format.getDbms()43blank = " " * 1544value += "active fingerprint: %s" % actVer4546if kb.bannerFp:47banVer = kb.bannerFp.get("dbmsVersion")4849if banVer:50banVer = Format.getDbms([banVer])51value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer)5253htmlErrorFp = Format.getErrorParsedDBMSes()5455if htmlErrorFp:56value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp)5758return value5960def checkDbms(self):61"""62References for fingerprint:6364* http://www.sqlite.org/lang_corefunc.html65* http://www.sqlite.org/cvstrac/wiki?p=LoadableExtensions66"""6768if not conf.extensiveFp and Backend.isDbmsWithin(SQLITE_ALIASES):69setDbms(DBMS.SQLITE)7071self.getBanner()7273return True7475infoMsg = "testing %s" % DBMS.SQLITE76logger.info(infoMsg)7778result = inject.checkBooleanExpression("LAST_INSERT_ROWID()=LAST_INSERT_ROWID()")7980if result:81infoMsg = "confirming %s" % DBMS.SQLITE82logger.info(infoMsg)8384result = inject.checkBooleanExpression("SQLITE_VERSION()=SQLITE_VERSION()")8586if not result:87warnMsg = "the back-end DBMS is not %s" % DBMS.SQLITE88logger.warning(warnMsg)8990return False91else:92infoMsg = "actively fingerprinting %s" % DBMS.SQLITE93logger.info(infoMsg)9495result = inject.checkBooleanExpression("RANDOMBLOB(-1) IS NOT NULL")96version = '3' if result else '2'97Backend.setVersion(version)9899setDbms(DBMS.SQLITE)100101self.getBanner()102103return True104else:105warnMsg = "the back-end DBMS is not %s" % DBMS.SQLITE106logger.warning(warnMsg)107108return False109110def forceDbmsEnum(self):111conf.db = "%s%s" % (DBMS.SQLITE, METADB_SUFFIX)112113114